From: Shiyang Ruan <ruansy.fnst@fujitsu.com> To: <linux-kernel@vger.kernel.org>, <linux-xfs@vger.kernel.org>, <linux-nvdimm@lists.01.org>, <linux-fsdevel@vger.kernel.org> Cc: darrick.wong@oracle.com, willy@infradead.org, jack@suse.cz, viro@zeniv.linux.org.uk, linux-btrfs@vger.kernel.org, ocfs2-devel@oss.oracle.com, david@fromorbit.com, hch@lst.de, rgoldwyn@suse.de Subject: [PATCH v2 04/10] fsdax: Introduce dax_iomap_cow_copy() Date: Fri, 26 Feb 2021 08:20:24 +0800 [thread overview] Message-ID: <20210226002030.653855-5-ruansy.fnst@fujitsu.com> (raw) In-Reply-To: <20210226002030.653855-1-ruansy.fnst@fujitsu.com> In the case where the iomap is a write operation and iomap is not equal to srcmap after iomap_begin, we consider it is a CoW operation. The destance extent which iomap indicated is new allocated extent. So, it is needed to copy the data from srcmap to new allocated extent. In theory, it is better to copy the head and tail ranges which is outside of the non-aligned area instead of copying the whole aligned range. But in dax page fault, it will always be an aligned range. So, we have to copy the whole range in this case. Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> --- fs/dax.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 1459ef4095fb..748dfb89fb41 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1037,6 +1037,53 @@ static int dax_iomap_direct_access(struct iomap *iomap, loff_t pos, size_t size, return rc; } +/* + * Copy the head and tail part of the pages not included in the write but + * required for CoW, because pos/pos+length are not page aligned. But in dax + * page fault case, the range is page aligned, we need to copy the whole range + * of data. Use copy_edge to distinguish these cases. + */ +static int dax_iomap_cow_copy(loff_t pos, loff_t length, size_t align_size, + struct iomap *srcmap, void *daddr, bool copy_edge) +{ + loff_t head_off = pos & (align_size - 1); + size_t size = ALIGN(head_off + length, align_size); + loff_t end = pos + length; + loff_t pg_end = round_up(end, align_size); + void *saddr = 0; + int ret = 0; + + ret = dax_iomap_direct_access(srcmap, pos, size, &saddr, NULL); + if (ret) + return ret; + + if (!copy_edge) { + ret = copy_mc_to_kernel(daddr, saddr, length); + return ret; + } + + /* Copy the head part of the page. Note: we pass offset as length. */ + if (head_off) { + if (saddr) + ret = copy_mc_to_kernel(daddr, saddr, head_off); + else + memset(daddr, 0, head_off); + } + /* Copy the tail part of the range */ + if (end < pg_end) { + loff_t tail_off = head_off + length; + loff_t tail_len = pg_end - end; + + if (saddr) + ret = copy_mc_to_kernel(daddr + tail_off, + saddr + tail_off, tail_len); + else + memset(daddr + tail_off, 0, tail_len); + } + + return ret; +} + /* * The user has performed a load from a hole in the file. Allocating a new * page in the file would cause excessive storage usage for workloads with @@ -1106,11 +1153,12 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, struct dax_device *dax_dev = iomap->dax_dev; struct iov_iter *iter = data; loff_t end = pos + length, done = 0; + bool write = iov_iter_rw(iter) == WRITE; ssize_t ret = 0; size_t xfer; int id; - if (iov_iter_rw(iter) == READ) { + if (!write) { end = min(end, i_size_read(inode)); if (pos >= end) return 0; @@ -1119,7 +1167,8 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, return iov_iter_zero(min(length, end - pos), iter); } - if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED)) + if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED && + !(iomap->flags & IOMAP_F_SHARED))) return -EIO; /* @@ -1158,6 +1207,13 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, break; } + if (write && srcmap->addr != iomap->addr) { + ret = dax_iomap_cow_copy(pos, length, PAGE_SIZE, srcmap, + kaddr, true); + if (ret) + break; + } + map_len = PFN_PHYS(map_len); kaddr += offset; map_len -= offset; @@ -1169,7 +1225,7 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, * validated via access_ok() in either vfs_read() or * vfs_write(), depending on which operation we are doing. */ - if (iov_iter_rw(iter) == WRITE) + if (write) xfer = dax_copy_from_iter(dax_dev, pgoff, kaddr, map_len, iter); else @@ -1350,6 +1406,7 @@ static vm_fault_t dax_fault_actor(struct vm_fault *vmf, pfn_t *pfnp, vm_fault_t ret = 0; int err = 0; pfn_t pfn; + void *kaddr; /* if we are reading UNWRITTEN and HOLE, return a hole. */ if (!write && @@ -1360,18 +1417,24 @@ static vm_fault_t dax_fault_actor(struct vm_fault *vmf, pfn_t *pfnp, return dax_pmd_load_hole(xas, vmf, iomap, &entry); } - if (iomap->type != IOMAP_MAPPED) { + if (iomap->type != IOMAP_MAPPED && !(iomap->flags & IOMAP_F_SHARED)) { WARN_ON_ONCE(1); return VM_FAULT_SIGBUS; } - err = dax_iomap_direct_access(iomap, pos, size, NULL, &pfn); + err = dax_iomap_direct_access(iomap, pos, size, &kaddr, &pfn); if (err) goto error_fault; entry = dax_insert_entry(xas, mapping, vmf, entry, pfn, 0, write && !sync); + if (write && srcmap->addr != iomap->addr) { + err = dax_iomap_cow_copy(pos, size, size, srcmap, kaddr, false); + if (err) + goto error_fault; + } + if (sync) return dax_fault_synchronous_pfnp(pfnp, pfn); -- 2.30.1 _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: Shiyang Ruan <ruansy.fnst@fujitsu.com> To: <linux-kernel@vger.kernel.org>, <linux-xfs@vger.kernel.org>, <linux-nvdimm@lists.01.org>, <linux-fsdevel@vger.kernel.org> Cc: <darrick.wong@oracle.com>, <dan.j.williams@intel.com>, <willy@infradead.org>, <jack@suse.cz>, <viro@zeniv.linux.org.uk>, <linux-btrfs@vger.kernel.org>, <ocfs2-devel@oss.oracle.com>, <david@fromorbit.com>, <hch@lst.de>, <rgoldwyn@suse.de> Subject: [PATCH v2 04/10] fsdax: Introduce dax_iomap_cow_copy() Date: Fri, 26 Feb 2021 08:20:24 +0800 [thread overview] Message-ID: <20210226002030.653855-5-ruansy.fnst@fujitsu.com> (raw) In-Reply-To: <20210226002030.653855-1-ruansy.fnst@fujitsu.com> In the case where the iomap is a write operation and iomap is not equal to srcmap after iomap_begin, we consider it is a CoW operation. The destance extent which iomap indicated is new allocated extent. So, it is needed to copy the data from srcmap to new allocated extent. In theory, it is better to copy the head and tail ranges which is outside of the non-aligned area instead of copying the whole aligned range. But in dax page fault, it will always be an aligned range. So, we have to copy the whole range in this case. Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> --- fs/dax.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 1459ef4095fb..748dfb89fb41 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1037,6 +1037,53 @@ static int dax_iomap_direct_access(struct iomap *iomap, loff_t pos, size_t size, return rc; } +/* + * Copy the head and tail part of the pages not included in the write but + * required for CoW, because pos/pos+length are not page aligned. But in dax + * page fault case, the range is page aligned, we need to copy the whole range + * of data. Use copy_edge to distinguish these cases. + */ +static int dax_iomap_cow_copy(loff_t pos, loff_t length, size_t align_size, + struct iomap *srcmap, void *daddr, bool copy_edge) +{ + loff_t head_off = pos & (align_size - 1); + size_t size = ALIGN(head_off + length, align_size); + loff_t end = pos + length; + loff_t pg_end = round_up(end, align_size); + void *saddr = 0; + int ret = 0; + + ret = dax_iomap_direct_access(srcmap, pos, size, &saddr, NULL); + if (ret) + return ret; + + if (!copy_edge) { + ret = copy_mc_to_kernel(daddr, saddr, length); + return ret; + } + + /* Copy the head part of the page. Note: we pass offset as length. */ + if (head_off) { + if (saddr) + ret = copy_mc_to_kernel(daddr, saddr, head_off); + else + memset(daddr, 0, head_off); + } + /* Copy the tail part of the range */ + if (end < pg_end) { + loff_t tail_off = head_off + length; + loff_t tail_len = pg_end - end; + + if (saddr) + ret = copy_mc_to_kernel(daddr + tail_off, + saddr + tail_off, tail_len); + else + memset(daddr + tail_off, 0, tail_len); + } + + return ret; +} + /* * The user has performed a load from a hole in the file. Allocating a new * page in the file would cause excessive storage usage for workloads with @@ -1106,11 +1153,12 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, struct dax_device *dax_dev = iomap->dax_dev; struct iov_iter *iter = data; loff_t end = pos + length, done = 0; + bool write = iov_iter_rw(iter) == WRITE; ssize_t ret = 0; size_t xfer; int id; - if (iov_iter_rw(iter) == READ) { + if (!write) { end = min(end, i_size_read(inode)); if (pos >= end) return 0; @@ -1119,7 +1167,8 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, return iov_iter_zero(min(length, end - pos), iter); } - if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED)) + if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED && + !(iomap->flags & IOMAP_F_SHARED))) return -EIO; /* @@ -1158,6 +1207,13 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, break; } + if (write && srcmap->addr != iomap->addr) { + ret = dax_iomap_cow_copy(pos, length, PAGE_SIZE, srcmap, + kaddr, true); + if (ret) + break; + } + map_len = PFN_PHYS(map_len); kaddr += offset; map_len -= offset; @@ -1169,7 +1225,7 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, * validated via access_ok() in either vfs_read() or * vfs_write(), depending on which operation we are doing. */ - if (iov_iter_rw(iter) == WRITE) + if (write) xfer = dax_copy_from_iter(dax_dev, pgoff, kaddr, map_len, iter); else @@ -1350,6 +1406,7 @@ static vm_fault_t dax_fault_actor(struct vm_fault *vmf, pfn_t *pfnp, vm_fault_t ret = 0; int err = 0; pfn_t pfn; + void *kaddr; /* if we are reading UNWRITTEN and HOLE, return a hole. */ if (!write && @@ -1360,18 +1417,24 @@ static vm_fault_t dax_fault_actor(struct vm_fault *vmf, pfn_t *pfnp, return dax_pmd_load_hole(xas, vmf, iomap, &entry); } - if (iomap->type != IOMAP_MAPPED) { + if (iomap->type != IOMAP_MAPPED && !(iomap->flags & IOMAP_F_SHARED)) { WARN_ON_ONCE(1); return VM_FAULT_SIGBUS; } - err = dax_iomap_direct_access(iomap, pos, size, NULL, &pfn); + err = dax_iomap_direct_access(iomap, pos, size, &kaddr, &pfn); if (err) goto error_fault; entry = dax_insert_entry(xas, mapping, vmf, entry, pfn, 0, write && !sync); + if (write && srcmap->addr != iomap->addr) { + err = dax_iomap_cow_copy(pos, size, size, srcmap, kaddr, false); + if (err) + goto error_fault; + } + if (sync) return dax_fault_synchronous_pfnp(pfnp, pfn); -- 2.30.1
next prev parent reply other threads:[~2021-02-26 0:21 UTC|newest] Thread overview: 220+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-26 0:20 [PATCH v2 00/10] fsdax,xfs: Add reflink&dedupe support for fsdax Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Shiyang Ruan 2021-02-26 0:20 ` [PATCH v2 00/10] fsdax,xfs: " Shiyang Ruan 2021-02-26 0:20 ` [PATCH v2 01/10] fsdax: Factor helpers to simplify dax fault code Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-03-03 9:13 ` Christoph Hellwig 2021-03-03 9:13 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:13 ` Christoph Hellwig 2021-02-26 0:20 ` [PATCH v2 02/10] fsdax: Factor helper: dax_fault_actor() Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-03-03 9:28 ` Christoph Hellwig 2021-03-03 9:28 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:28 ` Christoph Hellwig 2021-03-12 9:01 ` ruansy.fnst 2021-03-12 9:01 ` [Ocfs2-devel] " ruansy.fnst 2021-03-12 9:01 ` ruansy.fnst 2021-02-26 0:20 ` [PATCH v2 03/10] fsdax: Output address in dax_iomap_pfn() and rename it Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan [this message] 2021-02-26 0:20 ` [PATCH v2 04/10] fsdax: Introduce dax_iomap_cow_copy() Shiyang Ruan 2021-03-03 9:29 ` Christoph Hellwig 2021-03-03 9:29 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:29 ` Christoph Hellwig 2021-02-26 0:20 ` [PATCH v2 05/10] fsdax: Replace mmap entry in case of CoW Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-03-03 9:30 ` Christoph Hellwig 2021-03-03 9:30 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:30 ` Christoph Hellwig 2021-03-03 9:41 ` ruansy.fnst 2021-03-03 9:41 ` [Ocfs2-devel] " ruansy.fnst 2021-03-03 9:41 ` ruansy.fnst 2021-03-03 9:44 ` Christoph Hellwig 2021-03-03 9:44 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:44 ` Christoph Hellwig 2021-03-03 9:48 ` Christoph Hellwig 2021-03-03 9:48 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:48 ` Christoph Hellwig 2021-02-26 0:20 ` [PATCH v2 06/10] fsdax: Add dax_iomap_cow_copy() for dax_iomap_zero Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-03-03 9:31 ` Christoph Hellwig 2021-03-03 9:31 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:31 ` Christoph Hellwig 2021-02-26 0:20 ` [PATCH v2 07/10] iomap: Introduce iomap_apply2() for operations on two files Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-02-26 4:14 ` Darrick J. Wong 2021-02-26 4:14 ` [Ocfs2-devel] " Darrick J. Wong 2021-02-26 4:14 ` Darrick J. Wong 2021-02-26 8:11 ` ruansy.fnst 2021-02-26 8:11 ` [Ocfs2-devel] " ruansy.fnst 2021-02-26 8:11 ` ruansy.fnst 2021-02-26 8:25 ` Shiyang Ruan 2021-02-26 8:25 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 8:25 ` Shiyang Ruan 2021-03-04 5:41 ` [RESEND PATCH v2.1 " Shiyang Ruan 2021-03-04 5:41 ` [Ocfs2-devel] " Shiyang Ruan 2021-03-04 5:41 ` Shiyang Ruan 2021-03-11 12:30 ` Christoph Hellwig 2021-03-11 12:30 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-11 12:30 ` Christoph Hellwig 2021-02-26 0:20 ` [PATCH v2 08/10] fsdax: Dedup file range to use a compare function Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-02-26 8:28 ` Shiyang Ruan 2021-02-26 8:28 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 8:28 ` Shiyang Ruan 2021-03-03 8:20 ` Joe Perches 2021-03-03 8:20 ` [Ocfs2-devel] " Joe Perches 2021-03-03 8:20 ` Joe Perches 2021-03-03 8:45 ` ruansy.fnst 2021-03-03 8:45 ` [Ocfs2-devel] " ruansy.fnst 2021-03-03 9:04 ` Joe Perches 2021-03-03 9:04 ` [Ocfs2-devel] " Joe Perches 2021-03-03 9:39 ` hch 2021-03-03 9:39 ` [Ocfs2-devel] " hch 2021-03-03 9:46 ` ruansy.fnst 2021-03-03 9:46 ` [Ocfs2-devel] " ruansy.fnst 2021-03-04 5:42 ` [RESEND PATCH v2.1 " Shiyang Ruan 2021-03-04 5:42 ` [Ocfs2-devel] " Shiyang Ruan 2021-03-04 5:42 ` Shiyang Ruan 2021-02-26 0:20 ` [PATCH v2 09/10] fs/xfs: Handle CoW for fsdax write() path Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-03-03 9:43 ` Christoph Hellwig 2021-03-03 9:43 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 9:43 ` Christoph Hellwig 2021-03-03 9:57 ` ruansy.fnst 2021-03-03 9:57 ` [Ocfs2-devel] " ruansy.fnst 2021-03-03 9:57 ` ruansy.fnst 2021-03-03 10:43 ` Christoph Hellwig 2021-03-03 10:43 ` [Ocfs2-devel] " Christoph Hellwig 2021-03-03 10:43 ` Christoph Hellwig 2021-03-04 1:35 ` ruansy.fnst 2021-03-04 1:35 ` [Ocfs2-devel] " ruansy.fnst 2021-03-04 1:35 ` ruansy.fnst 2021-02-26 0:20 ` [PATCH v2 10/10] fs/xfs: Add dedupe support for fsdax Shiyang Ruan 2021-02-26 0:20 ` [Ocfs2-devel] " Shiyang Ruan 2021-02-26 0:20 ` Shiyang Ruan 2021-02-26 9:45 ` Question about the "EXPERIMENTAL" tag for dax in XFS ruansy.fnst 2021-02-26 9:45 ` [Ocfs2-devel] " ruansy.fnst 2021-02-26 9:45 ` ruansy.fnst 2021-02-26 19:04 ` Darrick J. Wong 2021-02-26 19:04 ` [Ocfs2-devel] " Darrick J. Wong 2021-02-26 19:04 ` Darrick J. Wong 2021-02-26 19:24 ` Dan Williams 2021-02-26 19:24 ` [Ocfs2-devel] " Dan Williams 2021-02-26 19:24 ` Dan Williams 2021-02-26 20:51 ` Dave Chinner 2021-02-26 20:51 ` [Ocfs2-devel] " Dave Chinner 2021-02-26 20:51 ` Dave Chinner 2021-02-26 20:59 ` Dan Williams 2021-02-26 20:59 ` [Ocfs2-devel] " Dan Williams 2021-02-26 20:59 ` Dan Williams 2021-02-26 21:27 ` Dave Chinner 2021-02-26 21:27 ` [Ocfs2-devel] " Dave Chinner 2021-02-26 21:27 ` Dave Chinner 2021-02-26 22:41 ` Dan Williams 2021-02-26 22:41 ` [Ocfs2-devel] " Dan Williams 2021-02-26 22:41 ` Dan Williams 2021-02-27 22:36 ` Dave Chinner 2021-02-27 22:36 ` [Ocfs2-devel] " Dave Chinner 2021-02-27 22:36 ` Dave Chinner 2021-02-27 23:40 ` Dan Williams 2021-02-27 23:40 ` [Ocfs2-devel] " Dan Williams 2021-02-27 23:40 ` Dan Williams 2021-02-28 22:38 ` Dave Chinner 2021-02-28 22:38 ` [Ocfs2-devel] " Dave Chinner 2021-02-28 22:38 ` Dave Chinner 2021-03-01 20:55 ` Dan Williams 2021-03-01 20:55 ` [Ocfs2-devel] " Dan Williams 2021-03-01 20:55 ` Dan Williams 2021-03-01 22:46 ` Dave Chinner 2021-03-01 22:46 ` [Ocfs2-devel] " Dave Chinner 2021-03-01 22:46 ` Dave Chinner 2021-03-02 0:32 ` Dan Williams 2021-03-02 0:32 ` [Ocfs2-devel] " Dan Williams 2021-03-02 0:32 ` Dan Williams 2021-03-02 2:42 ` Dave Chinner 2021-03-02 2:42 ` [Ocfs2-devel] " Dave Chinner 2021-03-02 2:42 ` Dave Chinner 2021-03-02 3:33 ` Dan Williams 2021-03-02 3:33 ` [Ocfs2-devel] " Dan Williams 2021-03-02 3:33 ` Dan Williams 2021-03-02 5:38 ` Dave Chinner 2021-03-02 5:38 ` [Ocfs2-devel] " Dave Chinner 2021-03-02 5:38 ` Dave Chinner 2021-03-02 5:50 ` Dan Williams 2021-03-02 5:50 ` [Ocfs2-devel] " Dan Williams 2021-03-02 5:50 ` Dan Williams 2021-03-02 3:28 ` Darrick J. Wong 2021-03-02 3:28 ` [Ocfs2-devel] " Darrick J. Wong 2021-03-02 3:28 ` Darrick J. Wong 2021-03-02 5:41 ` Dan Williams 2021-03-02 5:41 ` [Ocfs2-devel] " Dan Williams 2021-03-02 5:41 ` Dan Williams 2021-03-02 7:57 ` Dave Chinner 2021-03-02 7:57 ` [Ocfs2-devel] " Dave Chinner 2021-03-02 7:57 ` Dave Chinner 2021-03-02 17:49 ` Dan Williams 2021-03-02 17:49 ` [Ocfs2-devel] " Dan Williams 2021-03-02 17:49 ` Dan Williams 2021-03-04 23:40 ` Darrick J. Wong 2021-03-04 23:40 ` [Ocfs2-devel] " Darrick J. Wong 2021-03-04 23:40 ` Darrick J. Wong 2021-03-01 7:26 ` Yasunori Goto 2021-03-01 7:26 ` [Ocfs2-devel] " Yasunori Goto 2021-03-01 7:26 ` Yasunori Goto 2021-03-01 21:34 ` Dan Williams 2021-03-01 21:34 ` [Ocfs2-devel] " Dan Williams 2021-03-01 21:34 ` Dan Williams 2021-03-09 6:36 ` [PATCH v2 00/10] fsdax,xfs: Add reflink&dedupe support for fsdax Xiaoguang Wang 2021-03-09 6:36 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Xiaoguang Wang 2021-03-09 6:36 ` [PATCH v2 00/10] fsdax,xfs: " Xiaoguang Wang 2021-03-10 1:32 ` ruansy.fnst 2021-03-10 1:32 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " ruansy.fnst 2021-03-09 16:19 ` [PATCH v2 00/10] fsdax,xfs: " Goldwyn Rodrigues 2021-03-09 16:19 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Goldwyn Rodrigues 2021-03-09 16:19 ` [PATCH v2 00/10] fsdax,xfs: " Goldwyn Rodrigues 2021-03-10 1:26 ` ruansy.fnst 2021-03-10 1:26 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " ruansy.fnst 2021-03-10 1:26 ` [PATCH v2 00/10] fsdax,xfs: " ruansy.fnst 2021-03-10 12:30 ` Neal Gompa 2021-03-10 12:30 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Neal Gompa 2021-03-10 12:30 ` [PATCH v2 00/10] fsdax,xfs: " Neal Gompa 2021-03-10 13:02 ` Matthew Wilcox 2021-03-10 13:02 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Matthew Wilcox 2021-03-10 13:02 ` [PATCH v2 00/10] fsdax,xfs: " Matthew Wilcox 2021-03-10 13:36 ` Neal Gompa 2021-03-10 13:36 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Neal Gompa 2021-03-10 13:36 ` [PATCH v2 00/10] fsdax,xfs: " Neal Gompa 2021-03-10 13:55 ` Matthew Wilcox 2021-03-10 13:55 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Matthew Wilcox 2021-03-10 13:55 ` [PATCH v2 00/10] fsdax,xfs: " Matthew Wilcox 2021-03-10 14:21 ` Goldwyn Rodrigues 2021-03-10 14:21 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Goldwyn Rodrigues 2021-03-10 14:21 ` [PATCH v2 00/10] fsdax,xfs: " Goldwyn Rodrigues 2021-03-10 14:26 ` Matthew Wilcox 2021-03-10 14:26 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Matthew Wilcox 2021-03-10 14:26 ` [PATCH v2 00/10] fsdax,xfs: " Matthew Wilcox 2021-03-10 17:04 ` Goldwyn Rodrigues 2021-03-10 17:04 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Goldwyn Rodrigues 2021-03-10 17:04 ` [PATCH v2 00/10] fsdax,xfs: " Goldwyn Rodrigues 2021-03-11 0:53 ` Dan Williams 2021-03-11 0:53 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Dan Williams 2021-03-11 0:53 ` [PATCH v2 00/10] fsdax,xfs: " Dan Williams 2021-03-11 8:26 ` Neal Gompa 2021-03-11 8:26 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Neal Gompa 2021-03-11 8:26 ` [PATCH v2 00/10] fsdax,xfs: " Neal Gompa 2021-03-13 13:07 ` Adam Borowski 2021-03-13 13:07 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Adam Borowski 2021-03-13 13:07 ` [PATCH v2 00/10] fsdax,xfs: " Adam Borowski 2021-03-13 16:24 ` Neal Gompa 2021-03-13 16:24 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Neal Gompa 2021-03-13 16:24 ` [PATCH v2 00/10] fsdax,xfs: " Neal Gompa 2021-03-13 22:00 ` Adam Borowski 2021-03-13 22:00 ` [Ocfs2-devel] [PATCH v2 00/10] fsdax, xfs: " Adam Borowski 2021-03-13 22:00 ` [PATCH v2 00/10] fsdax,xfs: " Adam Borowski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210226002030.653855-5-ruansy.fnst@fujitsu.com \ --to=ruansy.fnst@fujitsu.com \ --cc=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=hch@lst.de \ --cc=jack@suse.cz \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-xfs@vger.kernel.org \ --cc=ocfs2-devel@oss.oracle.com \ --cc=rgoldwyn@suse.de \ --cc=viro@zeniv.linux.org.uk \ --cc=willy@infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.