From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Carlos Maiolino <cmaiolino@redhat.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions
Date: Fri, 4 Sep 2020 08:41:52 -0700 [thread overview]
Message-ID: <20200904154152.GE6096@magnolia> (raw)
In-Reply-To: <20200903161859.85511-1-cmaiolino@redhat.com>
On Thu, Sep 03, 2020 at 06:18:59PM +0200, Carlos Maiolino wrote:
> xfs_attr_sf_totsize() requires access to xfs_inode structure, so, once
> xfs_attr_shortform_addname() is its only user, move it to xfs_attr.c
> instead of playing with more #includes.
>
> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
Looks good to me,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
>
> Changelog:
> V2:
> - keep macro comments above inline functions
> V3:
> - Add extra spacing in xfs_attr_sf_totsize()
> - Fix open curling braces on inline functions
> - use void * casting on xfs_attr_sf_nextentry()
> V4:
> - Fix open curling braces
> - remove unneeded parenthesis
>
> fs/xfs/libxfs/xfs_attr.c | 15 ++++++++++++---
> fs/xfs/libxfs/xfs_attr_leaf.c | 18 +++++++++---------
> fs/xfs/libxfs/xfs_attr_sf.h | 30 +++++++++++++++++++-----------
> fs/xfs/xfs_attr_list.c | 4 ++--
> 4 files changed, 42 insertions(+), 25 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index 2e055c079f397..16ef80943b8ef 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -428,7 +428,7 @@ xfs_attr_set(
> */
> if (XFS_IFORK_Q(dp) == 0) {
> int sf_size = sizeof(struct xfs_attr_sf_hdr) +
> - XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen,
> + xfs_attr_sf_entsize_byname(args->namelen,
> args->valuelen);
>
> error = xfs_bmap_add_attrfork(dp, sf_size, rsvd);
> @@ -523,6 +523,15 @@ xfs_attr_set(
> * External routines when attribute list is inside the inode
> *========================================================================*/
>
> +/* total space in use */
> +static inline int xfs_attr_sf_totsize(struct xfs_inode *dp)
> +{
> + struct xfs_attr_shortform *sf =
> + (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data;
> +
> + return be16_to_cpu(sf->hdr.totsize);
> +}
> +
> /*
> * Add a name to the shortform attribute list structure
> * This is the external routine.
> @@ -555,8 +564,8 @@ xfs_attr_shortform_addname(xfs_da_args_t *args)
> args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX)
> return -ENOSPC;
>
> - newsize = XFS_ATTR_SF_TOTSIZE(args->dp);
> - newsize += XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen);
> + newsize = xfs_attr_sf_totsize(args->dp);
> + newsize += xfs_attr_sf_entsize_byname(args->namelen, args->valuelen);
>
> forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize);
> if (!forkoff)
> diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
> index b0c8626e166ac..00955484175b1 100644
> --- a/fs/xfs/libxfs/xfs_attr_leaf.c
> +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
> @@ -684,9 +684,9 @@ xfs_attr_sf_findname(
> sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data;
> sfe = &sf->list[0];
> end = sf->hdr.count;
> - for (i = 0; i < end; sfe = XFS_ATTR_SF_NEXTENTRY(sfe),
> + for (i = 0; i < end; sfe = xfs_attr_sf_nextentry(sfe),
> base += size, i++) {
> - size = XFS_ATTR_SF_ENTSIZE(sfe);
> + size = xfs_attr_sf_entsize(sfe);
> if (!xfs_attr_match(args, sfe->namelen, sfe->nameval,
> sfe->flags))
> continue;
> @@ -733,7 +733,7 @@ xfs_attr_shortform_add(
> ASSERT(0);
>
> offset = (char *)sfe - (char *)sf;
> - size = XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen);
> + size = xfs_attr_sf_entsize_byname(args->namelen, args->valuelen);
> xfs_idata_realloc(dp, size, XFS_ATTR_FORK);
> sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
> sfe = (struct xfs_attr_sf_entry *)((char *)sf + offset);
> @@ -792,7 +792,7 @@ xfs_attr_shortform_remove(
> error = xfs_attr_sf_findname(args, &sfe, &base);
> if (error != -EEXIST)
> return error;
> - size = XFS_ATTR_SF_ENTSIZE(sfe);
> + size = xfs_attr_sf_entsize(sfe);
>
> /*
> * Fix up the attribute fork data, covering the hole
> @@ -849,7 +849,7 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args)
> sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
> sfe = &sf->list[0];
> for (i = 0; i < sf->hdr.count;
> - sfe = XFS_ATTR_SF_NEXTENTRY(sfe), i++) {
> + sfe = xfs_attr_sf_nextentry(sfe), i++) {
> if (xfs_attr_match(args, sfe->namelen, sfe->nameval,
> sfe->flags))
> return -EEXIST;
> @@ -876,7 +876,7 @@ xfs_attr_shortform_getvalue(
> sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data;
> sfe = &sf->list[0];
> for (i = 0; i < sf->hdr.count;
> - sfe = XFS_ATTR_SF_NEXTENTRY(sfe), i++) {
> + sfe = xfs_attr_sf_nextentry(sfe), i++) {
> if (xfs_attr_match(args, sfe->namelen, sfe->nameval,
> sfe->flags))
> return xfs_attr_copy_value(args,
> @@ -951,7 +951,7 @@ xfs_attr_shortform_to_leaf(
> ASSERT(error != -ENOSPC);
> if (error)
> goto out;
> - sfe = XFS_ATTR_SF_NEXTENTRY(sfe);
> + sfe = xfs_attr_sf_nextentry(sfe);
> }
> error = 0;
> *leaf_bp = bp;
> @@ -992,7 +992,7 @@ xfs_attr_shortform_allfit(
> return 0;
> if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX)
> return 0;
> - bytes += XFS_ATTR_SF_ENTSIZE_BYNAME(name_loc->namelen,
> + bytes += xfs_attr_sf_entsize_byname(name_loc->namelen,
> be16_to_cpu(name_loc->valuelen));
> }
> if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) &&
> @@ -1048,7 +1048,7 @@ xfs_attr_shortform_verify(
> * within the data buffer. The next entry starts after the
> * name component, so nextentry is an acceptable test.
> */
> - next_sfep = XFS_ATTR_SF_NEXTENTRY(sfep);
> + next_sfep = xfs_attr_sf_nextentry(sfep);
> if ((char *)next_sfep > endp)
> return __this_address;
>
> diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h
> index 29934103ce559..37578b369d9b9 100644
> --- a/fs/xfs/libxfs/xfs_attr_sf.h
> +++ b/fs/xfs/libxfs/xfs_attr_sf.h
> @@ -26,18 +26,26 @@ typedef struct xfs_attr_sf_sort {
> unsigned char *name; /* name value, pointer into buffer */
> } xfs_attr_sf_sort_t;
>
> -#define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \
> - ((sizeof(struct xfs_attr_sf_entry) + (nlen) + (vlen)))
> #define XFS_ATTR_SF_ENTSIZE_MAX /* max space for name&value */ \
> ((1 << (NBBY*(int)sizeof(uint8_t))) - 1)
> -#define XFS_ATTR_SF_ENTSIZE(sfep) /* space an entry uses */ \
> - ((int)sizeof(struct xfs_attr_sf_entry) + \
> - (sfep)->namelen+(sfep)->valuelen)
> -#define XFS_ATTR_SF_NEXTENTRY(sfep) /* next entry in struct */ \
> - ((struct xfs_attr_sf_entry *)((char *)(sfep) + \
> - XFS_ATTR_SF_ENTSIZE(sfep)))
> -#define XFS_ATTR_SF_TOTSIZE(dp) /* total space in use */ \
> - (be16_to_cpu(((struct xfs_attr_shortform *) \
> - ((dp)->i_afp->if_u1.if_data))->hdr.totsize))
> +
> +/* space name/value uses */
> +static inline int xfs_attr_sf_entsize_byname(uint8_t nlen, uint8_t vlen)
> +{
> + return sizeof(struct xfs_attr_sf_entry) + nlen + vlen;
> +}
> +
> +/* space an entry uses */
> +static inline int xfs_attr_sf_entsize(struct xfs_attr_sf_entry *sfep)
> +{
> + return struct_size(sfep, nameval, sfep->namelen + sfep->valuelen);
> +}
> +
> +/* next entry in struct */
> +static inline struct xfs_attr_sf_entry *
> +xfs_attr_sf_nextentry(struct xfs_attr_sf_entry *sfep)
> +{
> + return (void *)sfep + xfs_attr_sf_entsize(sfep);
> +}
>
> #endif /* __XFS_ATTR_SF_H__ */
> diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
> index 4eb1d6faecfb2..8f8837fe21cf0 100644
> --- a/fs/xfs/xfs_attr_list.c
> +++ b/fs/xfs/xfs_attr_list.c
> @@ -96,7 +96,7 @@ xfs_attr_shortform_list(
> */
> if (context->seen_enough)
> break;
> - sfe = XFS_ATTR_SF_NEXTENTRY(sfe);
> + sfe = xfs_attr_sf_nextentry(sfe);
> }
> trace_xfs_attr_list_sf_all(context);
> return 0;
> @@ -136,7 +136,7 @@ xfs_attr_shortform_list(
> /* These are bytes, and both on-disk, don't endian-flip */
> sbp->valuelen = sfe->valuelen;
> sbp->flags = sfe->flags;
> - sfe = XFS_ATTR_SF_NEXTENTRY(sfe);
> + sfe = xfs_attr_sf_nextentry(sfe);
> sbp++;
> nsbuf++;
> }
> --
> 2.26.2
>
next prev parent reply other threads:[~2020-09-04 15:44 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-03 14:28 [PATCH v3 0/4] Clean up xfs_attr_sf_entry Carlos Maiolino
2020-09-03 14:28 ` [PATCH 1/4] xfs: remove typedef xfs_attr_sf_entry_t Carlos Maiolino
2020-09-06 21:52 ` Dave Chinner
2020-09-03 14:28 ` [PATCH 2/4] xfs: Remove typedef xfs_attr_shortform_t Carlos Maiolino
2020-09-06 21:53 ` Dave Chinner
2020-09-03 14:28 ` [PATCH v3 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry Carlos Maiolino
2020-09-03 14:32 ` Christoph Hellwig
2020-09-03 16:17 ` [PATCH v4 " Carlos Maiolino
2020-09-03 16:18 ` [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino
2020-09-04 7:53 ` Carlos Maiolino
2020-09-04 15:42 ` Darrick J. Wong
2020-09-04 15:41 ` Darrick J. Wong [this message]
2020-09-06 22:00 ` Dave Chinner
2020-09-07 11:33 ` Carlos Maiolino
2020-09-07 11:47 ` [PATCH V5 " Carlos Maiolino
2020-09-04 15:42 ` [PATCH v4 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry Darrick J. Wong
2020-09-06 21:53 ` Dave Chinner
2020-09-03 14:28 ` [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino
2020-09-03 14:33 ` Christoph Hellwig
2020-09-03 16:05 ` Carlos Maiolino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200904154152.GE6096@magnolia \
--to=darrick.wong@oracle.com \
--cc=cmaiolino@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox