| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * fsync.c | 
|  | 3 | * | 
|  | 4 | * PURPOSE | 
|  | 5 | *  Fsync handling routines for the OSTA-UDF(tm) filesystem. | 
|  | 6 | * | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | * COPYRIGHT | 
|  | 8 | *  This file is distributed under the terms of the GNU General Public | 
|  | 9 | *  License (GPL). Copies of the GPL can be obtained from: | 
|  | 10 | *      ftp://prep.ai.mit.edu/pub/gnu/GPL | 
|  | 11 | *  Each contributing author retains all rights to their own work. | 
|  | 12 | * | 
|  | 13 | *  (C) 1999-2001 Ben Fennema | 
|  | 14 | *  (C) 1999-2000 Stelias Computing Inc | 
|  | 15 | * | 
|  | 16 | * HISTORY | 
|  | 17 | * | 
|  | 18 | *  05/22/99 blf  Created. | 
|  | 19 | */ | 
|  | 20 |  | 
|  | 21 | #include "udfdecl.h" | 
|  | 22 |  | 
|  | 23 | #include <linux/fs.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 24 |  | 
|  | 25 | static int udf_fsync_inode(struct inode *, int); | 
|  | 26 |  | 
|  | 27 | /* | 
|  | 28 | *	File may be NULL when we are called. Perhaps we shouldn't | 
|  | 29 | *	even pass file to fsync ? | 
|  | 30 | */ | 
|  | 31 |  | 
| Cyrill Gorcunov | cb00ea3 | 2007-07-19 01:47:43 -0700 | [diff] [blame] | 32 | int udf_fsync_file(struct file *file, struct dentry *dentry, int datasync) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 33 | { | 
|  | 34 | struct inode *inode = dentry->d_inode; | 
| Cyrill Gorcunov | 28de794 | 2007-07-21 04:37:18 -0700 | [diff] [blame] | 35 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | return udf_fsync_inode(inode, datasync); | 
|  | 37 | } | 
|  | 38 |  | 
|  | 39 | static int udf_fsync_inode(struct inode *inode, int datasync) | 
|  | 40 | { | 
|  | 41 | int err; | 
|  | 42 |  | 
|  | 43 | err = sync_mapping_buffers(inode->i_mapping); | 
|  | 44 | if (!(inode->i_state & I_DIRTY)) | 
|  | 45 | return err; | 
|  | 46 | if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) | 
|  | 47 | return err; | 
|  | 48 |  | 
| Cyrill Gorcunov | cb00ea3 | 2007-07-19 01:47:43 -0700 | [diff] [blame] | 49 | err |= udf_sync_inode(inode); | 
| Cyrill Gorcunov | 28de794 | 2007-07-21 04:37:18 -0700 | [diff] [blame] | 50 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 51 | return err ? -EIO : 0; | 
|  | 52 | } |