aboutsummaryrefslogtreecommitdiff
path: root/kernel/file.c
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <miklos@szeredi.hu>2004-07-04 21:21:08 +0000
committerGravatar Miklos Szeredi <miklos@szeredi.hu>2004-07-04 21:21:08 +0000
commit58615e0586bb5d8f17cdd4ec71f4b8c2a1497f3b (patch)
tree2737649ce6b4268d4d566a210e7f0bf83784984b /kernel/file.c
parent014d7d28269067df7c23aa174da84f9f7930de2b (diff)
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 0b75637..4a800e8 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -17,13 +17,6 @@
#ifndef KERNEL_2_6
#define PageUptodate(page) Page_Uptodate(page)
-#ifndef filemap_fdatawrite
-#ifndef NO_MM
-#define filemap_fdatawrite filemap_fdatasync
-#else
-#define filemap_fdatawrite do {} while (0)
-#endif
-#endif
#endif
static int fuse_open(struct inode *inode, struct file *file)
@@ -85,16 +78,29 @@ static int fuse_open(struct inode *inode, struct file *file)
return err;
}
+void fuse_sync_inode(struct inode *inode)
+{
+#ifdef KERNEL_2_6
+ filemap_fdatawrite(inode->i_mapping);
+ filemap_fdatawait(inode->i_mapping);
+#else
+#ifndef NO_MM
+ filemap_fdatasync(inode->i_mapping);
+ filemap_fdatawait(inode->i_mapping);
+#endif
+#endif
+}
+
static int fuse_release(struct inode *inode, struct file *file)
{
struct fuse_conn *fc = INO_FC(inode);
struct fuse_open_in *inarg;
struct fuse_req *req = file->private_data;
+ down(&inode->i_sem);
if (file->f_mode & FMODE_WRITE)
- filemap_fdatawrite(inode->i_mapping);
+ fuse_sync_inode(inode);
- down(&inode->i_sem);
inarg = &req->misc.open_in;
inarg->flags = file->f_flags & ~O_EXCL;
req->in.h.opcode = FUSE_RELEASE;