diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-07-04 21:21:08 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-07-04 21:21:08 +0000 |
commit | 58615e0586bb5d8f17cdd4ec71f4b8c2a1497f3b (patch) | |
tree | 2737649ce6b4268d4d566a210e7f0bf83784984b /kernel/file.c | |
parent | 014d7d28269067df7c23aa174da84f9f7930de2b (diff) |
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r-- | kernel/file.c | 24 |
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; |