fsync.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * fsync.c
  3. *
  4. * PURPOSE
  5. * Fsync handling routines for the OSTA-UDF(tm) filesystem.
  6. *
  7. * CONTACTS
  8. * E-mail regarding any portion of the Linux UDF file system should be
  9. * directed to the development team mailing list (run by majordomo):
  10. * linux_udf@hpesjro.fc.hp.com
  11. *
  12. * COPYRIGHT
  13. * This file is distributed under the terms of the GNU General Public
  14. * License (GPL). Copies of the GPL can be obtained from:
  15. * ftp://prep.ai.mit.edu/pub/gnu/GPL
  16. * Each contributing author retains all rights to their own work.
  17. *
  18. * (C) 1999-2001 Ben Fennema
  19. * (C) 1999-2000 Stelias Computing Inc
  20. *
  21. * HISTORY
  22. *
  23. * 05/22/99 blf Created.
  24. */
  25. #include "udfdecl.h"
  26. #include <linux/fs.h>
  27. #include <linux/smp_lock.h>
  28. static int udf_fsync_inode(struct inode *, int);
  29. /*
  30. * File may be NULL when we are called. Perhaps we shouldn't
  31. * even pass file to fsync ?
  32. */
  33. int udf_fsync_file(struct file * file, struct dentry *dentry, int datasync)
  34. {
  35. struct inode *inode = dentry->d_inode;
  36. return udf_fsync_inode(inode, datasync);
  37. }
  38. static int udf_fsync_inode(struct inode *inode, int datasync)
  39. {
  40. int err;
  41. err = sync_mapping_buffers(inode->i_mapping);
  42. if (!(inode->i_state & I_DIRTY))
  43. return err;
  44. if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
  45. return err;
  46. err |= udf_sync_inode (inode);
  47. return err ? -EIO : 0;
  48. }