1/*
2 * fsync.c
3 *
4 * PURPOSE
5 *  Fsync handling routines for the OSTA-UDF(tm) filesystem.
6 *
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>
24
25static 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
32int udf_fsync_file(struct file * file, struct dentry *dentry, int datasync)
33{
34	struct inode *inode = dentry->d_inode;
35	return udf_fsync_inode(inode, datasync);
36}
37
38static int udf_fsync_inode(struct inode *inode, int datasync)
39{
40	int err;
41
42	err = sync_mapping_buffers(inode->i_mapping);
43	if (!(inode->i_state & I_DIRTY))
44		return err;
45	if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
46		return err;
47
48	err |= udf_sync_inode (inode);
49	return err ? -EIO : 0;
50}
51