* Re: [PATCH 2/2] xfs: provide helper for counting extents from if_bytes
2016-11-05 2:27 ` [PATCH 2/2] xfs: provide helper for counting extents from if_bytes Eric Sandeen
@ 2016-11-06 22:02 ` Dave Chinner
2016-11-07 16:45 ` Eric Sandeen
2016-11-07 14:58 ` Brian Foster
2016-11-07 17:35 ` [PATCH 2/2 V2] " Eric Sandeen
2 siblings, 1 reply; 9+ messages in thread
From: Dave Chinner @ 2016-11-06 22:02 UTC (permalink / raw)
To: Eric Sandeen; +Cc: Eric Sandeen, linux-xfs
On Fri, Nov 04, 2016 at 09:27:18PM -0500, Eric Sandeen wrote:
> The open-coded pattern:
>
> ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)
>
> is all over the xfs code; provide a new helper
> xfs_iext_count(ifp) to count the number of inline extents
> in an inode fork.
....
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> index 5dd56d3..a9e4904 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.c
> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> @@ -775,6 +775,16 @@
> }
> }
>
> +/* Count number of inline extents based on if_bytes */
> +xfs_extnum_t
> +xfs_iext_count(struct xfs_ifork *ifp)
> +{
> + xfs_extnum_t nextents;
> +
> + nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + return nextents;
> +}
Why not just "return ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);"?
Otherwise looks good - a needed cleanup.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH 2/2] xfs: provide helper for counting extents from if_bytes
2016-11-06 22:02 ` Dave Chinner
@ 2016-11-07 16:45 ` Eric Sandeen
0 siblings, 0 replies; 9+ messages in thread
From: Eric Sandeen @ 2016-11-07 16:45 UTC (permalink / raw)
To: Dave Chinner; +Cc: Eric Sandeen, linux-xfs
On 11/6/16 4:02 PM, Dave Chinner wrote:
> On Fri, Nov 04, 2016 at 09:27:18PM -0500, Eric Sandeen wrote:
>> The open-coded pattern:
>>
>> ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)
>>
>> is all over the xfs code; provide a new helper
>> xfs_iext_count(ifp) to count the number of inline extents
>> in an inode fork.
> ....
>> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
>> index 5dd56d3..a9e4904 100644
>> --- a/fs/xfs/libxfs/xfs_inode_fork.c
>> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
>> @@ -775,6 +775,16 @@
>> }
>> }
>>
>> +/* Count number of inline extents based on if_bytes */
>> +xfs_extnum_t
>> +xfs_iext_count(struct xfs_ifork *ifp)
>> +{
>> + xfs_extnum_t nextents;
>> +
>> + nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
>> + return nextents;
>> +}
>
> Why not just "return ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);"?
No real reason -I started that way and for some reason it seemed more
cryptic and less self-documenting, but can't put my finger on why. ;)
Happy to send V2 if that's what's preferred.
-Eric
> Otherwise looks good - a needed cleanup.
>
> Cheers,
>
> Dave.
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] xfs: provide helper for counting extents from if_bytes
2016-11-05 2:27 ` [PATCH 2/2] xfs: provide helper for counting extents from if_bytes Eric Sandeen
2016-11-06 22:02 ` Dave Chinner
@ 2016-11-07 14:58 ` Brian Foster
2016-11-07 17:35 ` [PATCH 2/2 V2] " Eric Sandeen
2 siblings, 0 replies; 9+ messages in thread
From: Brian Foster @ 2016-11-07 14:58 UTC (permalink / raw)
To: Eric Sandeen; +Cc: Eric Sandeen, linux-xfs
On Fri, Nov 04, 2016 at 09:27:18PM -0500, Eric Sandeen wrote:
> The open-coded pattern:
>
> ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)
>
> is all over the xfs code; provide a new helper
> xfs_iext_count(ifp) to count the number of inline extents
> in an inode fork.
>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
Dave's comment aside:
Reviewed-by: Brian Foster <bfoster@redhat.com>
>
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index c27344c..03e62be 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -515,7 +515,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> state |= BMAP_ATTRFORK;
>
> ifp = XFS_IFORK_PTR(ip, whichfork);
> - ASSERT(cnt == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)));
> + ASSERT(cnt == xfs_iext_count(ifp));
> for (idx = 0; idx < cnt; idx++)
> trace_xfs_extlist(ip, idx, whichfork, caller_ip);
> }
> @@ -811,7 +811,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> XFS_BTREE_LONG_PTRS);
>
> arp = XFS_BMBT_REC_ADDR(mp, ablock, 1);
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> for (cnt = i = 0; i < nextents; i++) {
> ep = xfs_iext_get_ext(ifp, i);
> if (!isnullstartblock(xfs_bmbt_get_startblock(ep))) {
> @@ -1296,7 +1296,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> /*
> * Here with bp and block set to the leftmost leaf node in the tree.
> */
> - room = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + room = xfs_iext_count(ifp);
> i = 0;
> /*
> * Loop over all leaf nodes. Copy information to the extent records.
> @@ -1361,7 +1361,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> return error;
> block = XFS_BUF_TO_BLOCK(bp);
> }
> - ASSERT(i == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)));
> + ASSERT(i == xfs_iext_count(ifp));
> ASSERT(i == XFS_IFORK_NEXTENTS(ip, whichfork));
> XFS_BMAP_TRACE_EXLIST(ip, i, whichfork);
> return 0;
> @@ -1404,7 +1404,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> if (lastx > 0) {
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx - 1), prevp);
> }
> - if (lastx < (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))) {
> + if (lastx < xfs_iext_count(ifp)) {
> xfs_bmbt_get_all(ep, gotp);
> *eofp = 0;
> } else {
> @@ -1497,7 +1497,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> (error = xfs_iread_extents(tp, ip, whichfork)))
> return error;
> lowest = *first_unused;
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> for (idx = 0, lastaddr = 0, max = lowest; idx < nextents; idx++) {
> xfs_bmbt_rec_host_t *ep = xfs_iext_get_ext(ifp, idx);
> off = xfs_bmbt_get_startoff(ep);
> @@ -1582,7 +1582,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> return error;
> }
>
> - nextents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> if (nextents == 0) {
> *is_empty = 1;
> return 0;
> @@ -1794,7 +1794,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * Don't set contiguous if the combined extent would be too large.
> * Also check for all-three-contiguous being too large.
> */
> - if (bma->idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t) - 1) {
> + if (bma->idx < xfs_iext_count(ifp) - 1) {
> state |= BMAP_RIGHT_VALID;
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx + 1), &RIGHT);
>
> @@ -2356,7 +2356,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * Don't set contiguous if the combined extent would be too large.
> * Also check for all-three-contiguous being too large.
> */
> - if (*idx < ip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t) - 1) {
> + if (*idx < xfs_iext_count(&ip->i_df) - 1) {
> state |= BMAP_RIGHT_VALID;
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *idx + 1), &RIGHT);
> if (isnullstartblock(RIGHT.br_startblock))
> @@ -2836,7 +2836,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * Check and set flags if the current (right) segment exists.
> * If it doesn't exist, we're converting the hole at end-of-file.
> */
> - if (*idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)) {
> + if (*idx < xfs_iext_count(ifp)) {
> state |= BMAP_RIGHT_VALID;
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *idx), &right);
>
> @@ -2992,7 +2992,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * Check and set flags if this segment has a current value.
> * Not true if we're inserting into the "hole" at eof.
> */
> - if (bma->idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)) {
> + if (bma->idx < xfs_iext_count(ifp)) {
> state |= BMAP_RIGHT_VALID;
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &right);
> if (isnullstartblock(right.br_startblock))
> @@ -4191,7 +4191,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> break;
>
> /* Else go on to the next record. */
> - if (++lastx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
> + if (++lastx < xfs_iext_count(ifp))
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx), &got);
> else
> eof = 1;
> @@ -4703,7 +4703,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
>
> /* Else go on to the next record. */
> bma.prev = bma.got;
> - if (++bma.idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t)) {
> + if (++bma.idx < xfs_iext_count(ifp)) {
> xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma.idx),
> &bma.got);
> } else
> @@ -4876,8 +4876,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> state |= BMAP_COWFORK;
>
> ifp = XFS_IFORK_PTR(ip, whichfork);
> - ASSERT((*idx >= 0) && (*idx < ifp->if_bytes /
> - (uint)sizeof(xfs_bmbt_rec_t)));
> + ASSERT((*idx >= 0) && (*idx < xfs_iext_count(ifp)));
> ASSERT(del->br_blockcount > 0);
> ep = xfs_iext_get_ext(ifp, *idx);
> xfs_bmbt_get_all(ep, &got);
> @@ -5205,8 +5204,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> &eidx, &got, &new);
>
> ifp = XFS_IFORK_PTR(ip, XFS_COW_FORK); ifp = ifp;
> - ASSERT((eidx >= 0) && (eidx < ifp->if_bytes /
> - (uint)sizeof(xfs_bmbt_rec_t)));
> + ASSERT((eidx >= 0) && (eidx < xfs_iext_count(ifp)));
> ASSERT(del->br_blockcount > 0);
> ASSERT(got.br_startoff <= del->br_startoff);
> del_endoff = del->br_startoff + del->br_blockcount;
> @@ -5371,7 +5369,6 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> int logflags; /* transaction logging flags */
> xfs_extlen_t mod; /* rt extent offset */
> xfs_mount_t *mp; /* mount structure */
> - xfs_extnum_t nextents; /* number of file extents */
> xfs_bmbt_irec_t prev; /* previous extent record */
> xfs_fileoff_t start; /* first file offset deleted */
> int tmp_logflags; /* partial logging flags */
> @@ -5403,8 +5400,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> if (!(ifp->if_flags & XFS_IFEXTENTS) &&
> (error = xfs_iread_extents(tp, ip, whichfork)))
> return error;
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> - if (nextents == 0) {
> + if (xfs_iext_count(ifp) == 0) {
> *rlen = 0;
> return 0;
> }
> @@ -5889,7 +5885,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
>
> mp = ip->i_mount;
> ifp = XFS_IFORK_PTR(ip, whichfork);
> - total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
> + total_extents = xfs_iext_count(ifp);
>
> xfs_bmbt_get_all(gotp, &got);
>
> @@ -6066,7 +6062,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * are collapsing out, so we cannot use the count of real extents here.
> * Instead we have to calculate it from the incore fork.
> */
> - total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
> + total_extents = xfs_iext_count(ifp);
> if (total_extents == 0) {
> *done = 1;
> goto del_cursor;
> @@ -6126,7 +6122,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
> * count can change. Update the total and grade the next record.
> */
> if (direction == SHIFT_LEFT) {
> - total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
> + total_extents = xfs_iext_count(ifp);
> stop_extent = total_extents;
> }
>
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> index 5dd56d3..a9e4904 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.c
> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> @@ -775,6 +775,16 @@
> }
> }
>
> +/* Count number of inline extents based on if_bytes */
> +xfs_extnum_t
> +xfs_iext_count(struct xfs_ifork *ifp)
> +{
> + xfs_extnum_t nextents;
> +
> + nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + return nextents;
> +}
> +
> /*
> * Convert in-core extents to on-disk form
> *
> @@ -803,7 +813,7 @@
> ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED));
> ASSERT(ifp->if_bytes > 0);
>
> - nrecs = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nrecs = xfs_iext_count(ifp);
> XFS_BMAP_TRACE_EXLIST(ip, nrecs, whichfork);
> ASSERT(nrecs > 0);
>
> @@ -941,7 +951,7 @@
> xfs_extnum_t idx) /* index of target extent */
> {
> ASSERT(idx >= 0);
> - ASSERT(idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t));
> + ASSERT(idx < xfs_iext_count(ifp));
>
> if ((ifp->if_flags & XFS_IFEXTIREC) && (idx == 0)) {
> return ifp->if_u1.if_ext_irec->er_extbuf;
> @@ -1017,7 +1027,7 @@ struct xfs_ifork *
> int new_size; /* size of extents after adding */
> xfs_extnum_t nextents; /* number of extents in file */
>
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> ASSERT((idx >= 0) && (idx <= nextents));
> byte_diff = ext_diff * sizeof(xfs_bmbt_rec_t);
> new_size = ifp->if_bytes + byte_diff;
> @@ -1241,7 +1251,7 @@ struct xfs_ifork *
> trace_xfs_iext_remove(ip, idx, state, _RET_IP_);
>
> ASSERT(ext_diff > 0);
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> new_size = (nextents - ext_diff) * sizeof(xfs_bmbt_rec_t);
>
> if (new_size == 0) {
> @@ -1270,7 +1280,7 @@ struct xfs_ifork *
>
> ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
> ASSERT(idx < XFS_INLINE_EXTS);
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> ASSERT(((nextents - ext_diff) > 0) &&
> (nextents - ext_diff) < XFS_INLINE_EXTS);
>
> @@ -1309,7 +1319,7 @@ struct xfs_ifork *
> ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
> new_size = ifp->if_bytes -
> (ext_diff * sizeof(xfs_bmbt_rec_t));
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
>
> if (new_size == 0) {
> xfs_iext_destroy(ifp);
> @@ -1546,7 +1556,7 @@ struct xfs_ifork *
> int size; /* size of file extents */
>
> ASSERT(ifp->if_flags & XFS_IFEXTIREC);
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> ASSERT(nextents <= XFS_LINEAR_EXTS);
> size = nextents * sizeof(xfs_bmbt_rec_t);
>
> @@ -1620,7 +1630,7 @@ struct xfs_ifork *
> xfs_extnum_t nextents; /* number of file extents */
> xfs_fileoff_t startoff = 0; /* start offset of extent */
>
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> if (nextents == 0) {
> *idxp = 0;
> return NULL;
> @@ -1733,8 +1743,8 @@ struct xfs_ifork *
>
> ASSERT(ifp->if_flags & XFS_IFEXTIREC);
> ASSERT(page_idx >= 0);
> - ASSERT(page_idx <= ifp->if_bytes / sizeof(xfs_bmbt_rec_t));
> - ASSERT(page_idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t) || realloc);
> + ASSERT(page_idx <= xfs_iext_count(ifp));
> + ASSERT(page_idx < xfs_iext_count(ifp) || realloc);
>
> nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ;
> erp_idx = 0;
> @@ -1782,7 +1792,7 @@ struct xfs_ifork *
> xfs_extnum_t nextents; /* number of extents in file */
>
> ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> ASSERT(nextents <= XFS_LINEAR_EXTS);
>
> erp = kmem_alloc(sizeof(xfs_ext_irec_t), KM_NOFS);
> @@ -1906,7 +1916,7 @@ struct xfs_ifork *
>
> ASSERT(ifp->if_flags & XFS_IFEXTIREC);
> nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ;
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
>
> if (nextents == 0) {
> xfs_iext_destroy(ifp);
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h
> index c9476f5..8bf112e 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.h
> +++ b/fs/xfs/libxfs/xfs_inode_fork.h
> @@ -152,6 +152,7 @@ int xfs_iextents_copy(struct xfs_inode *, struct xfs_bmbt_rec *,
>
> struct xfs_bmbt_rec_host *
> xfs_iext_get_ext(struct xfs_ifork *, xfs_extnum_t);
> +xfs_extnum_t xfs_iext_count(struct xfs_ifork *);
> void xfs_iext_insert(struct xfs_inode *, xfs_extnum_t, xfs_extnum_t,
> struct xfs_bmbt_irec *, int);
> void xfs_iext_add(struct xfs_ifork *, xfs_extnum_t, int);
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index 47074e0..35f0bd1 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -359,9 +359,7 @@
> mp = ip->i_mount;
> ifp = XFS_IFORK_PTR(ip, whichfork);
> if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) {
> - xfs_bmap_count_leaves(ifp, 0,
> - ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t),
> - count);
> + xfs_bmap_count_leaves(ifp, 0, xfs_iext_count(ifp), count);
> return 0;
> }
>
> @@ -426,7 +424,7 @@
> ifp = XFS_IFORK_PTR(ip, whichfork);
> if (!moretocome &&
> xfs_iext_bno_to_ext(ifp, fileblock, &lastx) &&
> - (lastx == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))-1))
> + (lastx == xfs_iext_count(ifp) - 1))
> out->bmv_oflags |= BMV_OF_LAST;
> }
>
> @@ -1882,7 +1880,7 @@
> * pointer. Otherwise it's already NULL or
> * pointing to the extent.
> */
> - nextents = ip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(&ip->i_df);
> if (nextents <= XFS_INLINE_EXTS) {
> ifp->if_u1.if_extents =
> ifp->if_u2.if_inline_ext;
> @@ -1902,7 +1900,7 @@
> * pointer. Otherwise it's already NULL or
> * pointing to the extent.
> */
> - nextents = tip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(&tip->i_df);
> if (nextents <= XFS_INLINE_EXTS) {
> tifp->if_u1.if_extents =
> tifp->if_u2.if_inline_ext;
> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
> index 9610e9c..d90e781 100644
> --- a/fs/xfs/xfs_inode_item.c
> +++ b/fs/xfs/xfs_inode_item.c
> @@ -164,7 +164,7 @@
> struct xfs_bmbt_rec *p;
>
> ASSERT(ip->i_df.if_u1.if_extents != NULL);
> - ASSERT(ip->i_df.if_bytes / sizeof(xfs_bmbt_rec_t) > 0);
> + ASSERT(xfs_iext_count(&ip->i_df) > 0);
>
> p = xlog_prepare_iovec(lv, vecp, XLOG_REG_TYPE_IEXT);
> data_bytes = xfs_iextents_copy(ip, p, XFS_DATA_FORK);
> @@ -261,7 +261,7 @@
> ip->i_afp->if_bytes > 0) {
> struct xfs_bmbt_rec *p;
>
> - ASSERT(ip->i_afp->if_bytes / sizeof(xfs_bmbt_rec_t) ==
> + ASSERT(xfs_iext_count(ip->i_afp) ==
> ip->i_d.di_anextents);
> ASSERT(ip->i_afp->if_u1.if_extents != NULL);
>
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index c245bed..a391975 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -910,16 +910,14 @@ struct dentry *
> if (attr) {
> if (ip->i_afp) {
> if (ip->i_afp->if_flags & XFS_IFEXTENTS)
> - fa.fsx_nextents = ip->i_afp->if_bytes /
> - sizeof(xfs_bmbt_rec_t);
> + fa.fsx_nextents = xfs_iext_count(ip->i_afp);
> else
> fa.fsx_nextents = ip->i_d.di_anextents;
> } else
> fa.fsx_nextents = 0;
> } else {
> if (ip->i_df.if_flags & XFS_IFEXTENTS)
> - fa.fsx_nextents = ip->i_df.if_bytes /
> - sizeof(xfs_bmbt_rec_t);
> + fa.fsx_nextents = xfs_iext_count(&ip->i_df);
> else
> fa.fsx_nextents = ip->i_d.di_nextents;
> }
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index a60d9e2..45e50ea 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -1135,7 +1135,7 @@ struct xfs_qm_isolate {
> return error;
> }
> rtblks = 0;
> - nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
> + nextents = xfs_iext_count(ifp);
> for (idx = 0; idx < nextents; idx++)
> rtblks += xfs_bmbt_get_blockcount(xfs_iext_get_ext(ifp, idx));
> *O_rtblks = (xfs_qcnt_t)rtblks;
> diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
> index 5965e94..63c9e82 100644
> --- a/fs/xfs/xfs_reflink.c
> +++ b/fs/xfs/xfs_reflink.c
> @@ -511,7 +511,7 @@
> /* This is the extent before; try sliding up one. */
> if (irec.br_startoff < offset_fsb) {
> idx++;
> - if (idx >= ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
> + if (idx >= xfs_iext_count(ifp))
> return 0;
> gotp = xfs_iext_get_ext(ifp, idx);
> xfs_bmbt_get_all(gotp, &irec);
> @@ -1679,7 +1679,7 @@
>
> /* Roll on... */
> idx++;
> - if (idx >= ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
> + if (idx >= xfs_iext_count(ifp))
> break;
> gotp = xfs_iext_get_ext(ifp, idx);
> }
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 2/2 V2] xfs: provide helper for counting extents from if_bytes
2016-11-05 2:27 ` [PATCH 2/2] xfs: provide helper for counting extents from if_bytes Eric Sandeen
2016-11-06 22:02 ` Dave Chinner
2016-11-07 14:58 ` Brian Foster
@ 2016-11-07 17:35 ` Eric Sandeen
2 siblings, 0 replies; 9+ messages in thread
From: Eric Sandeen @ 2016-11-07 17:35 UTC (permalink / raw)
To: Eric Sandeen, linux-xfs
The open-coded pattern:
ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)
is all over the xfs code; provide a new helper
xfs_iext_count(ifp) to count the number of inline extents
in an inode fork.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
---
V2: remove intermediate variable in helper
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index c27344c..03e62be 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -515,7 +515,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
state |= BMAP_ATTRFORK;
ifp = XFS_IFORK_PTR(ip, whichfork);
- ASSERT(cnt == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)));
+ ASSERT(cnt == xfs_iext_count(ifp));
for (idx = 0; idx < cnt; idx++)
trace_xfs_extlist(ip, idx, whichfork, caller_ip);
}
@@ -811,7 +811,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
XFS_BTREE_LONG_PTRS);
arp = XFS_BMBT_REC_ADDR(mp, ablock, 1);
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
for (cnt = i = 0; i < nextents; i++) {
ep = xfs_iext_get_ext(ifp, i);
if (!isnullstartblock(xfs_bmbt_get_startblock(ep))) {
@@ -1296,7 +1296,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
/*
* Here with bp and block set to the leftmost leaf node in the tree.
*/
- room = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ room = xfs_iext_count(ifp);
i = 0;
/*
* Loop over all leaf nodes. Copy information to the extent records.
@@ -1361,7 +1361,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
return error;
block = XFS_BUF_TO_BLOCK(bp);
}
- ASSERT(i == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)));
+ ASSERT(i == xfs_iext_count(ifp));
ASSERT(i == XFS_IFORK_NEXTENTS(ip, whichfork));
XFS_BMAP_TRACE_EXLIST(ip, i, whichfork);
return 0;
@@ -1404,7 +1404,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
if (lastx > 0) {
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx - 1), prevp);
}
- if (lastx < (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))) {
+ if (lastx < xfs_iext_count(ifp)) {
xfs_bmbt_get_all(ep, gotp);
*eofp = 0;
} else {
@@ -1497,7 +1497,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
(error = xfs_iread_extents(tp, ip, whichfork)))
return error;
lowest = *first_unused;
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
for (idx = 0, lastaddr = 0, max = lowest; idx < nextents; idx++) {
xfs_bmbt_rec_host_t *ep = xfs_iext_get_ext(ifp, idx);
off = xfs_bmbt_get_startoff(ep);
@@ -1582,7 +1582,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
return error;
}
- nextents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
if (nextents == 0) {
*is_empty = 1;
return 0;
@@ -1794,7 +1794,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* Don't set contiguous if the combined extent would be too large.
* Also check for all-three-contiguous being too large.
*/
- if (bma->idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t) - 1) {
+ if (bma->idx < xfs_iext_count(ifp) - 1) {
state |= BMAP_RIGHT_VALID;
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx + 1), &RIGHT);
@@ -2356,7 +2356,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* Don't set contiguous if the combined extent would be too large.
* Also check for all-three-contiguous being too large.
*/
- if (*idx < ip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t) - 1) {
+ if (*idx < xfs_iext_count(&ip->i_df) - 1) {
state |= BMAP_RIGHT_VALID;
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *idx + 1), &RIGHT);
if (isnullstartblock(RIGHT.br_startblock))
@@ -2836,7 +2836,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* Check and set flags if the current (right) segment exists.
* If it doesn't exist, we're converting the hole at end-of-file.
*/
- if (*idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)) {
+ if (*idx < xfs_iext_count(ifp)) {
state |= BMAP_RIGHT_VALID;
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *idx), &right);
@@ -2992,7 +2992,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* Check and set flags if this segment has a current value.
* Not true if we're inserting into the "hole" at eof.
*/
- if (bma->idx < ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t)) {
+ if (bma->idx < xfs_iext_count(ifp)) {
state |= BMAP_RIGHT_VALID;
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &right);
if (isnullstartblock(right.br_startblock))
@@ -4191,7 +4191,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
break;
/* Else go on to the next record. */
- if (++lastx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
+ if (++lastx < xfs_iext_count(ifp))
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx), &got);
else
eof = 1;
@@ -4703,7 +4703,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
/* Else go on to the next record. */
bma.prev = bma.got;
- if (++bma.idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t)) {
+ if (++bma.idx < xfs_iext_count(ifp)) {
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma.idx),
&bma.got);
} else
@@ -4876,8 +4876,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
state |= BMAP_COWFORK;
ifp = XFS_IFORK_PTR(ip, whichfork);
- ASSERT((*idx >= 0) && (*idx < ifp->if_bytes /
- (uint)sizeof(xfs_bmbt_rec_t)));
+ ASSERT((*idx >= 0) && (*idx < xfs_iext_count(ifp)));
ASSERT(del->br_blockcount > 0);
ep = xfs_iext_get_ext(ifp, *idx);
xfs_bmbt_get_all(ep, &got);
@@ -5205,8 +5204,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
&eidx, &got, &new);
ifp = XFS_IFORK_PTR(ip, XFS_COW_FORK); ifp = ifp;
- ASSERT((eidx >= 0) && (eidx < ifp->if_bytes /
- (uint)sizeof(xfs_bmbt_rec_t)));
+ ASSERT((eidx >= 0) && (eidx < xfs_iext_count(ifp)));
ASSERT(del->br_blockcount > 0);
ASSERT(got.br_startoff <= del->br_startoff);
del_endoff = del->br_startoff + del->br_blockcount;
@@ -5371,7 +5369,6 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
int logflags; /* transaction logging flags */
xfs_extlen_t mod; /* rt extent offset */
xfs_mount_t *mp; /* mount structure */
- xfs_extnum_t nextents; /* number of file extents */
xfs_bmbt_irec_t prev; /* previous extent record */
xfs_fileoff_t start; /* first file offset deleted */
int tmp_logflags; /* partial logging flags */
@@ -5403,8 +5400,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
if (!(ifp->if_flags & XFS_IFEXTENTS) &&
(error = xfs_iread_extents(tp, ip, whichfork)))
return error;
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
- if (nextents == 0) {
+ if (xfs_iext_count(ifp) == 0) {
*rlen = 0;
return 0;
}
@@ -5889,7 +5885,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
mp = ip->i_mount;
ifp = XFS_IFORK_PTR(ip, whichfork);
- total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
+ total_extents = xfs_iext_count(ifp);
xfs_bmbt_get_all(gotp, &got);
@@ -6066,7 +6062,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* are collapsing out, so we cannot use the count of real extents here.
* Instead we have to calculate it from the incore fork.
*/
- total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
+ total_extents = xfs_iext_count(ifp);
if (total_extents == 0) {
*done = 1;
goto del_cursor;
@@ -6126,7 +6122,7 @@ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork)
* count can change. Update the total and grade the next record.
*/
if (direction == SHIFT_LEFT) {
- total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
+ total_extents = xfs_iext_count(ifp);
stop_extent = total_extents;
}
diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
index 5dd56d3..5fbe24c 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.c
+++ b/fs/xfs/libxfs/xfs_inode_fork.c
@@ -775,6 +775,13 @@
}
}
+/* Count number of incore extents based on if_bytes */
+xfs_extnum_t
+xfs_iext_count(struct xfs_ifork *ifp)
+{
+ return ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+}
+
/*
* Convert in-core extents to on-disk form
*
@@ -803,7 +810,7 @@
ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED));
ASSERT(ifp->if_bytes > 0);
- nrecs = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nrecs = xfs_iext_count(ifp);
XFS_BMAP_TRACE_EXLIST(ip, nrecs, whichfork);
ASSERT(nrecs > 0);
@@ -941,7 +948,7 @@
xfs_extnum_t idx) /* index of target extent */
{
ASSERT(idx >= 0);
- ASSERT(idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t));
+ ASSERT(idx < xfs_iext_count(ifp));
if ((ifp->if_flags & XFS_IFEXTIREC) && (idx == 0)) {
return ifp->if_u1.if_ext_irec->er_extbuf;
@@ -1017,7 +1024,7 @@ struct xfs_ifork *
int new_size; /* size of extents after adding */
xfs_extnum_t nextents; /* number of extents in file */
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
ASSERT((idx >= 0) && (idx <= nextents));
byte_diff = ext_diff * sizeof(xfs_bmbt_rec_t);
new_size = ifp->if_bytes + byte_diff;
@@ -1241,7 +1248,7 @@ struct xfs_ifork *
trace_xfs_iext_remove(ip, idx, state, _RET_IP_);
ASSERT(ext_diff > 0);
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
new_size = (nextents - ext_diff) * sizeof(xfs_bmbt_rec_t);
if (new_size == 0) {
@@ -1270,7 +1277,7 @@ struct xfs_ifork *
ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
ASSERT(idx < XFS_INLINE_EXTS);
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
ASSERT(((nextents - ext_diff) > 0) &&
(nextents - ext_diff) < XFS_INLINE_EXTS);
@@ -1309,7 +1316,7 @@ struct xfs_ifork *
ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
new_size = ifp->if_bytes -
(ext_diff * sizeof(xfs_bmbt_rec_t));
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
if (new_size == 0) {
xfs_iext_destroy(ifp);
@@ -1546,7 +1553,7 @@ struct xfs_ifork *
int size; /* size of file extents */
ASSERT(ifp->if_flags & XFS_IFEXTIREC);
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
ASSERT(nextents <= XFS_LINEAR_EXTS);
size = nextents * sizeof(xfs_bmbt_rec_t);
@@ -1620,7 +1627,7 @@ struct xfs_ifork *
xfs_extnum_t nextents; /* number of file extents */
xfs_fileoff_t startoff = 0; /* start offset of extent */
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
if (nextents == 0) {
*idxp = 0;
return NULL;
@@ -1733,8 +1740,8 @@ struct xfs_ifork *
ASSERT(ifp->if_flags & XFS_IFEXTIREC);
ASSERT(page_idx >= 0);
- ASSERT(page_idx <= ifp->if_bytes / sizeof(xfs_bmbt_rec_t));
- ASSERT(page_idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t) || realloc);
+ ASSERT(page_idx <= xfs_iext_count(ifp));
+ ASSERT(page_idx < xfs_iext_count(ifp) || realloc);
nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ;
erp_idx = 0;
@@ -1782,7 +1789,7 @@ struct xfs_ifork *
xfs_extnum_t nextents; /* number of extents in file */
ASSERT(!(ifp->if_flags & XFS_IFEXTIREC));
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
ASSERT(nextents <= XFS_LINEAR_EXTS);
erp = kmem_alloc(sizeof(xfs_ext_irec_t), KM_NOFS);
@@ -1906,7 +1913,7 @@ struct xfs_ifork *
ASSERT(ifp->if_flags & XFS_IFEXTIREC);
nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ;
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
if (nextents == 0) {
xfs_iext_destroy(ifp);
diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h
index c9476f5..8bf112e 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.h
+++ b/fs/xfs/libxfs/xfs_inode_fork.h
@@ -152,6 +152,7 @@ int xfs_iextents_copy(struct xfs_inode *, struct xfs_bmbt_rec *,
struct xfs_bmbt_rec_host *
xfs_iext_get_ext(struct xfs_ifork *, xfs_extnum_t);
+xfs_extnum_t xfs_iext_count(struct xfs_ifork *);
void xfs_iext_insert(struct xfs_inode *, xfs_extnum_t, xfs_extnum_t,
struct xfs_bmbt_irec *, int);
void xfs_iext_add(struct xfs_ifork *, xfs_extnum_t, int);
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
index 47074e0..35f0bd1 100644
--- a/fs/xfs/xfs_bmap_util.c
+++ b/fs/xfs/xfs_bmap_util.c
@@ -359,9 +359,7 @@
mp = ip->i_mount;
ifp = XFS_IFORK_PTR(ip, whichfork);
if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) {
- xfs_bmap_count_leaves(ifp, 0,
- ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t),
- count);
+ xfs_bmap_count_leaves(ifp, 0, xfs_iext_count(ifp), count);
return 0;
}
@@ -426,7 +424,7 @@
ifp = XFS_IFORK_PTR(ip, whichfork);
if (!moretocome &&
xfs_iext_bno_to_ext(ifp, fileblock, &lastx) &&
- (lastx == (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))-1))
+ (lastx == xfs_iext_count(ifp) - 1))
out->bmv_oflags |= BMV_OF_LAST;
}
@@ -1882,7 +1880,7 @@
* pointer. Otherwise it's already NULL or
* pointing to the extent.
*/
- nextents = ip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(&ip->i_df);
if (nextents <= XFS_INLINE_EXTS) {
ifp->if_u1.if_extents =
ifp->if_u2.if_inline_ext;
@@ -1902,7 +1900,7 @@
* pointer. Otherwise it's already NULL or
* pointing to the extent.
*/
- nextents = tip->i_df.if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(&tip->i_df);
if (nextents <= XFS_INLINE_EXTS) {
tifp->if_u1.if_extents =
tifp->if_u2.if_inline_ext;
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index 9610e9c..d90e781 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -164,7 +164,7 @@
struct xfs_bmbt_rec *p;
ASSERT(ip->i_df.if_u1.if_extents != NULL);
- ASSERT(ip->i_df.if_bytes / sizeof(xfs_bmbt_rec_t) > 0);
+ ASSERT(xfs_iext_count(&ip->i_df) > 0);
p = xlog_prepare_iovec(lv, vecp, XLOG_REG_TYPE_IEXT);
data_bytes = xfs_iextents_copy(ip, p, XFS_DATA_FORK);
@@ -261,7 +261,7 @@
ip->i_afp->if_bytes > 0) {
struct xfs_bmbt_rec *p;
- ASSERT(ip->i_afp->if_bytes / sizeof(xfs_bmbt_rec_t) ==
+ ASSERT(xfs_iext_count(ip->i_afp) ==
ip->i_d.di_anextents);
ASSERT(ip->i_afp->if_u1.if_extents != NULL);
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index c245bed..a391975 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -910,16 +910,14 @@ struct dentry *
if (attr) {
if (ip->i_afp) {
if (ip->i_afp->if_flags & XFS_IFEXTENTS)
- fa.fsx_nextents = ip->i_afp->if_bytes /
- sizeof(xfs_bmbt_rec_t);
+ fa.fsx_nextents = xfs_iext_count(ip->i_afp);
else
fa.fsx_nextents = ip->i_d.di_anextents;
} else
fa.fsx_nextents = 0;
} else {
if (ip->i_df.if_flags & XFS_IFEXTENTS)
- fa.fsx_nextents = ip->i_df.if_bytes /
- sizeof(xfs_bmbt_rec_t);
+ fa.fsx_nextents = xfs_iext_count(&ip->i_df);
else
fa.fsx_nextents = ip->i_d.di_nextents;
}
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
index a60d9e2..45e50ea 100644
--- a/fs/xfs/xfs_qm.c
+++ b/fs/xfs/xfs_qm.c
@@ -1135,7 +1135,7 @@ struct xfs_qm_isolate {
return error;
}
rtblks = 0;
- nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
+ nextents = xfs_iext_count(ifp);
for (idx = 0; idx < nextents; idx++)
rtblks += xfs_bmbt_get_blockcount(xfs_iext_get_ext(ifp, idx));
*O_rtblks = (xfs_qcnt_t)rtblks;
diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
index 5965e94..63c9e82 100644
--- a/fs/xfs/xfs_reflink.c
+++ b/fs/xfs/xfs_reflink.c
@@ -511,7 +511,7 @@
/* This is the extent before; try sliding up one. */
if (irec.br_startoff < offset_fsb) {
idx++;
- if (idx >= ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
+ if (idx >= xfs_iext_count(ifp))
return 0;
gotp = xfs_iext_get_ext(ifp, idx);
xfs_bmbt_get_all(gotp, &irec);
@@ -1679,7 +1679,7 @@
/* Roll on... */
idx++;
- if (idx >= ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
+ if (idx >= xfs_iext_count(ifp))
break;
gotp = xfs_iext_get_ext(ifp, idx);
}
^ permalink raw reply related [flat|nested] 9+ messages in thread