Commit 9feb8f19 authored by Chandan Babu R's avatar Chandan Babu R

xfs: Introduce xfs_iext_max_nextents() helper

xfs_iext_max_nextents() returns the maximum number of extents possible for one
of data, cow or attribute fork. This helper will be extended further in a
future commit when maximum extent counts associated with data/attribute forks
are increased.
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarChandan Babu R <chandan.babu@oracle.com>
parent 95f0b95e
...@@ -74,13 +74,12 @@ xfs_bmap_compute_maxlevels( ...@@ -74,13 +74,12 @@ xfs_bmap_compute_maxlevels(
* ATTR2 we have to assume the worst case scenario of a minimum size * ATTR2 we have to assume the worst case scenario of a minimum size
* available. * available.
*/ */
if (whichfork == XFS_DATA_FORK) { maxleafents = xfs_iext_max_nextents(whichfork);
maxleafents = MAXEXTNUM; if (whichfork == XFS_DATA_FORK)
sz = XFS_BMDR_SPACE_CALC(MINDBTPTRS); sz = XFS_BMDR_SPACE_CALC(MINDBTPTRS);
} else { else
maxleafents = MAXAEXTNUM;
sz = XFS_BMDR_SPACE_CALC(MINABTPTRS); sz = XFS_BMDR_SPACE_CALC(MINABTPTRS);
}
maxrootrecs = xfs_bmdr_maxrecs(sz, 0); maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
minleafrecs = mp->m_bmap_dmnr[0]; minleafrecs = mp->m_bmap_dmnr[0];
minnoderecs = mp->m_bmap_dmnr[1]; minnoderecs = mp->m_bmap_dmnr[1];
......
...@@ -337,6 +337,7 @@ xfs_dinode_verify_fork( ...@@ -337,6 +337,7 @@ xfs_dinode_verify_fork(
int whichfork) int whichfork)
{ {
uint32_t di_nextents = XFS_DFORK_NEXTENTS(dip, whichfork); uint32_t di_nextents = XFS_DFORK_NEXTENTS(dip, whichfork);
xfs_extnum_t max_extents;
switch (XFS_DFORK_FORMAT(dip, whichfork)) { switch (XFS_DFORK_FORMAT(dip, whichfork)) {
case XFS_DINODE_FMT_LOCAL: case XFS_DINODE_FMT_LOCAL:
...@@ -358,12 +359,9 @@ xfs_dinode_verify_fork( ...@@ -358,12 +359,9 @@ xfs_dinode_verify_fork(
return __this_address; return __this_address;
break; break;
case XFS_DINODE_FMT_BTREE: case XFS_DINODE_FMT_BTREE:
if (whichfork == XFS_ATTR_FORK) { max_extents = xfs_iext_max_nextents(whichfork);
if (di_nextents > MAXAEXTNUM) if (di_nextents > max_extents)
return __this_address; return __this_address;
} else if (di_nextents > MAXEXTNUM) {
return __this_address;
}
break; break;
default: default:
return __this_address; return __this_address;
......
...@@ -744,7 +744,7 @@ xfs_iext_count_may_overflow( ...@@ -744,7 +744,7 @@ xfs_iext_count_may_overflow(
if (whichfork == XFS_COW_FORK) if (whichfork == XFS_COW_FORK)
return 0; return 0;
max_exts = (whichfork == XFS_ATTR_FORK) ? MAXAEXTNUM : MAXEXTNUM; max_exts = xfs_iext_max_nextents(whichfork);
if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS)) if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
max_exts = 10; max_exts = 10;
......
...@@ -133,6 +133,14 @@ static inline int8_t xfs_ifork_format(struct xfs_ifork *ifp) ...@@ -133,6 +133,14 @@ static inline int8_t xfs_ifork_format(struct xfs_ifork *ifp)
return ifp->if_format; return ifp->if_format;
} }
static inline xfs_extnum_t xfs_iext_max_nextents(int whichfork)
{
if (whichfork == XFS_DATA_FORK || whichfork == XFS_COW_FORK)
return MAXEXTNUM;
return MAXAEXTNUM;
}
struct xfs_ifork *xfs_ifork_alloc(enum xfs_dinode_fmt format, struct xfs_ifork *xfs_ifork_alloc(enum xfs_dinode_fmt format,
xfs_extnum_t nextents); xfs_extnum_t nextents);
struct xfs_ifork *xfs_iext_state_to_fork(struct xfs_inode *ip, int state); struct xfs_ifork *xfs_iext_state_to_fork(struct xfs_inode *ip, int state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment