nilfs2: fix missed-sync issue for do_sync_mapping_range()
Chris Mason pointed out that there is a missed sync issue in
nilfs_writepages():
On Wed, 17 Dec 2008 21:52:55 -0500, Chris Mason wrote:
> It looks like nilfs_writepage ignores WB_SYNC_NONE, which is used by
> do_sync_mapping_range().
where WB_SYNC_NONE in do_sync_mapping_range() was replaced with
WB_SYNC_ALL by Nick's patch (commit:
ee53a891f4
).
This fixes the problem by letting nilfs_writepages() write out the log of
file data within the range if sync_mode is WB_SYNC_ALL.
This involves removal of nilfs_file_aio_write() which was previously
needed to ensure O_SYNC sync writes.
Cc: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
9ff05123e3
commit
f30bf3e40f
@@ -44,35 +44,14 @@ int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync)
|
||||
return 0;
|
||||
|
||||
if (datasync)
|
||||
err = nilfs_construct_dsync_segment(inode->i_sb, inode);
|
||||
err = nilfs_construct_dsync_segment(inode->i_sb, inode, 0,
|
||||
LLONG_MAX);
|
||||
else
|
||||
err = nilfs_construct_segment(inode->i_sb);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
nilfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
unsigned long nr_segs, loff_t pos)
|
||||
{
|
||||
struct file *file = iocb->ki_filp;
|
||||
struct inode *inode = file->f_dentry->d_inode;
|
||||
ssize_t ret;
|
||||
|
||||
ret = generic_file_aio_write(iocb, iov, nr_segs, pos);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) {
|
||||
int err;
|
||||
|
||||
err = nilfs_construct_dsync_segment(inode->i_sb, inode);
|
||||
if (unlikely(err))
|
||||
return err;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int nilfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||
{
|
||||
struct page *page = vmf->page;
|
||||
@@ -160,7 +139,7 @@ struct file_operations nilfs_file_operations = {
|
||||
.read = do_sync_read,
|
||||
.write = do_sync_write,
|
||||
.aio_read = generic_file_aio_read,
|
||||
.aio_write = nilfs_file_aio_write,
|
||||
.aio_write = generic_file_aio_write,
|
||||
.ioctl = nilfs_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = nilfs_compat_ioctl,
|
||||
|
Reference in New Issue
Block a user