On Mon, Aug 19, 2024 at 08:53:18 AM +0800, Zizhi Wo wrote: > Changes since V3[1]: > - For the first patch, simply place the modification logic in the > xfs_fsmap_owner_to_rmap() function. > - For the second patch, more detailed comments were added and related > changes were made to the initialization of the end_daddr field. > > This patch set contains two patches to repair fsmap. Although they are both > problems of missing query intervals, the root causes of the two are > inconsistent, so two patches are proposed. > > Patch 1: The fix addresses the interval omission issue caused by the > incorrect setting of "rm_owner" in the high_key during rmap queries. In > this scenario, fsmap finds the record on the rmapbt, but due to the > incorrect setting of the "rm_owner", the key of the record is larger than > the high_key, causing the query result to be incorrect. This issue is > resolved by fixing the "rm_owner" setup logic. > > Patch 2: The fix addresses the interval omission issue caused by bit > shifting during gap queries in fsmap. In this scenario, fsmap does not > find the record on the rmapbt, so it needs to locate it by the gap of the > info->next_daddr and high_key address. However, due to the shift, the two > are reduced to 0, so the query error is caused. The issue is resolved by > introducing the "end_daddr" field in the xfs_getfsmap_info structure to > store the high_key at the sector granularity. > > [1] https://lore.kernel.org/all/20240812011505.1414130-1-wozizhi@xxxxxxxxxx/ > The two patches in this series cause xfs_scrub to execute indefinitely immediately after xfs/556 is executed. The fstest configuration used is provided below, FSTYP=xfs TEST_DIR=/media/test SCRATCH_MNT=/media/scratch TEST_DEV=/dev/loop16 TEST_LOGDEV=/dev/loop13 TEST_RTDEV=/dev/loop12 TEST_FS_MOUNT_OPTS="-o rtdev=/dev/loop12 -o logdev=/dev/loop13" SCRATCH_DEV_POOL="/dev/loop5 /dev/loop6 /dev/loop7 /dev/loop8 /dev/loop9 /dev/loop10 /dev/loop11" MKFS_OPTIONS="-f -m reflink=0,rmapbt=0, -d rtinherit=1 -lsize=1g" SCRATCH_LOGDEV=/dev/loop15 SCRATCH_RTDEV=/dev/loop14 USE_EXTERNAL=yes -- Chandan