[PATCH RFC] xfs: use invalidate_inode_pages2_range for DIO writes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



xfs is using truncate_pagecache_range to invalidate the page cache
during DIO writes.  The other filesystems are calling
invalidate_inode_pages2_range
 
truncate_pagecache_range is meant to be used when we are freeing the
underlying data structs from disk, so it will zero any partial ranges
in the page.  This means a DIO write can zero out part of the page cache
page, and it is possible the page will stay in cache.

This one is an RFC because it is untested and because I don't understand
how XFS is dealing with pages the truncate was unable to clear away.
I'm not able to actually trigger zeros by mixing DIO writes with
buffered reads.

Signed-off-by: Chris Mason <clm@xxxxxx>

diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 8d25d98..c30c112 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -638,7 +638,10 @@ xfs_file_dio_aio_write(
 						    pos, -1);
 		if (ret)
 			goto out;
-		truncate_pagecache_range(VFS_I(ip), pos, -1);
+
+		/* what do we do if we can't invalidate the pages? */
+		invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
+					      pos >> PAGE_CACHE_SHIFT, -1);
 	}
 
 	/*

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux