xfs: correct calculation for agend and blockcount
authorShiyang Ruan <ruansy.fnst@fujitsu.com>
Wed, 13 Sep 2023 10:29:42 +0000 (18:29 +0800)
committerChandan Babu R <chandanbabu@kernel.org>
Thu, 12 Oct 2023 04:41:56 +0000 (10:11 +0530)
The agend should be "start + length - 1", then, blockcount should be
"end + 1 - start".  Correct 2 calculation mistakes.

Also, rename "agend" to "range_agend" because it's not the end of the AG
per se; it's the end of the dead region within an AG's agblock space.

Fixes: 5cf32f63b0f4 ("xfs: fix the calculation for "end" and "length"")
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/xfs_notify_failure.c

index 4a9bbd3..a7daa52 100644 (file)
@@ -126,8 +126,8 @@ xfs_dax_notify_ddev_failure(
                struct xfs_rmap_irec    ri_low = { };
                struct xfs_rmap_irec    ri_high;
                struct xfs_agf          *agf;
-               xfs_agblock_t           agend;
                struct xfs_perag        *pag;
+               xfs_agblock_t           range_agend;
 
                pag = xfs_perag_get(mp, agno);
                error = xfs_alloc_read_agf(pag, tp, 0, &agf_bp);
@@ -148,10 +148,10 @@ xfs_dax_notify_ddev_failure(
                        ri_high.rm_startblock = XFS_FSB_TO_AGBNO(mp, end_fsbno);
 
                agf = agf_bp->b_addr;
-               agend = min(be32_to_cpu(agf->agf_length),
+               range_agend = min(be32_to_cpu(agf->agf_length) - 1,
                                ri_high.rm_startblock);
                notify.startblock = ri_low.rm_startblock;
-               notify.blockcount = agend - ri_low.rm_startblock;
+               notify.blockcount = range_agend + 1 - ri_low.rm_startblock;
 
                error = xfs_rmap_query_range(cur, &ri_low, &ri_high,
                                xfs_dax_failure_fn, &notify);