| To: | xfs@xxxxxxxxxxx |
|---|---|
| Subject: | [PATCH 4/7] xfs: use ranged writeback and invalidation for direct IO |
| From: | Dave Chinner <david@xxxxxxxxxxxxx> |
| Date: | Thu, 28 Aug 2014 21:49:08 +1000 |
| Delivered-to: | xfs@xxxxxxxxxxx |
| In-reply-to: | <1409226551-16570-1-git-send-email-david@xxxxxxxxxxxxx> |
| References: | <1409226551-16570-1-git-send-email-david@xxxxxxxxxxxxx> |
From: Dave Chinner <dchinner@xxxxxxxxxx>
Now we are not doing silly things with dirtying buffers beyond EOF
and using invalidation correctly, we can finally reduce the ranges of
writeback and invalidation used by direct IO to match that of the IO
being issued.
Bring the writeback and invalidation ranges back to match the
generic direct IO code - this will greatly reduce the perturbation
of cached data when direct IO and buffered IO are mixed, but still
provide the same buffered vs direct IO coherency behaviour we
currently have.
Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
---
fs/xfs/xfs_file.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 19917fa..de5368c 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -291,7 +291,7 @@ xfs_file_read_iter(
if (inode->i_mapping->nrpages) {
ret = filemap_write_and_wait_range(
VFS_I(ip)->i_mapping,
- pos, -1);
+ pos, pos + size - 1);
if (ret) {
xfs_rw_iunlock(ip, XFS_IOLOCK_EXCL);
return ret;
@@ -303,7 +303,8 @@ xfs_file_read_iter(
* happen on XFS. Warn if it does fail.
*/
ret =
invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
- pos >> PAGE_CACHE_SHIFT, -1);
+ pos >> PAGE_CACHE_SHIFT,
+ (pos + size - 1) >> PAGE_CACHE_SHIFT);
WARN_ON_ONCE(ret);
ret = 0;
}
@@ -641,7 +642,7 @@ xfs_file_dio_aio_write(
if (mapping->nrpages) {
ret = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
- pos, -1);
+ pos, pos + count - 1);
if (ret)
goto out;
/*
@@ -650,7 +651,8 @@ xfs_file_dio_aio_write(
* happen on XFS. Warn if it does fail.
*/
ret = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
- pos >> PAGE_CACHE_SHIFT, -1);
+ pos >> PAGE_CACHE_SHIFT,
+ (pos + count - 1) >> PAGE_CACHE_SHIFT);
WARN_ON_ONCE(ret);
ret = 0;
}
--
2.0.0
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [PATCH v2 0/7] xfs: invalidation and related fixes for v3.17-rc3, Dave Chinner |
|---|---|
| Next by Date: | [PATCH 5/7] xfs: don't log inode unless extent shift makes extent modifications, Dave Chinner |
| Previous by Thread: | [PATCH v2 0/7] xfs: invalidation and related fixes for v3.17-rc3, Dave Chinner |
| Next by Thread: | Re: [PATCH 4/7] xfs: use ranged writeback and invalidation for direct IO, Christoph Hellwig |
| Indexes: | [Date] [Thread] [Top] [All Lists] |