file.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * linux/fs/minix/file.c
  3. *
  4. * Copyright (C) 1991, 1992 Linus Torvalds
  5. *
  6. * minix regular file handling primitives
  7. */
  8. #include <linux/buffer_head.h> /* for fsync_inode_buffers() */
  9. #include "minix.h"
  10. /*
  11. * We have mostly NULLs here: the current defaults are OK for
  12. * the minix filesystem.
  13. */
  14. int minix_sync_file(struct file *, struct dentry *, int);
  15. const struct file_operations minix_file_operations = {
  16. .llseek = generic_file_llseek,
  17. .read = do_sync_read,
  18. .aio_read = generic_file_aio_read,
  19. .write = do_sync_write,
  20. .aio_write = generic_file_aio_write,
  21. .mmap = generic_file_mmap,
  22. .fsync = minix_sync_file,
  23. .sendfile = generic_file_sendfile,
  24. };
  25. const struct inode_operations minix_file_inode_operations = {
  26. .truncate = minix_truncate,
  27. .getattr = minix_getattr,
  28. };
  29. int minix_sync_file(struct file * file, struct dentry *dentry, int datasync)
  30. {
  31. struct inode *inode = dentry->d_inode;
  32. int err;
  33. err = sync_mapping_buffers(inode->i_mapping);
  34. if (!(inode->i_state & I_DIRTY))
  35. return err;
  36. if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
  37. return err;
  38. err |= minix_sync_inode(inode);
  39. return err ? -EIO : 0;
  40. }