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