diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-08 07:22:00 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-12 03:36:14 +0200 |
commit | c475879556a8602bbe2faa9a06f6e5fcc8c05bb2 (patch) | |
tree | 9d7e4882a08171d1ff1b84e3f02d3e604756815b /fs/affs/file.c | |
parent | repair bfs_write_inode(), switch bfs to simple_fsync() (diff) | |
download | linux-c475879556a8602bbe2faa9a06f6e5fcc8c05bb2.tar.xz linux-c475879556a8602bbe2faa9a06f6e5fcc8c05bb2.zip |
sanitize ->fsync() for affs
unfortunately, for affs (especially for affs directories) we have
no real way to keep track of metadata ownership. So we have to
do more or less what file_fsync() does, but we do *not* need to
call write_super() there.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to '')
-rw-r--r-- | fs/affs/file.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/affs/file.c b/fs/affs/file.c index 9246cb4aa018..184e55c1c9ba 100644 --- a/fs/affs/file.c +++ b/fs/affs/file.c @@ -34,7 +34,7 @@ const struct file_operations affs_file_operations = { .mmap = generic_file_mmap, .open = affs_file_open, .release = affs_file_release, - .fsync = file_fsync, + .fsync = affs_file_fsync, .splice_read = generic_file_splice_read, }; @@ -915,3 +915,15 @@ affs_truncate(struct inode *inode) } affs_free_prealloc(inode); } + +int affs_file_fsync(struct file *filp, struct dentry *dentry, int datasync) +{ + struct inode * inode = dentry->d_inode; + int ret, err; + + ret = write_inode_now(inode, 0); + err = sync_blockdev(inode->i_sb->s_bdev); + if (!ret) + ret = err; + return ret; +} |