diff mbox series

xfs: correct calculation for blockcount

Message ID 20230828072450.1510248-1-ruansy.fnst@fujitsu.com (mailing list archive)
State New, archived
Headers show
Series xfs: correct calculation for blockcount | expand

Commit Message

Shiyang Ruan Aug. 28, 2023, 7:24 a.m. UTC
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(-)

Comments

Shiyang Ruan Sept. 8, 2023, 10:18 a.m. UTC | #1
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, &notify);
Darrick J. Wong Sept. 8, 2023, 11:55 p.m. UTC | #2
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, &notify);

Sorry I've been kinda slow to respond.

--D
Shiyang Ruan Sept. 11, 2023, 10:47 a.m. UTC | #3
在 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, &notify);
> 
> Sorry I've been kinda slow to respond.

No problem :)


--
Thanks,
Ruan.

> 
> --D
diff mbox series

Patch

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, &notify);