file.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * linux/fs/ufs/file.c
  3. *
  4. * Copyright (C) 1998
  5. * Daniel Pirkl <daniel.pirkl@email.cz>
  6. * Charles University, Faculty of Mathematics and Physics
  7. *
  8. * from
  9. *
  10. * linux/fs/ext2/file.c
  11. *
  12. * Copyright (C) 1992, 1993, 1994, 1995
  13. * Remy Card (card@masi.ibp.fr)
  14. * Laboratoire MASI - Institut Blaise Pascal
  15. * Universite Pierre et Marie Curie (Paris VI)
  16. *
  17. * from
  18. *
  19. * linux/fs/minix/file.c
  20. *
  21. * Copyright (C) 1991, 1992 Linus Torvalds
  22. *
  23. * ext2 fs regular file handling primitives
  24. */
  25. #include <linux/fs.h>
  26. #include <linux/buffer_head.h> /* for sync_mapping_buffers() */
  27. #include "ufs_fs.h"
  28. #include "ufs.h"
  29. static int ufs_sync_file(struct file *file, struct dentry *dentry, int datasync)
  30. {
  31. struct inode *inode = dentry->d_inode;
  32. int err;
  33. int ret;
  34. ret = sync_mapping_buffers(inode->i_mapping);
  35. if (!(inode->i_state & I_DIRTY))
  36. return ret;
  37. if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
  38. return ret;
  39. err = ufs_sync_inode(inode);
  40. if (ret == 0)
  41. ret = err;
  42. return ret;
  43. }
  44. /*
  45. * We have mostly NULL's here: the current defaults are ok for
  46. * the ufs filesystem.
  47. */
  48. const struct file_operations ufs_file_operations = {
  49. .llseek = generic_file_llseek,
  50. .read = do_sync_read,
  51. .aio_read = generic_file_aio_read,
  52. .write = do_sync_write,
  53. .aio_write = generic_file_aio_write,
  54. .mmap = generic_file_mmap,
  55. .open = generic_file_open,
  56. .fsync = ufs_sync_file,
  57. .splice_read = generic_file_splice_read,
  58. };