linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Btrfs: truncate pages from clone ioctl target range
@ 2011-08-10 18:04 Sage Weil
  0 siblings, 0 replies; 3+ messages in thread
From: Sage Weil @ 2011-08-10 18:04 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Sage Weil

We need to truncate page cache pages for the clone ioctl target range or
else we'll confuse ourselves to no end.  If the old data was cached, we
used to still see it (until remount).  If the page was partially updated
we used to get a mix of old and new data.

Signed-off-by: Sage Weil <sage@newdream.net>
---
v1->v2: use ALIGN macro

 fs/btrfs/ioctl.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 514c0eb..5acb8e1 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2243,6 +2243,10 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
 		btrfs_wait_ordered_range(src, off, len);
 	}
 
+	/* truncate page cache pages from target inode range */
+	truncate_inode_pages_range(&inode->i_data, off,
+				   ALIGN(off + len, PAGE_CACHE_SIZE) - 1);
+
 	/* clone data */
 	key.objectid = btrfs_ino(src);
 	key.type = BTRFS_EXTENT_DATA_KEY;
-- 
1.7.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [PATCH] Btrfs: truncate pages from clone ioctl target range
@ 2011-08-09 19:00 Sage Weil
  2011-08-09 20:12 ` David Sterba
  0 siblings, 1 reply; 3+ messages in thread
From: Sage Weil @ 2011-08-09 19:00 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Sage Weil

We need to truncate page cache pages for the clone ioctl target range or
else we'll confuse ourselves to no end.  If the old data was cached, we'll
still see it (until remount).  If it was dirty we'll get a mix of old and
new data if the page(s) are partially updated.

Signed-off-by: Sage Weil <sage@newdream.net>
---
 fs/btrfs/ioctl.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index a3c4751..cac9491 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2243,6 +2243,10 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
 		btrfs_wait_ordered_range(src, off, len);
 	}
 
+	/* truncate page cache pages from target inode range */
+	truncate_inode_pages_range(&inode->i_data, off,
+			      ((off+len+PAGE_CACHE_SIZE-1)&PAGE_CACHE_MASK)-1);
+
 	/* clone data */
 	key.objectid = btrfs_ino(src);
 	key.type = BTRFS_EXTENT_DATA_KEY;
-- 
1.7.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-08-10 18:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-10 18:04 [PATCH] Btrfs: truncate pages from clone ioctl target range Sage Weil
  -- strict thread matches above, loose matches on Subject: below --
2011-08-09 19:00 Sage Weil
2011-08-09 20:12 ` David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).