| 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 | } |