| /* | 
 |  * fsync.c | 
 |  * | 
 |  * PURPOSE | 
 |  *  Fsync handling routines for the OSTA-UDF(tm) filesystem. | 
 |  * | 
 |  * COPYRIGHT | 
 |  *  This file is distributed under the terms of the GNU General Public | 
 |  *  License (GPL). Copies of the GPL can be obtained from: | 
 |  *      ftp://prep.ai.mit.edu/pub/gnu/GPL | 
 |  *  Each contributing author retains all rights to their own work. | 
 |  * | 
 |  *  (C) 1999-2001 Ben Fennema | 
 |  *  (C) 1999-2000 Stelias Computing Inc | 
 |  * | 
 |  * HISTORY | 
 |  * | 
 |  *  05/22/99 blf  Created. | 
 |  */ | 
 |  | 
 | #include "udfdecl.h" | 
 |  | 
 | #include <linux/fs.h> | 
 | #include <linux/smp_lock.h> | 
 |  | 
 | static int udf_fsync_inode(struct inode *, int); | 
 |  | 
 | /* | 
 |  *	File may be NULL when we are called. Perhaps we shouldn't | 
 |  *	even pass file to fsync ? | 
 |  */ | 
 |  | 
 | int udf_fsync_file(struct file * file, struct dentry *dentry, int datasync) | 
 | { | 
 | 	struct inode *inode = dentry->d_inode; | 
 | 	return udf_fsync_inode(inode, datasync); | 
 | } | 
 |  | 
 | static int udf_fsync_inode(struct inode *inode, int datasync) | 
 | { | 
 | 	int err; | 
 |  | 
 | 	err = sync_mapping_buffers(inode->i_mapping); | 
 | 	if (!(inode->i_state & I_DIRTY)) | 
 | 		return err; | 
 | 	if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) | 
 | 		return err; | 
 |  | 
 | 	err |= udf_sync_inode (inode); | 
 | 	return err ? -EIO : 0; | 
 | } |