file.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * linux/fs/sysv/file.c
  3. *
  4. * minix/file.c
  5. * Copyright (C) 1991, 1992 Linus Torvalds
  6. *
  7. * coh/file.c
  8. * Copyright (C) 1993 Pascal Haible, Bruno Haible
  9. *
  10. * sysv/file.c
  11. * Copyright (C) 1993 Bruno Haible
  12. *
  13. * SystemV/Coherent regular file handling primitives
  14. */
  15. #include "sysv.h"
  16. /*
  17. * We have mostly NULLs here: the current defaults are OK for
  18. * the coh filesystem.
  19. */
  20. const struct file_operations sysv_file_operations = {
  21. .llseek = generic_file_llseek,
  22. .read = generic_file_read,
  23. .write = generic_file_write,
  24. .mmap = generic_file_mmap,
  25. .fsync = sysv_sync_file,
  26. .sendfile = generic_file_sendfile,
  27. };
  28. struct inode_operations sysv_file_inode_operations = {
  29. .truncate = sysv_truncate,
  30. .getattr = sysv_getattr,
  31. };
  32. int sysv_sync_file(struct file * file, struct dentry *dentry, int datasync)
  33. {
  34. struct inode *inode = dentry->d_inode;
  35. int err;
  36. err = sync_mapping_buffers(inode->i_mapping);
  37. if (!(inode->i_state & I_DIRTY))
  38. return err;
  39. if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
  40. return err;
  41. err |= sysv_sync_inode(inode);
  42. return err ? -EIO : 0;
  43. }