Message ID | 20230828072450.1510248-1-ruansy.fnst@fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | xfs: correct calculation for blockcount | expand |
Ping~ 在 2023/8/28 15:24, Shiyang Ruan 写道: > The blockcount, which means length, should be "end + 1 - start". So, > add the missing "+1" here. > > Fixes: 5cf32f63b0f4 ("xfs: fix the calculation for "end" and "length"") > Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> > --- > fs/xfs/xfs_notify_failure.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c > index 4a9bbd3fe120..459fc8a39635 100644 > --- a/fs/xfs/xfs_notify_failure.c > +++ b/fs/xfs/xfs_notify_failure.c > @@ -151,7 +151,7 @@ xfs_dax_notify_ddev_failure( > agend = min(be32_to_cpu(agf->agf_length), > ri_high.rm_startblock); > notify.startblock = ri_low.rm_startblock; > - notify.blockcount = agend - ri_low.rm_startblock; > + notify.blockcount = agend + 1 - ri_low.rm_startblock; > > error = xfs_rmap_query_range(cur, &ri_low, &ri_high, > xfs_dax_failure_fn, ¬ify);
On Fri, Sep 08, 2023 at 06:18:52PM +0800, Shiyang Ruan wrote: > Ping~ > > 在 2023/8/28 15:24, Shiyang Ruan 写道: > > The blockcount, which means length, should be "end + 1 - start". So, > > add the missing "+1" here. > > > > Fixes: 5cf32f63b0f4 ("xfs: fix the calculation for "end" and "length"") > > Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> > > --- > > fs/xfs/xfs_notify_failure.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c > > index 4a9bbd3fe120..459fc8a39635 100644 > > --- a/fs/xfs/xfs_notify_failure.c > > +++ b/fs/xfs/xfs_notify_failure.c > > @@ -151,7 +151,7 @@ xfs_dax_notify_ddev_failure( > > agend = min(be32_to_cpu(agf->agf_length), > > ri_high.rm_startblock); I don't understand this. ri_high.rm_startblock should be the last agbno for which we want rmapbt mappings. If agf_length is 100, then don't we want to be clamping agend to 99, not 100? Block 99 is the last block in an AG. agend = min(be32_to_cpu(agf->agf_length) - 1, ri_high.rm_startblock); If we do the above... > > notify.startblock = ri_low.rm_startblock; > > - notify.blockcount = agend - ri_low.rm_startblock; > > + notify.blockcount = agend + 1 - ri_low.rm_startblock; ...then this actually makes sense. > > error = xfs_rmap_query_range(cur, &ri_low, &ri_high, > > xfs_dax_failure_fn, ¬ify); Sorry I've been kinda slow to respond. --D
在 2023/9/9 7:55, Darrick J. Wong 写道: > On Fri, Sep 08, 2023 at 06:18:52PM +0800, Shiyang Ruan wrote: >> Ping~ >> >> 在 2023/8/28 15:24, Shiyang Ruan 写道: >>> The blockcount, which means length, should be "end + 1 - start". So, >>> add the missing "+1" here. >>> >>> Fixes: 5cf32f63b0f4 ("xfs: fix the calculation for "end" and "length"") >>> Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> >>> --- >>> fs/xfs/xfs_notify_failure.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c >>> index 4a9bbd3fe120..459fc8a39635 100644 >>> --- a/fs/xfs/xfs_notify_failure.c >>> +++ b/fs/xfs/xfs_notify_failure.c >>> @@ -151,7 +151,7 @@ xfs_dax_notify_ddev_failure( >>> agend = min(be32_to_cpu(agf->agf_length), >>> ri_high.rm_startblock); > > I don't understand this. ri_high.rm_startblock should be the last agbno > for which we want rmapbt mappings. If agf_length is 100, then don't we > want to be clamping agend to 99, not 100? Block 99 is the last block in > an AG. > > agend = min(be32_to_cpu(agf->agf_length) - 1, > ri_high.rm_startblock); This is right. Will fix this too. > > If we do the above... > >>> notify.startblock = ri_low.rm_startblock; >>> - notify.blockcount = agend - ri_low.rm_startblock; >>> + notify.blockcount = agend + 1 - ri_low.rm_startblock; > > ...then this actually makes sense. > >>> error = xfs_rmap_query_range(cur, &ri_low, &ri_high, >>> xfs_dax_failure_fn, ¬ify); > > Sorry I've been kinda slow to respond. No problem :) -- Thanks, Ruan. > > --D
diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c index 4a9bbd3fe120..459fc8a39635 100644 --- a/fs/xfs/xfs_notify_failure.c +++ b/fs/xfs/xfs_notify_failure.c @@ -151,7 +151,7 @@ xfs_dax_notify_ddev_failure( agend = min(be32_to_cpu(agf->agf_length), ri_high.rm_startblock); notify.startblock = ri_low.rm_startblock; - notify.blockcount = agend - ri_low.rm_startblock; + notify.blockcount = agend + 1 - ri_low.rm_startblock; error = xfs_rmap_query_range(cur, &ri_low, &ri_high, xfs_dax_failure_fn, ¬ify);
The blockcount, which means length, should be "end + 1 - start". So, add the missing "+1" here. Fixes: 5cf32f63b0f4 ("xfs: fix the calculation for "end" and "length"") Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> --- fs/xfs/xfs_notify_failure.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)