* [PATCH 0/2] xfs: dedupe realtime rmap btree code
@ 2026-09-18 18:01 Eric Sandeen
2026-09-18 18:01 ` [PATCH 1/2] xfs: export several rmap btree key/record ops Eric Sandeen
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Eric Sandeen @ 2026-09-18 18:01 UTC (permalink / raw)
To: linux-xfs; +Cc: cem
xfs_rmap_btree.c and xfs_rtrmap_btree.c have a large amount of
duplicated code, differing only in function names which add "rt"
in the latter case. This can all be shared to reduce the cut & paste.
Tested with an auto xfstests run as well as the rmap group with
rtdev & rmap enabled.
xfs_rmap_btree.c | 16 +--
xfs_rmap_btree.h | 26 ++++++
xfs_rtrmap_btree.c | 230 +++------------------------------------------------
3 files changed, 51 insertions(+), 221 deletions(-)
[root@fedora-rawhide xfstests-dev]# ./check -g rmap
FSTYP -- xfs (non-debug)
PLATFORM -- Linux/x86_64 fedora-rawhide 7.3.0-rc3+ #330 SMP
PREEMPT_DYNAMIC Fri Sep 18 10:23:43 CDT 2026
MKFS_OPTIONS -- -f -rrtdev=/dev/loop0 -m rmapbt=1,reflink=1 /dev/vdb2
MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0
-ortdev=/dev/loop0 /dev/vdb2 /mnt/scratch
generic/365 2s ... 2s
xfs/114 3s ... 2s
xfs/233 1s ... 1s
xfs/234 5s ... 5s
xfs/235 1s ... 1s
xfs/236 6s ... 6s
xfs/271 2s ... 2s
xfs/272 2s ... 2s
xfs/273 4s ... 5s
xfs/274 3s ... 3s
xfs/275 [not run] This test requires a valid $SCRATCH_LOGDEV
xfs/276 3s ... 3s
xfs/277 2s ... 2s
xfs/310 0s ... 1s
xfs/317 [not run] XFS error injection requires
CONFIG_XFS_DEBUG
xfs/331 2s ... 2s
xfs/332 1s ... 1s
xfs/334 1s ... 1s
xfs/335 4s ... 3s
xfs/336 5s ... 5s
xfs/337 5s ... 5s
xfs/338 2s ... 2s
xfs/339 2s ... 2s
xfs/340 2s ... 2s
xfs/341 1s ... 1s
xfs/342 2s ... 2s
xfs/343 2s ... 2s
xfs/450 1s ... 2s
Ran: generic/365 xfs/114 xfs/233 xfs/234 xfs/235 xfs/236 xfs/271 xfs/272
xfs/273 xfs/274 xfs/275 xfs/276 xfs/277 xfs/310 xfs/317 xfs/331 xfs/332
xfs/334 xfs/335 xfs/336 xfs/337 xfs/338 xfs/339 xfs/340 xfs/341 xfs/342
xfs/343 xfs/450
Not run: xfs/275 xfs/317
Passed all 28 tests
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] xfs: export several rmap btree key/record ops
2026-09-18 18:01 [PATCH 0/2] xfs: dedupe realtime rmap btree code Eric Sandeen
@ 2026-09-18 18:01 ` Eric Sandeen
2026-09-18 18:01 ` [PATCH 2/2] xfs: use the shared rmap btree ops for the rt rmap btree Eric Sandeen
2026-09-21 3:40 ` [PATCH 0/2] xfs: dedupe realtime rmap btree code Darrick J. Wong
2 siblings, 0 replies; 7+ messages in thread
From: Eric Sandeen @ 2026-09-18 18:01 UTC (permalink / raw)
To: linux-xfs; +Cc: cem, Eric Sandeen
The AG rmap btree and the realtime rmap btree have several identical
btree key and record ops.
Export the AG variants of these ops so that they can be shared with the
realtime code in the next patch, to eliminate this copied code.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
fs/xfs/libxfs/xfs_rmap_btree.c | 16 ++++++++--------
fs/xfs/libxfs/xfs_rmap_btree.h | 26 ++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c
index 10b3272238eb..5b283a5ddd13 100644
--- a/fs/xfs/libxfs/xfs_rmap_btree.c
+++ b/fs/xfs/libxfs/xfs_rmap_btree.c
@@ -170,7 +170,7 @@ static inline __be64 ondisk_rec_offset_to_key(const union xfs_btree_rec *rec)
return rec->rmap.rm_offset & ~cpu_to_be64(XFS_RMAP_OFF_UNWRITTEN);
}
-STATIC void
+void
xfs_rmapbt_init_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -187,7 +187,7 @@ xfs_rmapbt_init_key_from_rec(
* the startblock for all records, and if the record is for a data/attr
* fork mapping, we add blockcount-1 to the offset too.
*/
-STATIC void
+void
xfs_rmapbt_init_high_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -209,7 +209,7 @@ xfs_rmapbt_init_high_key_from_rec(
key->rmap.rm_offset = cpu_to_be64(off);
}
-STATIC void
+void
xfs_rmapbt_init_rec_from_cur(
struct xfs_btree_cur *cur,
union xfs_btree_rec *rec)
@@ -243,7 +243,7 @@ static inline uint64_t offset_keymask(uint64_t offset)
return offset & ~XFS_RMAP_OFF_UNWRITTEN;
}
-STATIC int
+int
xfs_rmapbt_cmp_key_with_cur(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key)
@@ -257,7 +257,7 @@ xfs_rmapbt_cmp_key_with_cur(
offset_keymask(xfs_rmap_irec_offset_pack(rec)));
}
-STATIC int
+int
xfs_rmapbt_cmp_two_keys(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -390,7 +390,7 @@ const struct xfs_buf_ops xfs_rmapbt_buf_ops = {
.verify_struct = xfs_rmapbt_verify,
};
-STATIC int
+int
xfs_rmapbt_keys_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -420,7 +420,7 @@ xfs_rmapbt_keys_inorder(
return 0;
}
-STATIC int
+int
xfs_rmapbt_recs_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_rec *r1,
@@ -450,7 +450,7 @@ xfs_rmapbt_recs_inorder(
return 0;
}
-STATIC enum xbtree_key_contig
+enum xbtree_key_contig
xfs_rmapbt_keys_contiguous(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key1,
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.h b/fs/xfs/libxfs/xfs_rmap_btree.h
index 119b1567cd0e..82b1a7fd8513 100644
--- a/fs/xfs/libxfs/xfs_rmap_btree.h
+++ b/fs/xfs/libxfs/xfs_rmap_btree.h
@@ -11,6 +11,8 @@ struct xfs_btree_cur;
struct xfs_mount;
struct xbtree_afakeroot;
struct xfbtree;
+union xfs_btree_key;
+union xfs_btree_rec;
/* rmaps only exist on crc enabled filesystems */
#define XFS_RMAP_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN
@@ -69,4 +71,28 @@ struct xfs_btree_cur *xfs_rmapbt_mem_cursor(struct xfs_perag *pag,
int xfs_rmapbt_mem_init(struct xfs_mount *mp, struct xfbtree *xfbtree,
struct xfs_buftarg *btp, xfs_agnumber_t agno);
+/*
+ * Key and record btree ops. The rmap on-disk key/record format is identical
+ * for the AG rmap btree and the realtime rmap btree, so these are shared by
+ * both (see xfs_rtrmap_btree.c).
+ */
+void xfs_rmapbt_init_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_rmapbt_init_high_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_rmapbt_init_rec_from_cur(struct xfs_btree_cur *cur,
+ union xfs_btree_rec *rec);
+int xfs_rmapbt_cmp_key_with_cur(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key);
+int xfs_rmapbt_cmp_two_keys(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2,
+ const union xfs_btree_key *mask);
+int xfs_rmapbt_keys_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2);
+int xfs_rmapbt_recs_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_rec *r1, const union xfs_btree_rec *r2);
+enum xbtree_key_contig xfs_rmapbt_keys_contiguous(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key1, const union xfs_btree_key *key2,
+ const union xfs_btree_key *mask);
+
#endif /* __XFS_RMAP_BTREE_H__ */
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] xfs: use the shared rmap btree ops for the rt rmap btree
2026-09-18 18:01 [PATCH 0/2] xfs: dedupe realtime rmap btree code Eric Sandeen
2026-09-18 18:01 ` [PATCH 1/2] xfs: export several rmap btree key/record ops Eric Sandeen
@ 2026-09-18 18:01 ` Eric Sandeen
2026-09-21 3:40 ` [PATCH 0/2] xfs: dedupe realtime rmap btree code Darrick J. Wong
2 siblings, 0 replies; 7+ messages in thread
From: Eric Sandeen @ 2026-09-18 18:01 UTC (permalink / raw)
To: linux-xfs; +Cc: cem, Eric Sandeen
Now that the (identical but for naming) AG variants of these ops are
exported, use them for realtime as well, to eliminate copied code.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
fs/xfs/libxfs/xfs_rtrmap_btree.c | 230 +++----------------------------
1 file changed, 17 insertions(+), 213 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_rtrmap_btree.c b/fs/xfs/libxfs/xfs_rtrmap_btree.c
index 5901d7efd3f6..2f00d0698ae1 100644
--- a/fs/xfs/libxfs/xfs_rtrmap_btree.c
+++ b/fs/xfs/libxfs/xfs_rtrmap_btree.c
@@ -20,6 +20,7 @@
#include "xfs_btree_staging.h"
#include "xfs_metafile.h"
#include "xfs_rmap.h"
+#include "xfs_rmap_btree.h"
#include "xfs_rtrmap_btree.h"
#include "xfs_trace.h"
#include "xfs_cksum.h"
@@ -113,60 +114,6 @@ xfs_rtrmapbt_get_dmaxrecs(
return xfs_rtrmapbt_droot_maxrecs(cur->bc_ino.forksize, level == 0);
}
-/*
- * Convert the ondisk record's offset field into the ondisk key's offset field.
- * Fork and bmbt are significant parts of the rmap record key, but written
- * status is merely a record attribute.
- */
-static inline __be64 ondisk_rec_offset_to_key(const union xfs_btree_rec *rec)
-{
- return rec->rmap.rm_offset & ~cpu_to_be64(XFS_RMAP_OFF_UNWRITTEN);
-}
-
-STATIC void
-xfs_rtrmapbt_init_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- key->rmap.rm_startblock = rec->rmap.rm_startblock;
- key->rmap.rm_owner = rec->rmap.rm_owner;
- key->rmap.rm_offset = ondisk_rec_offset_to_key(rec);
-}
-
-STATIC void
-xfs_rtrmapbt_init_high_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- uint64_t off;
- int adj;
-
- adj = be32_to_cpu(rec->rmap.rm_blockcount) - 1;
-
- key->rmap.rm_startblock = rec->rmap.rm_startblock;
- be32_add_cpu(&key->rmap.rm_startblock, adj);
- key->rmap.rm_owner = rec->rmap.rm_owner;
- key->rmap.rm_offset = ondisk_rec_offset_to_key(rec);
- if (XFS_RMAP_NON_INODE_OWNER(be64_to_cpu(rec->rmap.rm_owner)) ||
- XFS_RMAP_IS_BMBT_BLOCK(be64_to_cpu(rec->rmap.rm_offset)))
- return;
- off = be64_to_cpu(key->rmap.rm_offset);
- off = (XFS_RMAP_OFF(off) + adj) | (off & ~XFS_RMAP_OFF_MASK);
- key->rmap.rm_offset = cpu_to_be64(off);
-}
-
-STATIC void
-xfs_rtrmapbt_init_rec_from_cur(
- struct xfs_btree_cur *cur,
- union xfs_btree_rec *rec)
-{
- rec->rmap.rm_startblock = cpu_to_be32(cur->bc_rec.r.rm_startblock);
- rec->rmap.rm_blockcount = cpu_to_be32(cur->bc_rec.r.rm_blockcount);
- rec->rmap.rm_owner = cpu_to_be64(cur->bc_rec.r.rm_owner);
- rec->rmap.rm_offset = cpu_to_be64(
- xfs_rmap_irec_offset_pack(&cur->bc_rec.r));
-}
-
STATIC void
xfs_rtrmapbt_init_ptr_from_cur(
struct xfs_btree_cur *cur,
@@ -175,69 +122,6 @@ xfs_rtrmapbt_init_ptr_from_cur(
ptr->l = 0;
}
-/*
- * Mask the appropriate parts of the ondisk key field for a key comparison.
- * Fork and bmbt are significant parts of the rmap record key, but written
- * status is merely a record attribute.
- */
-static inline uint64_t offset_keymask(uint64_t offset)
-{
- return offset & ~XFS_RMAP_OFF_UNWRITTEN;
-}
-
-STATIC int
-xfs_rtrmapbt_cmp_key_with_cur(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key)
-{
- struct xfs_rmap_irec *rec = &cur->bc_rec.r;
- const struct xfs_rmap_key *kp = &key->rmap;
-
- return cmp_int(be32_to_cpu(kp->rm_startblock), rec->rm_startblock) ?:
- cmp_int(be64_to_cpu(kp->rm_owner), rec->rm_owner) ?:
- cmp_int(offset_keymask(be64_to_cpu(kp->rm_offset)),
- offset_keymask(xfs_rmap_irec_offset_pack(rec)));
-}
-
-STATIC int
-xfs_rtrmapbt_cmp_two_keys(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2,
- const union xfs_btree_key *mask)
-{
- const struct xfs_rmap_key *kp1 = &k1->rmap;
- const struct xfs_rmap_key *kp2 = &k2->rmap;
- int d;
-
- /* Doesn't make sense to mask off the physical space part */
- ASSERT(!mask || mask->rmap.rm_startblock);
-
- d = cmp_int(be32_to_cpu(kp1->rm_startblock),
- be32_to_cpu(kp2->rm_startblock));
- if (d)
- return d;
-
- if (!mask || mask->rmap.rm_owner) {
- d = cmp_int(be64_to_cpu(kp1->rm_owner),
- be64_to_cpu(kp2->rm_owner));
- if (d)
- return d;
- }
-
- if (!mask || mask->rmap.rm_offset) {
- /* Doesn't make sense to allow offset but not owner */
- ASSERT(!mask || mask->rmap.rm_owner);
-
- d = cmp_int(offset_keymask(be64_to_cpu(kp1->rm_offset)),
- offset_keymask(be64_to_cpu(kp2->rm_offset)));
- if (d)
- return d;
- }
-
- return 0;
-}
-
static xfs_failaddr_t
xfs_rtrmapbt_verify(
struct xfs_buf *bp)
@@ -304,86 +188,6 @@ const struct xfs_buf_ops xfs_rtrmapbt_buf_ops = {
.verify_struct = xfs_rtrmapbt_verify,
};
-STATIC int
-xfs_rtrmapbt_keys_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2)
-{
- uint32_t x;
- uint32_t y;
- uint64_t a;
- uint64_t b;
-
- x = be32_to_cpu(k1->rmap.rm_startblock);
- y = be32_to_cpu(k2->rmap.rm_startblock);
- if (x < y)
- return 1;
- else if (x > y)
- return 0;
- a = be64_to_cpu(k1->rmap.rm_owner);
- b = be64_to_cpu(k2->rmap.rm_owner);
- if (a < b)
- return 1;
- else if (a > b)
- return 0;
- a = offset_keymask(be64_to_cpu(k1->rmap.rm_offset));
- b = offset_keymask(be64_to_cpu(k2->rmap.rm_offset));
- if (a <= b)
- return 1;
- return 0;
-}
-
-STATIC int
-xfs_rtrmapbt_recs_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_rec *r1,
- const union xfs_btree_rec *r2)
-{
- uint32_t x;
- uint32_t y;
- uint64_t a;
- uint64_t b;
-
- x = be32_to_cpu(r1->rmap.rm_startblock);
- y = be32_to_cpu(r2->rmap.rm_startblock);
- if (x < y)
- return 1;
- else if (x > y)
- return 0;
- a = be64_to_cpu(r1->rmap.rm_owner);
- b = be64_to_cpu(r2->rmap.rm_owner);
- if (a < b)
- return 1;
- else if (a > b)
- return 0;
- a = offset_keymask(be64_to_cpu(r1->rmap.rm_offset));
- b = offset_keymask(be64_to_cpu(r2->rmap.rm_offset));
- if (a <= b)
- return 1;
- return 0;
-}
-
-STATIC enum xbtree_key_contig
-xfs_rtrmapbt_keys_contiguous(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key1,
- const union xfs_btree_key *key2,
- const union xfs_btree_key *mask)
-{
- ASSERT(!mask || mask->rmap.rm_startblock);
-
- /*
- * We only support checking contiguity of the physical space component.
- * If any callers ever need more specificity than that, they'll have to
- * implement it here.
- */
- ASSERT(!mask || (!mask->rmap.rm_owner && !mask->rmap.rm_offset));
-
- return xbtree_key_contig(be32_to_cpu(key1->rmap.rm_startblock),
- be32_to_cpu(key2->rmap.rm_startblock));
-}
-
static inline void
xfs_rtrmapbt_move_ptrs(
struct xfs_mount *mp,
@@ -486,16 +290,16 @@ const struct xfs_btree_ops xfs_rtrmapbt_ops = {
.get_minrecs = xfs_rtrmapbt_get_minrecs,
.get_maxrecs = xfs_rtrmapbt_get_maxrecs,
.get_dmaxrecs = xfs_rtrmapbt_get_dmaxrecs,
- .init_key_from_rec = xfs_rtrmapbt_init_key_from_rec,
- .init_high_key_from_rec = xfs_rtrmapbt_init_high_key_from_rec,
- .init_rec_from_cur = xfs_rtrmapbt_init_rec_from_cur,
+ .init_key_from_rec = xfs_rmapbt_init_key_from_rec,
+ .init_high_key_from_rec = xfs_rmapbt_init_high_key_from_rec,
+ .init_rec_from_cur = xfs_rmapbt_init_rec_from_cur,
.init_ptr_from_cur = xfs_rtrmapbt_init_ptr_from_cur,
- .cmp_key_with_cur = xfs_rtrmapbt_cmp_key_with_cur,
+ .cmp_key_with_cur = xfs_rmapbt_cmp_key_with_cur,
.buf_ops = &xfs_rtrmapbt_buf_ops,
- .cmp_two_keys = xfs_rtrmapbt_cmp_two_keys,
- .keys_inorder = xfs_rtrmapbt_keys_inorder,
- .recs_inorder = xfs_rtrmapbt_recs_inorder,
- .keys_contiguous = xfs_rtrmapbt_keys_contiguous,
+ .cmp_two_keys = xfs_rmapbt_cmp_two_keys,
+ .keys_inorder = xfs_rmapbt_keys_inorder,
+ .recs_inorder = xfs_rmapbt_recs_inorder,
+ .keys_contiguous = xfs_rmapbt_keys_contiguous,
.broot_realloc = xfs_rtrmapbt_broot_realloc,
};
@@ -595,16 +399,16 @@ const struct xfs_btree_ops xfs_rtrmapbt_mem_ops = {
.free_block = xfbtree_free_block,
.get_minrecs = xfbtree_get_minrecs,
.get_maxrecs = xfbtree_get_maxrecs,
- .init_key_from_rec = xfs_rtrmapbt_init_key_from_rec,
- .init_high_key_from_rec = xfs_rtrmapbt_init_high_key_from_rec,
- .init_rec_from_cur = xfs_rtrmapbt_init_rec_from_cur,
+ .init_key_from_rec = xfs_rmapbt_init_key_from_rec,
+ .init_high_key_from_rec = xfs_rmapbt_init_high_key_from_rec,
+ .init_rec_from_cur = xfs_rmapbt_init_rec_from_cur,
.init_ptr_from_cur = xfbtree_init_ptr_from_cur,
- .cmp_key_with_cur = xfs_rtrmapbt_cmp_key_with_cur,
+ .cmp_key_with_cur = xfs_rmapbt_cmp_key_with_cur,
.buf_ops = &xfs_rtrmapbt_mem_buf_ops,
- .cmp_two_keys = xfs_rtrmapbt_cmp_two_keys,
- .keys_inorder = xfs_rtrmapbt_keys_inorder,
- .recs_inorder = xfs_rtrmapbt_recs_inorder,
- .keys_contiguous = xfs_rtrmapbt_keys_contiguous,
+ .cmp_two_keys = xfs_rmapbt_cmp_two_keys,
+ .keys_inorder = xfs_rmapbt_keys_inorder,
+ .recs_inorder = xfs_rmapbt_recs_inorder,
+ .keys_contiguous = xfs_rmapbt_keys_contiguous,
};
/* Create a cursor for an in-memory btree. */
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] xfs: dedupe realtime rmap btree code
2026-09-18 18:01 [PATCH 0/2] xfs: dedupe realtime rmap btree code Eric Sandeen
2026-09-18 18:01 ` [PATCH 1/2] xfs: export several rmap btree key/record ops Eric Sandeen
2026-09-18 18:01 ` [PATCH 2/2] xfs: use the shared rmap btree ops for the rt rmap btree Eric Sandeen
@ 2026-09-21 3:40 ` Darrick J. Wong
2026-09-21 8:24 ` Christoph Hellwig
2 siblings, 1 reply; 7+ messages in thread
From: Darrick J. Wong @ 2026-09-21 3:40 UTC (permalink / raw)
To: Eric Sandeen; +Cc: linux-xfs, cem
On Fri, Sep 18, 2026 at 01:01:31PM -0500, Eric Sandeen wrote:
> xfs_rmap_btree.c and xfs_rtrmap_btree.c have a large amount of
> duplicated code, differing only in function names which add "rt"
> in the latter case. This can all be shared to reduce the cut & paste.
>
> Tested with an auto xfstests run as well as the rmap group with
> rtdev & rmap enabled.
>
> xfs_rmap_btree.c | 16 +--
> xfs_rmap_btree.h | 26 ++++++
> xfs_rtrmap_btree.c | 230 +++------------------------------------------------
> 3 files changed, 51 insertions(+), 221 deletions(-)
In general this looks good to me, though I'll add that the same sort of
code deduplication could likely be done to the refcount btree code too.
;)
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
>
> [root@fedora-rawhide xfstests-dev]# ./check -g rmap
> FSTYP -- xfs (non-debug)
> PLATFORM -- Linux/x86_64 fedora-rawhide 7.3.0-rc3+ #330 SMP
> PREEMPT_DYNAMIC Fri Sep 18 10:23:43 CDT 2026
> MKFS_OPTIONS -- -f -rrtdev=/dev/loop0 -m rmapbt=1,reflink=1 /dev/vdb2
> MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0
> -ortdev=/dev/loop0 /dev/vdb2 /mnt/scratch
>
> generic/365 2s ... 2s
> xfs/114 3s ... 2s
> xfs/233 1s ... 1s
> xfs/234 5s ... 5s
> xfs/235 1s ... 1s
> xfs/236 6s ... 6s
> xfs/271 2s ... 2s
> xfs/272 2s ... 2s
> xfs/273 4s ... 5s
> xfs/274 3s ... 3s
> xfs/275 [not run] This test requires a valid $SCRATCH_LOGDEV
> xfs/276 3s ... 3s
> xfs/277 2s ... 2s
> xfs/310 0s ... 1s
> xfs/317 [not run] XFS error injection requires
> CONFIG_XFS_DEBUG
> xfs/331 2s ... 2s
> xfs/332 1s ... 1s
> xfs/334 1s ... 1s
> xfs/335 4s ... 3s
> xfs/336 5s ... 5s
> xfs/337 5s ... 5s
> xfs/338 2s ... 2s
> xfs/339 2s ... 2s
> xfs/340 2s ... 2s
> xfs/341 1s ... 1s
> xfs/342 2s ... 2s
> xfs/343 2s ... 2s
> xfs/450 1s ... 2s
> Ran: generic/365 xfs/114 xfs/233 xfs/234 xfs/235 xfs/236 xfs/271 xfs/272
> xfs/273 xfs/274 xfs/275 xfs/276 xfs/277 xfs/310 xfs/317 xfs/331 xfs/332
> xfs/334 xfs/335 xfs/336 xfs/337 xfs/338 xfs/339 xfs/340 xfs/341 xfs/342
> xfs/343 xfs/450
> Not run: xfs/275 xfs/317
> Passed all 28 tests
>
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] xfs: dedupe realtime rmap btree code
2026-09-21 3:40 ` [PATCH 0/2] xfs: dedupe realtime rmap btree code Darrick J. Wong
@ 2026-09-21 8:24 ` Christoph Hellwig
2026-09-21 17:56 ` Eric Sandeen
0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2026-09-21 8:24 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: Eric Sandeen, linux-xfs, cem
On Sun, Sep 20, 2026 at 08:40:03PM -0700, Darrick J. Wong wrote:
> In general this looks good to me, though I'll add that the same sort of
> code deduplication could likely be done to the refcount btree code too.
I thought the same while reading over the patches. Also the exported
in patch 1 threw me off, but it didn't actually export anything.
I'd be tempted to just merge the two patches as that's easier to follow,
but otherwise this looks good to me:
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] xfs: dedupe realtime rmap btree code
2026-09-21 8:24 ` Christoph Hellwig
@ 2026-09-21 17:56 ` Eric Sandeen
2026-09-21 18:17 ` Carlos Maiolino
0 siblings, 1 reply; 7+ messages in thread
From: Eric Sandeen @ 2026-09-21 17:56 UTC (permalink / raw)
To: Christoph Hellwig, Darrick J. Wong; +Cc: Eric Sandeen, linux-xfs, cem
On 9/21/26 3:24 AM, Christoph Hellwig wrote:
> On Sun, Sep 20, 2026 at 08:40:03PM -0700, Darrick J. Wong wrote:
>> In general this looks good to me, though I'll add that the same sort of
>> code deduplication could likely be done to the refcount btree code too.
>
> I thought the same while reading over the patches. Also the exported
> in patch 1 threw me off, but it didn't actually export anything.
>
> I'd be tempted to just merge the two patches as that's easier to follow,
> but otherwise this looks good to me:
>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Oh, ok - I can merge them if folks prefer. (I kinda thought a prep patch
/ use patch was simpler to follow but I really don't care either way.)
And yeah, you're both right about the refcount code, I should have thought
of that. It's much shorter functions and my duplicate code scan was looking
for bigger chunks, but I didn't fully engage my brain.
Happy to send V2 with both, and merge each into a single patch if that's
what people want.
-Eric
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] xfs: dedupe realtime rmap btree code
2026-09-21 17:56 ` Eric Sandeen
@ 2026-09-21 18:17 ` Carlos Maiolino
0 siblings, 0 replies; 7+ messages in thread
From: Carlos Maiolino @ 2026-09-21 18:17 UTC (permalink / raw)
To: Eric Sandeen; +Cc: Christoph Hellwig, Darrick J. Wong, Eric Sandeen, linux-xfs
On Mon, Sep 21, 2026 at 12:56:58PM -0500, Eric Sandeen wrote:
> On 9/21/26 3:24 AM, Christoph Hellwig wrote:
> > On Sun, Sep 20, 2026 at 08:40:03PM -0700, Darrick J. Wong wrote:
> >> In general this looks good to me, though I'll add that the same sort of
> >> code deduplication could likely be done to the refcount btree code too.
> >
> > I thought the same while reading over the patches. Also the exported
> > in patch 1 threw me off, but it didn't actually export anything.
> >
> > I'd be tempted to just merge the two patches as that's easier to follow,
> > but otherwise this looks good to me:
> >
> > Reviewed-by: Christoph Hellwig <hch@lst.de>
> Oh, ok - I can merge them if folks prefer. (I kinda thought a prep patch
> / use patch was simpler to follow but I really don't care either way.)
>
> And yeah, you're both right about the refcount code, I should have thought
> of that. It's much shorter functions and my duplicate code scan was looking
> for bigger chunks, but I didn't fully engage my brain.
>
> Happy to send V2 with both, and merge each into a single patch if that's
> what people want.
This sounds like a good plan for me :)
For the code in these patches though:
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
>
> -Eric
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-21 18:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-18 18:01 [PATCH 0/2] xfs: dedupe realtime rmap btree code Eric Sandeen
2026-09-18 18:01 ` [PATCH 1/2] xfs: export several rmap btree key/record ops Eric Sandeen
2026-09-18 18:01 ` [PATCH 2/2] xfs: use the shared rmap btree ops for the rt rmap btree Eric Sandeen
2026-09-21 3:40 ` [PATCH 0/2] xfs: dedupe realtime rmap btree code Darrick J. Wong
2026-09-21 8:24 ` Christoph Hellwig
2026-09-21 17:56 ` Eric Sandeen
2026-09-21 18:17 ` Carlos Maiolino
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox