diff mbox series

[V2,02/12] xfs: Rename MAXEXTNUM, MAXAEXTNUM to XFS_IFORK_EXTCNT_MAXS32, XFS_IFORK_EXTCNT_MAXS16

Message ID 20210726114541.24898-3-chandanrlinux@gmail.com (mailing list archive)
State Superseded, archived
Headers show
Series xfs: Extend per-inode extent counters | expand

Commit Message

Chandan Babu R July 26, 2021, 11:45 a.m. UTC
In preparation for introducing larger extent count limits, this commit renames
existing extent count limits based on their signedness and width.

Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
---
 fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
 fs/xfs/libxfs/xfs_format.h     | 8 ++++----
 fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
 fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
 fs/xfs/scrub/inode_repair.c    | 2 +-
 5 files changed, 11 insertions(+), 10 deletions(-)

Comments

Darrick J. Wong July 27, 2021, 9:56 p.m. UTC | #1
On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
> In preparation for introducing larger extent count limits, this commit renames
> existing extent count limits based on their signedness and width.
> 
> Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
> ---
>  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
>  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
>  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
>  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
>  fs/xfs/scrub/inode_repair.c    | 2 +-
>  5 files changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index f3c9a0ebb0a5..8f262405a5b5 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
>  	 * available.
>  	 */
>  	if (whichfork == XFS_DATA_FORK) {
> -		maxleafents = MAXEXTNUM;
> +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;

I'm not in love with these names, since they tell me roughly about the
size of the constant (which I could glean from the definition) but less
about when I would expect to find them.  How about:

#define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
#define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)

and when we get to the iext64 feature (or whatever we end up calling it)
then we can define new ones:

#define XFS_MAX_DFORK_NEXTENTS64  ((xfs_extnum_t) 0xFFFFFFFFFFFF)
#define XFS_MAX_AFORK_NEXTENTS64  ((xfs_aextnum_t)0x0000FFFFFFFF)

or something like that.

>  		sz = xfs_bmdr_space_calc(MINDBTPTRS);
>  	} else {
> -		maxleafents = MAXAEXTNUM;
> +		maxleafents = XFS_IFORK_EXTCNT_MAXS16;
>  		sz = xfs_bmdr_space_calc(MINABTPTRS);
>  	}
>  	maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
> index 37cca918d2ba..920e3f9c418f 100644
> --- a/fs/xfs/libxfs/xfs_format.h
> +++ b/fs/xfs/libxfs/xfs_format.h
> @@ -1110,11 +1110,11 @@ enum xfs_dinode_fmt {
>  	{ XFS_DINODE_FMT_UUID,		"uuid" }
>  
>  /*
> - * Max values for extlen, extnum, aextnum.
> + * Max values for extlen and disk inode's extent counters.
>   */
> -#define	MAXEXTLEN	((uint32_t)0x001fffff)	/* 21 bits */

As for MAXEXTLEN... would you mind tacking a new patch on the end to fix
its definition as well?  It /really/ ought to be based on the disk
format definitions and not open-coded.

#define XFS_MAX_EXTLEN		((xfs_extlen_t)(1 << BMBT_BLOCKCOUNT_BITLEN) - 1)

--D

> -#define	MAXEXTNUM	((int32_t)0x7fffffff)	/* signed int */
> -#define	MAXAEXTNUM	((int16_t)0x7fff)	/* signed short */
> +#define	MAXEXTLEN		((uint32_t)0x1fffff) /* 21 bits */
> +#define XFS_IFORK_EXTCNT_MAXS32 ((int32_t)0x7fffffff)  /* Signed 32-bits */
> +#define XFS_IFORK_EXTCNT_MAXS16 ((int16_t)0x7fff)      /* Signed 16-bits */
>  
>  /*
>   * Inode minimum and maximum sizes.
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 5625df1ddd95..66d13e8fa420 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -365,9 +365,9 @@ xfs_dinode_verify_fork(
>  		break;
>  	case XFS_DINODE_FMT_BTREE:
>  		if (whichfork == XFS_ATTR_FORK) {
> -			if (di_nextents > MAXAEXTNUM)
> +			if (di_nextents > XFS_IFORK_EXTCNT_MAXS16)
>  				return __this_address;
> -		} else if (di_nextents > MAXEXTNUM) {
> +		} else if (di_nextents > XFS_IFORK_EXTCNT_MAXS32) {
>  			return __this_address;
>  		}
>  		break;
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> index 801a6f7dbd0c..6f4b14d3d381 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.c
> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> @@ -736,7 +736,8 @@ xfs_iext_count_may_overflow(
>  	if (whichfork == XFS_COW_FORK)
>  		return 0;
>  
> -	max_exts = (whichfork == XFS_ATTR_FORK) ? MAXAEXTNUM : MAXEXTNUM;
> +	max_exts = (whichfork == XFS_ATTR_FORK) ?
> +		XFS_IFORK_EXTCNT_MAXS16 : XFS_IFORK_EXTCNT_MAXS32;
>  
>  	if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
>  		max_exts = 10;
> diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c
> index a80cd633fe59..c44f8d06939b 100644
> --- a/fs/xfs/scrub/inode_repair.c
> +++ b/fs/xfs/scrub/inode_repair.c
> @@ -1198,7 +1198,7 @@ xrep_inode_blockcounts(
>  			return error;
>  		if (count >= sc->mp->m_sb.sb_dblocks)
>  			return -EFSCORRUPTED;
> -		if (nextents >= MAXAEXTNUM)
> +		if (nextents >= XFS_IFORK_EXTCNT_MAXS16)
>  			return -EFSCORRUPTED;
>  		ifp->if_nextents = nextents;
>  	} else {
> -- 
> 2.30.2
>
Darrick J. Wong July 27, 2021, 10:03 p.m. UTC | #2
On Tue, Jul 27, 2021 at 02:56:11PM -0700, Darrick J. Wong wrote:
> On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
> > In preparation for introducing larger extent count limits, this commit renames
> > existing extent count limits based on their signedness and width.
> > 
> > Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
> > ---
> >  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
> >  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
> >  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
> >  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
> >  fs/xfs/scrub/inode_repair.c    | 2 +-
> >  5 files changed, 11 insertions(+), 10 deletions(-)
> > 
> > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> > index f3c9a0ebb0a5..8f262405a5b5 100644
> > --- a/fs/xfs/libxfs/xfs_bmap.c
> > +++ b/fs/xfs/libxfs/xfs_bmap.c
> > @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
> >  	 * available.
> >  	 */
> >  	if (whichfork == XFS_DATA_FORK) {
> > -		maxleafents = MAXEXTNUM;
> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
> 
> I'm not in love with these names, since they tell me roughly about the
> size of the constant (which I could glean from the definition) but less
> about when I would expect to find them.  How about:
> 
> #define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
> #define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)

Or, given that 'DFORK' already means 'ondisk fork', how about:

XFS_MAX_DATA_NEXTENTS
XFS_MAX_ATTR_NEXTENTS

?

--D

> 
> and when we get to the iext64 feature (or whatever we end up calling it)
> then we can define new ones:
> 
> #define XFS_MAX_DFORK_NEXTENTS64  ((xfs_extnum_t) 0xFFFFFFFFFFFF)
> #define XFS_MAX_AFORK_NEXTENTS64  ((xfs_aextnum_t)0x0000FFFFFFFF)
> 
> or something like that.
> 
> >  		sz = xfs_bmdr_space_calc(MINDBTPTRS);
> >  	} else {
> > -		maxleafents = MAXAEXTNUM;
> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS16;
> >  		sz = xfs_bmdr_space_calc(MINABTPTRS);
> >  	}
> >  	maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
> > diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
> > index 37cca918d2ba..920e3f9c418f 100644
> > --- a/fs/xfs/libxfs/xfs_format.h
> > +++ b/fs/xfs/libxfs/xfs_format.h
> > @@ -1110,11 +1110,11 @@ enum xfs_dinode_fmt {
> >  	{ XFS_DINODE_FMT_UUID,		"uuid" }
> >  
> >  /*
> > - * Max values for extlen, extnum, aextnum.
> > + * Max values for extlen and disk inode's extent counters.
> >   */
> > -#define	MAXEXTLEN	((uint32_t)0x001fffff)	/* 21 bits */
> 
> As for MAXEXTLEN... would you mind tacking a new patch on the end to fix
> its definition as well?  It /really/ ought to be based on the disk
> format definitions and not open-coded.
> 
> #define XFS_MAX_EXTLEN		((xfs_extlen_t)(1 << BMBT_BLOCKCOUNT_BITLEN) - 1)
> 
> --D
> 
> > -#define	MAXEXTNUM	((int32_t)0x7fffffff)	/* signed int */
> > -#define	MAXAEXTNUM	((int16_t)0x7fff)	/* signed short */
> > +#define	MAXEXTLEN		((uint32_t)0x1fffff) /* 21 bits */
> > +#define XFS_IFORK_EXTCNT_MAXS32 ((int32_t)0x7fffffff)  /* Signed 32-bits */
> > +#define XFS_IFORK_EXTCNT_MAXS16 ((int16_t)0x7fff)      /* Signed 16-bits */
> >  
> >  /*
> >   * Inode minimum and maximum sizes.
> > diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> > index 5625df1ddd95..66d13e8fa420 100644
> > --- a/fs/xfs/libxfs/xfs_inode_buf.c
> > +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> > @@ -365,9 +365,9 @@ xfs_dinode_verify_fork(
> >  		break;
> >  	case XFS_DINODE_FMT_BTREE:
> >  		if (whichfork == XFS_ATTR_FORK) {
> > -			if (di_nextents > MAXAEXTNUM)
> > +			if (di_nextents > XFS_IFORK_EXTCNT_MAXS16)
> >  				return __this_address;
> > -		} else if (di_nextents > MAXEXTNUM) {
> > +		} else if (di_nextents > XFS_IFORK_EXTCNT_MAXS32) {
> >  			return __this_address;
> >  		}
> >  		break;
> > diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> > index 801a6f7dbd0c..6f4b14d3d381 100644
> > --- a/fs/xfs/libxfs/xfs_inode_fork.c
> > +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> > @@ -736,7 +736,8 @@ xfs_iext_count_may_overflow(
> >  	if (whichfork == XFS_COW_FORK)
> >  		return 0;
> >  
> > -	max_exts = (whichfork == XFS_ATTR_FORK) ? MAXAEXTNUM : MAXEXTNUM;
> > +	max_exts = (whichfork == XFS_ATTR_FORK) ?
> > +		XFS_IFORK_EXTCNT_MAXS16 : XFS_IFORK_EXTCNT_MAXS32;
> >  
> >  	if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
> >  		max_exts = 10;
> > diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c
> > index a80cd633fe59..c44f8d06939b 100644
> > --- a/fs/xfs/scrub/inode_repair.c
> > +++ b/fs/xfs/scrub/inode_repair.c
> > @@ -1198,7 +1198,7 @@ xrep_inode_blockcounts(
> >  			return error;
> >  		if (count >= sc->mp->m_sb.sb_dblocks)
> >  			return -EFSCORRUPTED;
> > -		if (nextents >= MAXAEXTNUM)
> > +		if (nextents >= XFS_IFORK_EXTCNT_MAXS16)
> >  			return -EFSCORRUPTED;
> >  		ifp->if_nextents = nextents;
> >  	} else {
> > -- 
> > 2.30.2
> >
Chandan Babu R July 28, 2021, 3:15 a.m. UTC | #3
On 28 Jul 2021 at 03:33, Darrick J. Wong wrote:
> On Tue, Jul 27, 2021 at 02:56:11PM -0700, Darrick J. Wong wrote:
>> On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
>> > In preparation for introducing larger extent count limits, this commit renames
>> > existing extent count limits based on their signedness and width.
>> > 
>> > Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
>> > ---
>> >  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
>> >  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
>> >  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
>> >  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
>> >  fs/xfs/scrub/inode_repair.c    | 2 +-
>> >  5 files changed, 11 insertions(+), 10 deletions(-)
>> > 
>> > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
>> > index f3c9a0ebb0a5..8f262405a5b5 100644
>> > --- a/fs/xfs/libxfs/xfs_bmap.c
>> > +++ b/fs/xfs/libxfs/xfs_bmap.c
>> > @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
>> >  	 * available.
>> >  	 */
>> >  	if (whichfork == XFS_DATA_FORK) {
>> > -		maxleafents = MAXEXTNUM;
>> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
>> 
>> I'm not in love with these names, since they tell me roughly about the
>> size of the constant (which I could glean from the definition) but less
>> about when I would expect to find them.  How about:
>> 
>> #define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
>> #define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)
>
> Or, given that 'DFORK' already means 'ondisk fork', how about:
>
> XFS_MAX_DATA_NEXTENTS
> XFS_MAX_ATTR_NEXTENTS

Yes, I agree. These names are better. I will incorporate your suggestions
before posting V3.

>
> ?
>
> --D
>
>> 
>> and when we get to the iext64 feature (or whatever we end up calling it)
>> then we can define new ones:
>> 
>> #define XFS_MAX_DFORK_NEXTENTS64  ((xfs_extnum_t) 0xFFFFFFFFFFFF)
>> #define XFS_MAX_AFORK_NEXTENTS64  ((xfs_aextnum_t)0x0000FFFFFFFF)
>> 
>> or something like that.
>> 
>> >  		sz = xfs_bmdr_space_calc(MINDBTPTRS);
>> >  	} else {
>> > -		maxleafents = MAXAEXTNUM;
>> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS16;
>> >  		sz = xfs_bmdr_space_calc(MINABTPTRS);
>> >  	}
>> >  	maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
>> > diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
>> > index 37cca918d2ba..920e3f9c418f 100644
>> > --- a/fs/xfs/libxfs/xfs_format.h
>> > +++ b/fs/xfs/libxfs/xfs_format.h
>> > @@ -1110,11 +1110,11 @@ enum xfs_dinode_fmt {
>> >  	{ XFS_DINODE_FMT_UUID,		"uuid" }
>> >  
>> >  /*
>> > - * Max values for extlen, extnum, aextnum.
>> > + * Max values for extlen and disk inode's extent counters.
>> >   */
>> > -#define	MAXEXTLEN	((uint32_t)0x001fffff)	/* 21 bits */
>> 
>> As for MAXEXTLEN... would you mind tacking a new patch on the end to fix
>> its definition as well?  It /really/ ought to be based on the disk
>> format definitions and not open-coded.
>> 
>> #define XFS_MAX_EXTLEN		((xfs_extlen_t)(1 << BMBT_BLOCKCOUNT_BITLEN) - 1)
>> 
>> --D
>> 
>> > -#define	MAXEXTNUM	((int32_t)0x7fffffff)	/* signed int */
>> > -#define	MAXAEXTNUM	((int16_t)0x7fff)	/* signed short */
>> > +#define	MAXEXTLEN		((uint32_t)0x1fffff) /* 21 bits */
>> > +#define XFS_IFORK_EXTCNT_MAXS32 ((int32_t)0x7fffffff)  /* Signed 32-bits */
>> > +#define XFS_IFORK_EXTCNT_MAXS16 ((int16_t)0x7fff)      /* Signed 16-bits */
>> >  
>> >  /*
>> >   * Inode minimum and maximum sizes.
>> > diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
>> > index 5625df1ddd95..66d13e8fa420 100644
>> > --- a/fs/xfs/libxfs/xfs_inode_buf.c
>> > +++ b/fs/xfs/libxfs/xfs_inode_buf.c
>> > @@ -365,9 +365,9 @@ xfs_dinode_verify_fork(
>> >  		break;
>> >  	case XFS_DINODE_FMT_BTREE:
>> >  		if (whichfork == XFS_ATTR_FORK) {
>> > -			if (di_nextents > MAXAEXTNUM)
>> > +			if (di_nextents > XFS_IFORK_EXTCNT_MAXS16)
>> >  				return __this_address;
>> > -		} else if (di_nextents > MAXEXTNUM) {
>> > +		} else if (di_nextents > XFS_IFORK_EXTCNT_MAXS32) {
>> >  			return __this_address;
>> >  		}
>> >  		break;
>> > diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
>> > index 801a6f7dbd0c..6f4b14d3d381 100644
>> > --- a/fs/xfs/libxfs/xfs_inode_fork.c
>> > +++ b/fs/xfs/libxfs/xfs_inode_fork.c
>> > @@ -736,7 +736,8 @@ xfs_iext_count_may_overflow(
>> >  	if (whichfork == XFS_COW_FORK)
>> >  		return 0;
>> >  
>> > -	max_exts = (whichfork == XFS_ATTR_FORK) ? MAXAEXTNUM : MAXEXTNUM;
>> > +	max_exts = (whichfork == XFS_ATTR_FORK) ?
>> > +		XFS_IFORK_EXTCNT_MAXS16 : XFS_IFORK_EXTCNT_MAXS32;
>> >  
>> >  	if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
>> >  		max_exts = 10;
>> > diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c
>> > index a80cd633fe59..c44f8d06939b 100644
>> > --- a/fs/xfs/scrub/inode_repair.c
>> > +++ b/fs/xfs/scrub/inode_repair.c
>> > @@ -1198,7 +1198,7 @@ xrep_inode_blockcounts(
>> >  			return error;
>> >  		if (count >= sc->mp->m_sb.sb_dblocks)
>> >  			return -EFSCORRUPTED;
>> > -		if (nextents >= MAXAEXTNUM)
>> > +		if (nextents >= XFS_IFORK_EXTCNT_MAXS16)
>> >  			return -EFSCORRUPTED;
>> >  		ifp->if_nextents = nextents;
>> >  	} else {
>> > -- 
>> > 2.30.2
>> >
Chandan Babu R Aug. 23, 2021, 4:18 a.m. UTC | #4
On 28 Jul 2021 at 08:45, Chandan Babu R wrote:
> On 28 Jul 2021 at 03:33, Darrick J. Wong wrote:
>> On Tue, Jul 27, 2021 at 02:56:11PM -0700, Darrick J. Wong wrote:
>>> On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
>>> > In preparation for introducing larger extent count limits, this commit renames
>>> > existing extent count limits based on their signedness and width.
>>> > 
>>> > Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
>>> > ---
>>> >  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
>>> >  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
>>> >  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
>>> >  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
>>> >  fs/xfs/scrub/inode_repair.c    | 2 +-
>>> >  5 files changed, 11 insertions(+), 10 deletions(-)
>>> > 
>>> > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
>>> > index f3c9a0ebb0a5..8f262405a5b5 100644
>>> > --- a/fs/xfs/libxfs/xfs_bmap.c
>>> > +++ b/fs/xfs/libxfs/xfs_bmap.c
>>> > @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
>>> >  	 * available.
>>> >  	 */
>>> >  	if (whichfork == XFS_DATA_FORK) {
>>> > -		maxleafents = MAXEXTNUM;
>>> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
>>> 
>>> I'm not in love with these names, since they tell me roughly about the
>>> size of the constant (which I could glean from the definition) but less
>>> about when I would expect to find them.  How about:
>>> 
>>> #define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
>>> #define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)
>>
>> Or, given that 'DFORK' already means 'ondisk fork', how about:
>>
>> XFS_MAX_DATA_NEXTENTS
>> XFS_MAX_ATTR_NEXTENTS
>
> Yes, I agree. These names are better. I will incorporate your suggestions
> before posting V3.
>

Using XFS_MAX_[ATTR|DATA]_NEXTENTS won't be feasible later in the patch series
since the maximum extent count for the two inode forks depend on whether
XFS_SB_FEAT_INCOMPAT_NREXT64 feature bit is set or not. With the incompat
feature bit set, extent counts for attr and data forks can have maximum values
of (2^32 - 1) and (2^48 - 1) respectively. With the incompat feature bit not
set, extent counts for attr and data forks can have maximum values of (2^15 -
1) and (2^31 - 1) respectively.

Also, xfs_iext_max_nextents() (an inline function introduced in the next patch
in this series) abstracts away the logic of determining the maximum extent
count for an inode fork.
Chandan Babu R Aug. 23, 2021, 7:17 a.m. UTC | #5
On 23 Aug 2021 at 09:48, Chandan Babu R wrote:
> On 28 Jul 2021 at 08:45, Chandan Babu R wrote:
>> On 28 Jul 2021 at 03:33, Darrick J. Wong wrote:
>>> On Tue, Jul 27, 2021 at 02:56:11PM -0700, Darrick J. Wong wrote:
>>>> On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
>>>> > In preparation for introducing larger extent count limits, this commit renames
>>>> > existing extent count limits based on their signedness and width.
>>>> > 
>>>> > Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
>>>> > ---
>>>> >  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
>>>> >  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
>>>> >  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
>>>> >  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
>>>> >  fs/xfs/scrub/inode_repair.c    | 2 +-
>>>> >  5 files changed, 11 insertions(+), 10 deletions(-)
>>>> > 
>>>> > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
>>>> > index f3c9a0ebb0a5..8f262405a5b5 100644
>>>> > --- a/fs/xfs/libxfs/xfs_bmap.c
>>>> > +++ b/fs/xfs/libxfs/xfs_bmap.c
>>>> > @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
>>>> >  	 * available.
>>>> >  	 */
>>>> >  	if (whichfork == XFS_DATA_FORK) {
>>>> > -		maxleafents = MAXEXTNUM;
>>>> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
>>>> 
>>>> I'm not in love with these names, since they tell me roughly about the
>>>> size of the constant (which I could glean from the definition) but less
>>>> about when I would expect to find them.  How about:
>>>> 
>>>> #define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
>>>> #define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)
>>>
>>> Or, given that 'DFORK' already means 'ondisk fork', how about:
>>>
>>> XFS_MAX_DATA_NEXTENTS
>>> XFS_MAX_ATTR_NEXTENTS
>>
>> Yes, I agree. These names are better. I will incorporate your suggestions
>> before posting V3.
>>
>
> Using XFS_MAX_[ATTR|DATA]_NEXTENTS won't be feasible later in the patch series
> since the maximum extent count for the two inode forks depend on whether
> XFS_SB_FEAT_INCOMPAT_NREXT64 feature bit is set or not. With the incompat
> feature bit set, extent counts for attr and data forks can have maximum values
> of (2^32 - 1) and (2^48 - 1) respectively. With the incompat feature bit not
> set, extent counts for attr and data forks can have maximum values of (2^15 -
> 1) and (2^31 - 1) respectively.
>
> Also, xfs_iext_max_nextents() (an inline function introduced in the next patch
> in this series) abstracts away the logic of determining the maximum extent
> count for an inode fork.

I think introducing xfs_iext_max_nextents() before renaming the max extent
counter macros would reduce proliferation of XFS_IFORK_EXTCNT_MAX* macros
across the source code. If you are ok with it, I will reorder the current
patch and the next patch.
Darrick J. Wong Aug. 23, 2021, 6:16 p.m. UTC | #6
On Mon, Aug 23, 2021 at 12:47:43PM +0530, Chandan Babu R wrote:
> On 23 Aug 2021 at 09:48, Chandan Babu R wrote:
> > On 28 Jul 2021 at 08:45, Chandan Babu R wrote:
> >> On 28 Jul 2021 at 03:33, Darrick J. Wong wrote:
> >>> On Tue, Jul 27, 2021 at 02:56:11PM -0700, Darrick J. Wong wrote:
> >>>> On Mon, Jul 26, 2021 at 05:15:31PM +0530, Chandan Babu R wrote:
> >>>> > In preparation for introducing larger extent count limits, this commit renames
> >>>> > existing extent count limits based on their signedness and width.
> >>>> > 
> >>>> > Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
> >>>> > ---
> >>>> >  fs/xfs/libxfs/xfs_bmap.c       | 4 ++--
> >>>> >  fs/xfs/libxfs/xfs_format.h     | 8 ++++----
> >>>> >  fs/xfs/libxfs/xfs_inode_buf.c  | 4 ++--
> >>>> >  fs/xfs/libxfs/xfs_inode_fork.c | 3 ++-
> >>>> >  fs/xfs/scrub/inode_repair.c    | 2 +-
> >>>> >  5 files changed, 11 insertions(+), 10 deletions(-)
> >>>> > 
> >>>> > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> >>>> > index f3c9a0ebb0a5..8f262405a5b5 100644
> >>>> > --- a/fs/xfs/libxfs/xfs_bmap.c
> >>>> > +++ b/fs/xfs/libxfs/xfs_bmap.c
> >>>> > @@ -76,10 +76,10 @@ xfs_bmap_compute_maxlevels(
> >>>> >  	 * available.
> >>>> >  	 */
> >>>> >  	if (whichfork == XFS_DATA_FORK) {
> >>>> > -		maxleafents = MAXEXTNUM;
> >>>> > +		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
> >>>> 
> >>>> I'm not in love with these names, since they tell me roughly about the
> >>>> size of the constant (which I could glean from the definition) but less
> >>>> about when I would expect to find them.  How about:
> >>>> 
> >>>> #define XFS_MAX_DFORK_NEXTENTS    ((xfs_extnum_t) 0x7FFFFFFF)
> >>>> #define XFS_MAX_AFORK_NEXTENTS    ((xfs_aextnum_t)0x00007FFF)
> >>>
> >>> Or, given that 'DFORK' already means 'ondisk fork', how about:
> >>>
> >>> XFS_MAX_DATA_NEXTENTS
> >>> XFS_MAX_ATTR_NEXTENTS
> >>
> >> Yes, I agree. These names are better. I will incorporate your suggestions
> >> before posting V3.
> >>
> >
> > Using XFS_MAX_[ATTR|DATA]_NEXTENTS won't be feasible later in the patch series
> > since the maximum extent count for the two inode forks depend on whether
> > XFS_SB_FEAT_INCOMPAT_NREXT64 feature bit is set or not. With the incompat
> > feature bit set, extent counts for attr and data forks can have maximum values
> > of (2^32 - 1) and (2^48 - 1) respectively. With the incompat feature bit not
> > set, extent counts for attr and data forks can have maximum values of (2^15 -
> > 1) and (2^31 - 1) respectively.
> >
> > Also, xfs_iext_max_nextents() (an inline function introduced in the next patch
> > in this series) abstracts away the logic of determining the maximum extent
> > count for an inode fork.
> 
> I think introducing xfs_iext_max_nextents() before renaming the max extent
> counter macros would reduce proliferation of XFS_IFORK_EXTCNT_MAX* macros
> across the source code. If you are ok with it, I will reorder the current
> patch and the next patch.

Sounds good to me. :)

--D

> -- 
> chandan
diff mbox series

Patch

diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index f3c9a0ebb0a5..8f262405a5b5 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -76,10 +76,10 @@  xfs_bmap_compute_maxlevels(
 	 * available.
 	 */
 	if (whichfork == XFS_DATA_FORK) {
-		maxleafents = MAXEXTNUM;
+		maxleafents = XFS_IFORK_EXTCNT_MAXS32;
 		sz = xfs_bmdr_space_calc(MINDBTPTRS);
 	} else {
-		maxleafents = MAXAEXTNUM;
+		maxleafents = XFS_IFORK_EXTCNT_MAXS16;
 		sz = xfs_bmdr_space_calc(MINABTPTRS);
 	}
 	maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
index 37cca918d2ba..920e3f9c418f 100644
--- a/fs/xfs/libxfs/xfs_format.h
+++ b/fs/xfs/libxfs/xfs_format.h
@@ -1110,11 +1110,11 @@  enum xfs_dinode_fmt {
 	{ XFS_DINODE_FMT_UUID,		"uuid" }
 
 /*
- * Max values for extlen, extnum, aextnum.
+ * Max values for extlen and disk inode's extent counters.
  */
-#define	MAXEXTLEN	((uint32_t)0x001fffff)	/* 21 bits */
-#define	MAXEXTNUM	((int32_t)0x7fffffff)	/* signed int */
-#define	MAXAEXTNUM	((int16_t)0x7fff)	/* signed short */
+#define	MAXEXTLEN		((uint32_t)0x1fffff) /* 21 bits */
+#define XFS_IFORK_EXTCNT_MAXS32 ((int32_t)0x7fffffff)  /* Signed 32-bits */
+#define XFS_IFORK_EXTCNT_MAXS16 ((int16_t)0x7fff)      /* Signed 16-bits */
 
 /*
  * Inode minimum and maximum sizes.
diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
index 5625df1ddd95..66d13e8fa420 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.c
+++ b/fs/xfs/libxfs/xfs_inode_buf.c
@@ -365,9 +365,9 @@  xfs_dinode_verify_fork(
 		break;
 	case XFS_DINODE_FMT_BTREE:
 		if (whichfork == XFS_ATTR_FORK) {
-			if (di_nextents > MAXAEXTNUM)
+			if (di_nextents > XFS_IFORK_EXTCNT_MAXS16)
 				return __this_address;
-		} else if (di_nextents > MAXEXTNUM) {
+		} else if (di_nextents > XFS_IFORK_EXTCNT_MAXS32) {
 			return __this_address;
 		}
 		break;
diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
index 801a6f7dbd0c..6f4b14d3d381 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.c
+++ b/fs/xfs/libxfs/xfs_inode_fork.c
@@ -736,7 +736,8 @@  xfs_iext_count_may_overflow(
 	if (whichfork == XFS_COW_FORK)
 		return 0;
 
-	max_exts = (whichfork == XFS_ATTR_FORK) ? MAXAEXTNUM : MAXEXTNUM;
+	max_exts = (whichfork == XFS_ATTR_FORK) ?
+		XFS_IFORK_EXTCNT_MAXS16 : XFS_IFORK_EXTCNT_MAXS32;
 
 	if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
 		max_exts = 10;
diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c
index a80cd633fe59..c44f8d06939b 100644
--- a/fs/xfs/scrub/inode_repair.c
+++ b/fs/xfs/scrub/inode_repair.c
@@ -1198,7 +1198,7 @@  xrep_inode_blockcounts(
 			return error;
 		if (count >= sc->mp->m_sb.sb_dblocks)
 			return -EFSCORRUPTED;
-		if (nextents >= MAXAEXTNUM)
+		if (nextents >= XFS_IFORK_EXTCNT_MAXS16)
 			return -EFSCORRUPTED;
 		ifp->if_nextents = nextents;
 	} else {