xfs: remove xfs_flushinval_pages
It's just a simple wrapper around VFS functionality, and is actually bugging in that it doesn't remove mappings before invalidating the page cache. Remove it and replace it with the correct VFS functionality. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Andrew Dahl <adahl@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
@@ -255,15 +255,14 @@ xfs_file_aio_read(
|
||||
xfs_buftarg_t *target =
|
||||
XFS_IS_REALTIME_INODE(ip) ?
|
||||
mp->m_rtdev_targp : mp->m_ddev_targp;
|
||||
if ((iocb->ki_pos & target->bt_smask) ||
|
||||
(size & target->bt_smask)) {
|
||||
if (iocb->ki_pos == i_size_read(inode))
|
||||
if ((pos & target->bt_smask) || (size & target->bt_smask)) {
|
||||
if (pos == i_size_read(inode))
|
||||
return 0;
|
||||
return -XFS_ERROR(EINVAL);
|
||||
}
|
||||
}
|
||||
|
||||
n = mp->m_super->s_maxbytes - iocb->ki_pos;
|
||||
n = mp->m_super->s_maxbytes - pos;
|
||||
if (n <= 0 || size == 0)
|
||||
return 0;
|
||||
|
||||
@@ -289,20 +288,21 @@ xfs_file_aio_read(
|
||||
xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
|
||||
|
||||
if (inode->i_mapping->nrpages) {
|
||||
ret = -xfs_flushinval_pages(ip,
|
||||
(iocb->ki_pos & PAGE_CACHE_MASK),
|
||||
-1, FI_REMAPF_LOCKED);
|
||||
ret = -filemap_write_and_wait_range(
|
||||
VFS_I(ip)->i_mapping,
|
||||
pos, -1);
|
||||
if (ret) {
|
||||
xfs_rw_iunlock(ip, XFS_IOLOCK_EXCL);
|
||||
return ret;
|
||||
}
|
||||
truncate_pagecache_range(VFS_I(ip), pos, -1);
|
||||
}
|
||||
xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL);
|
||||
}
|
||||
|
||||
trace_xfs_file_read(ip, size, iocb->ki_pos, ioflags);
|
||||
trace_xfs_file_read(ip, size, pos, ioflags);
|
||||
|
||||
ret = generic_file_aio_read(iocb, iovp, nr_segs, iocb->ki_pos);
|
||||
ret = generic_file_aio_read(iocb, iovp, nr_segs, pos);
|
||||
if (ret > 0)
|
||||
XFS_STATS_ADD(xs_read_bytes, ret);
|
||||
|
||||
@@ -670,10 +670,11 @@ xfs_file_dio_aio_write(
|
||||
goto out;
|
||||
|
||||
if (mapping->nrpages) {
|
||||
ret = -xfs_flushinval_pages(ip, (pos & PAGE_CACHE_MASK), -1,
|
||||
FI_REMAPF_LOCKED);
|
||||
ret = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
|
||||
pos, -1);
|
||||
if (ret)
|
||||
goto out;
|
||||
truncate_pagecache_range(VFS_I(ip), pos, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user