Message ID | 20201119233943.GG9695@magnolia (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | xfs: revert "xfs: fix rmap key and record comparison functions" | expand |
On 11/19/20 5:39 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > This reverts commit 6ff646b2ceb0eec916101877f38da0b73e3a5b7f. > > Your maintainer committed a major braino in the rmap code by adding the > attr fork, bmbt, and unwritten extent usage bits into rmap record key > comparisons. While XFS uses the usage bits *in the rmap records* for > cross-referencing metadata in xfs_scrub and xfs_repair, it only needs > the owner and offset information to distinguish between reverse mappings > of the same physical extent into the data fork of a file at multiple > offsets. The other bits are not important for key comparisons for index > lookups, and never have been. > > Eric Sandeen reports that this causes regressions in generic/299, so > undo this patch before it does more damage. > > Reported-by: Eric Sandeen <sandeen@sandeen.net> > Fixes: 6ff646b2ceb0 ("xfs: fix rmap key and record comparison functions") > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> > --- > fs/xfs/libxfs/xfs_rmap_btree.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c > index 577a66381327..beb81c84a937 100644 > --- a/fs/xfs/libxfs/xfs_rmap_btree.c > +++ b/fs/xfs/libxfs/xfs_rmap_btree.c > @@ -243,8 +243,8 @@ xfs_rmapbt_key_diff( > else if (y > x) > return -1; > > - x = be64_to_cpu(kp->rm_offset); > - y = xfs_rmap_irec_offset_pack(rec); > + x = XFS_RMAP_OFF(be64_to_cpu(kp->rm_offset)); > + y = rec->rm_offset; > if (x > y) > return 1; > else if (y > x) > @@ -275,8 +275,8 @@ xfs_rmapbt_diff_two_keys( > else if (y > x) > return -1; > > - x = be64_to_cpu(kp1->rm_offset); > - y = be64_to_cpu(kp2->rm_offset); > + x = XFS_RMAP_OFF(be64_to_cpu(kp1->rm_offset)); > + y = XFS_RMAP_OFF(be64_to_cpu(kp2->rm_offset)); > if (x > y) > return 1; > else if (y > x) > @@ -390,8 +390,8 @@ xfs_rmapbt_keys_inorder( > return 1; > else if (a > b) > return 0; > - a = be64_to_cpu(k1->rmap.rm_offset); > - b = be64_to_cpu(k2->rmap.rm_offset); > + a = XFS_RMAP_OFF(be64_to_cpu(k1->rmap.rm_offset)); > + b = XFS_RMAP_OFF(be64_to_cpu(k2->rmap.rm_offset)); > if (a <= b) > return 1; > return 0; > @@ -420,8 +420,8 @@ xfs_rmapbt_recs_inorder( > return 1; > else if (a > b) > return 0; > - a = be64_to_cpu(r1->rmap.rm_offset); > - b = be64_to_cpu(r2->rmap.rm_offset); > + a = XFS_RMAP_OFF(be64_to_cpu(r1->rmap.rm_offset)); > + b = XFS_RMAP_OFF(be64_to_cpu(r2->rmap.rm_offset)); > if (a <= b) > return 1; > return 0; >
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c index 577a66381327..beb81c84a937 100644 --- a/fs/xfs/libxfs/xfs_rmap_btree.c +++ b/fs/xfs/libxfs/xfs_rmap_btree.c @@ -243,8 +243,8 @@ xfs_rmapbt_key_diff( else if (y > x) return -1; - x = be64_to_cpu(kp->rm_offset); - y = xfs_rmap_irec_offset_pack(rec); + x = XFS_RMAP_OFF(be64_to_cpu(kp->rm_offset)); + y = rec->rm_offset; if (x > y) return 1; else if (y > x) @@ -275,8 +275,8 @@ xfs_rmapbt_diff_two_keys( else if (y > x) return -1; - x = be64_to_cpu(kp1->rm_offset); - y = be64_to_cpu(kp2->rm_offset); + x = XFS_RMAP_OFF(be64_to_cpu(kp1->rm_offset)); + y = XFS_RMAP_OFF(be64_to_cpu(kp2->rm_offset)); if (x > y) return 1; else if (y > x) @@ -390,8 +390,8 @@ xfs_rmapbt_keys_inorder( return 1; else if (a > b) return 0; - a = be64_to_cpu(k1->rmap.rm_offset); - b = be64_to_cpu(k2->rmap.rm_offset); + a = XFS_RMAP_OFF(be64_to_cpu(k1->rmap.rm_offset)); + b = XFS_RMAP_OFF(be64_to_cpu(k2->rmap.rm_offset)); if (a <= b) return 1; return 0; @@ -420,8 +420,8 @@ xfs_rmapbt_recs_inorder( return 1; else if (a > b) return 0; - a = be64_to_cpu(r1->rmap.rm_offset); - b = be64_to_cpu(r2->rmap.rm_offset); + a = XFS_RMAP_OFF(be64_to_cpu(r1->rmap.rm_offset)); + b = XFS_RMAP_OFF(be64_to_cpu(r2->rmap.rm_offset)); if (a <= b) return 1; return 0;