All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fsdax: unshare: zero destination if srcmap is HOLE or UNWRITTEN
@ 2023-03-22 11:11 Shiyang Ruan
  2023-03-22 23:03 ` Andrew Morton
  0 siblings, 1 reply; 11+ messages in thread
From: Shiyang Ruan @ 2023-03-22 11:11 UTC (permalink / raw)
  To: linux-fsdevel, nvdimm; +Cc: dan.j.williams, willy, jack, akpm, djwong

unshare copies data from source to destination. But if the source is
HOLE or UNWRITTEN extents, we should zero the destination, otherwise the
result will be unexpectable.

Fixes: d984648e428b ("fsdax,xfs: port unshare to fsdax")
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
---
 fs/dax.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/fs/dax.c b/fs/dax.c
index 9800b93ee14d..5d2e9b10030e 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1258,15 +1258,20 @@ static s64 dax_unshare_iter(struct iomap_iter *iter)
 	/* don't bother with blocks that are not shared to start with */
 	if (!(iomap->flags & IOMAP_F_SHARED))
 		return length;
-	/* don't bother with holes or unwritten extents */
-	if (srcmap->type == IOMAP_HOLE || srcmap->type == IOMAP_UNWRITTEN)
-		return length;
 
 	id = dax_read_lock();
 	ret = dax_iomap_direct_access(iomap, pos, length, &daddr, NULL);
 	if (ret < 0)
 		goto out_unlock;
 
+	/* zero the distance if srcmap is HOLE or UNWRITTEN */
+	if (srcmap->flags & IOMAP_F_SHARED || srcmap->type == IOMAP_UNWRITTEN) {
+		memset(daddr, 0, length);
+		dax_flush(iomap->dax_dev, daddr, length);
+		ret = length;
+		goto out_unlock;
+	}
+
 	ret = dax_iomap_direct_access(srcmap, pos, length, &saddr, NULL);
 	if (ret < 0)
 		goto out_unlock;
-- 
2.39.2


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

end of thread, other threads:[~2023-03-24 20:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-22 11:11 [PATCH] fsdax: unshare: zero destination if srcmap is HOLE or UNWRITTEN Shiyang Ruan
2023-03-22 23:03 ` Andrew Morton
2023-03-23  6:50   ` Shiyang Ruan
2023-03-23 14:59     ` Darrick J. Wong
2023-03-23 22:11     ` Andrew Morton
2023-03-24  1:50       ` Shiyang Ruan
2023-03-24  3:33         ` Matthew Wilcox
2023-03-24  3:42           ` Shiyang Ruan
2023-03-24  4:17             ` Matthew Wilcox
2023-03-24  4:28               ` Shiyang Ruan
2023-03-24 20:44                 ` Andrew Morton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.