* [PATCH v3 0/4] Clean up xfs_attr_sf_entry
@ 2020-09-03 14:28 Carlos Maiolino
2020-09-03 14:28 ` [PATCH 1/4] xfs: remove typedef xfs_attr_sf_entry_t Carlos Maiolino
` (3 more replies)
0 siblings, 4 replies; 20+ messages in thread
From: Carlos Maiolino @ 2020-09-03 14:28 UTC (permalink / raw)
To: linux-xfs
Hi.
This is the V3 version of this series, containing the changes discussed in the
previous version. Details are on each patch.
Cheers
Carlos Maiolino (4):
xfs: remove typedef xfs_attr_sf_entry_t
xfs: Remove typedef xfs_attr_shortform_t
xfs: Use variable-size array for nameval in xfs_attr_sf_entry
xfs: Convert xfs_attr_sf macros to inline functions
fs/xfs/libxfs/xfs_attr.c | 14 ++++++++---
fs/xfs/libxfs/xfs_attr_leaf.c | 46 +++++++++++++++++------------------
fs/xfs/libxfs/xfs_attr_sf.h | 29 ++++++++++++++--------
fs/xfs/libxfs/xfs_da_format.h | 6 ++---
fs/xfs/xfs_attr_list.c | 6 ++---
fs/xfs/xfs_ondisk.h | 12 ++++-----
6 files changed, 64 insertions(+), 49 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH 1/4] xfs: remove typedef xfs_attr_sf_entry_t 2020-09-03 14:28 [PATCH v3 0/4] Clean up xfs_attr_sf_entry Carlos Maiolino @ 2020-09-03 14:28 ` 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 ` (2 subsequent siblings) 3 siblings, 1 reply; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 14:28 UTC (permalink / raw) To: linux-xfs Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> --- fs/xfs/libxfs/xfs_attr_leaf.c | 4 ++-- fs/xfs/libxfs/xfs_attr_sf.h | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index 305d4bc073370..76d3814f9dc79 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -736,7 +736,7 @@ xfs_attr_shortform_add( size = XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen); xfs_idata_realloc(dp, size, XFS_ATTR_FORK); sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data; - sfe = (xfs_attr_sf_entry_t *)((char *)sf + offset); + sfe = (struct xfs_attr_sf_entry *)((char *)sf + offset); sfe->namelen = args->namelen; sfe->valuelen = args->valuelen; @@ -838,7 +838,7 @@ int xfs_attr_shortform_lookup(xfs_da_args_t *args) { xfs_attr_shortform_t *sf; - xfs_attr_sf_entry_t *sfe; + struct xfs_attr_sf_entry *sfe; int i; struct xfs_ifork *ifp; diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h index bb004fb7944a7..c4afb33079184 100644 --- a/fs/xfs/libxfs/xfs_attr_sf.h +++ b/fs/xfs/libxfs/xfs_attr_sf.h @@ -13,7 +13,6 @@ * to fit into the literal area of the inode. */ typedef struct xfs_attr_sf_hdr xfs_attr_sf_hdr_t; -typedef struct xfs_attr_sf_entry xfs_attr_sf_entry_t; /* * We generate this then sort it, attr_list() must return things in hash-order. @@ -28,15 +27,17 @@ typedef struct xfs_attr_sf_sort { } xfs_attr_sf_sort_t; #define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \ - (((int)sizeof(xfs_attr_sf_entry_t)-1 + (nlen)+(vlen))) + (((int)sizeof(struct xfs_attr_sf_entry)-1 + (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(xfs_attr_sf_entry_t)-1 + (sfep)->namelen+(sfep)->valuelen) + ((int)sizeof(struct xfs_attr_sf_entry)-1 + \ + (sfep)->namelen+(sfep)->valuelen) #define XFS_ATTR_SF_NEXTENTRY(sfep) /* next entry in struct */ \ - ((xfs_attr_sf_entry_t *)((char *)(sfep) + XFS_ATTR_SF_ENTSIZE(sfep))) + ((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(((xfs_attr_shortform_t *) \ + (be16_to_cpu(((struct xfs_attr_shortform *) \ ((dp)->i_afp->if_u1.if_data))->hdr.totsize)) #endif /* __XFS_ATTR_SF_H__ */ -- 2.26.2 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] xfs: remove typedef xfs_attr_sf_entry_t 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 0 siblings, 0 replies; 20+ messages in thread From: Dave Chinner @ 2020-09-06 21:52 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 04:28:36PM +0200, Carlos Maiolino wrote: > Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> Minor nit: the normal ordering we use for rvb/sob is chronological. i.e. You signed it off first, then it got reviewed. Hence the sign-off process can be read from the top down once merged into the tree as: <sob>: Author <rvb>: Reviewer #1 .... <rvb>: Reviewer #N <sob>: Maintainer merge SOB And then when it goes to stable trees, all the stable acks/sob/rvb end up below this, so there's an obvious progression through the steps and the chain of people involved... Other than that, Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 2/4] xfs: Remove typedef xfs_attr_shortform_t 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-03 14:28 ` 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:28 ` [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino 3 siblings, 1 reply; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 14:28 UTC (permalink / raw) To: linux-xfs Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> --- fs/xfs/libxfs/xfs_attr_leaf.c | 16 ++++++++-------- fs/xfs/libxfs/xfs_da_format.h | 4 ++-- fs/xfs/xfs_attr_list.c | 2 +- fs/xfs/xfs_ondisk.h | 12 ++++++------ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index 76d3814f9dc79..d920183b08a99 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -728,14 +728,14 @@ xfs_attr_shortform_add( ifp = dp->i_afp; ASSERT(ifp->if_flags & XFS_IFINLINE); - sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data; + sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data; if (xfs_attr_sf_findname(args, &sfe, NULL) == -EEXIST) ASSERT(0); offset = (char *)sfe - (char *)sf; size = XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen); xfs_idata_realloc(dp, size, XFS_ATTR_FORK); - sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data; + sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data; sfe = (struct xfs_attr_sf_entry *)((char *)sf + offset); sfe->namelen = args->namelen; @@ -787,7 +787,7 @@ xfs_attr_shortform_remove( dp = args->dp; mp = dp->i_mount; - sf = (xfs_attr_shortform_t *)dp->i_afp->if_u1.if_data; + sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data; error = xfs_attr_sf_findname(args, &sfe, &base); if (error != -EEXIST) @@ -837,7 +837,7 @@ xfs_attr_shortform_remove( int xfs_attr_shortform_lookup(xfs_da_args_t *args) { - xfs_attr_shortform_t *sf; + struct xfs_attr_shortform *sf; struct xfs_attr_sf_entry *sfe; int i; struct xfs_ifork *ifp; @@ -846,7 +846,7 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args) ifp = args->dp->i_afp; ASSERT(ifp->if_flags & XFS_IFINLINE); - sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data; + 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++) { @@ -873,7 +873,7 @@ xfs_attr_shortform_getvalue( int i; ASSERT(args->dp->i_afp->if_flags == XFS_IFINLINE); - sf = (xfs_attr_shortform_t *)args->dp->i_afp->if_u1.if_data; + 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++) { @@ -908,12 +908,12 @@ xfs_attr_shortform_to_leaf( dp = args->dp; ifp = dp->i_afp; - sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data; + sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data; size = be16_to_cpu(sf->hdr.totsize); tmpbuffer = kmem_alloc(size, 0); ASSERT(tmpbuffer != NULL); memcpy(tmpbuffer, ifp->if_u1.if_data, size); - sf = (xfs_attr_shortform_t *)tmpbuffer; + sf = (struct xfs_attr_shortform *)tmpbuffer; xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); xfs_bmap_local_to_extents_empty(args->trans, dp, XFS_ATTR_FORK); diff --git a/fs/xfs/libxfs/xfs_da_format.h b/fs/xfs/libxfs/xfs_da_format.h index 059ac108b1b39..e708b714bf99d 100644 --- a/fs/xfs/libxfs/xfs_da_format.h +++ b/fs/xfs/libxfs/xfs_da_format.h @@ -579,7 +579,7 @@ xfs_dir2_block_leaf_p(struct xfs_dir2_block_tail *btp) /* * Entries are packed toward the top as tight as possible. */ -typedef struct xfs_attr_shortform { +struct xfs_attr_shortform { struct xfs_attr_sf_hdr { /* constant-structure header block */ __be16 totsize; /* total bytes in shortform list */ __u8 count; /* count of active entries */ @@ -591,7 +591,7 @@ typedef struct xfs_attr_shortform { uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */ uint8_t nameval[1]; /* name & value bytes concatenated */ } list[1]; /* variable sized array */ -} xfs_attr_shortform_t; +}; typedef struct xfs_attr_leaf_map { /* RLE map of free bytes */ __be16 base; /* base of free region */ diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c index 50f922cad91a4..4eb1d6faecfb2 100644 --- a/fs/xfs/xfs_attr_list.c +++ b/fs/xfs/xfs_attr_list.c @@ -61,7 +61,7 @@ xfs_attr_shortform_list( int error = 0; ASSERT(dp->i_afp != NULL); - sf = (xfs_attr_shortform_t *)dp->i_afp->if_u1.if_data; + sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data; ASSERT(sf != NULL); if (!sf->hdr.count) return 0; diff --git a/fs/xfs/xfs_ondisk.h b/fs/xfs/xfs_ondisk.h index 5f04d8a5ab2a9..ad51c8eb447b1 100644 --- a/fs/xfs/xfs_ondisk.h +++ b/fs/xfs/xfs_ondisk.h @@ -84,12 +84,12 @@ xfs_check_ondisk_structs(void) XFS_CHECK_OFFSET(xfs_attr_leaf_name_remote_t, namelen, 8); XFS_CHECK_OFFSET(xfs_attr_leaf_name_remote_t, name, 9); XFS_CHECK_STRUCT_SIZE(xfs_attr_leafblock_t, 40); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, hdr.totsize, 0); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, hdr.count, 2); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, list[0].namelen, 4); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, list[0].valuelen, 5); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, list[0].flags, 6); - XFS_CHECK_OFFSET(xfs_attr_shortform_t, list[0].nameval, 7); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, hdr.totsize, 0); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, hdr.count, 2); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, list[0].namelen, 4); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, list[0].valuelen, 5); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, list[0].flags, 6); + XFS_CHECK_OFFSET(struct xfs_attr_shortform, list[0].nameval, 7); XFS_CHECK_STRUCT_SIZE(xfs_da_blkinfo_t, 12); XFS_CHECK_STRUCT_SIZE(xfs_da_intnode_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_da_node_entry_t, 8); -- 2.26.2 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 2/4] xfs: Remove typedef xfs_attr_shortform_t 2020-09-03 14:28 ` [PATCH 2/4] xfs: Remove typedef xfs_attr_shortform_t Carlos Maiolino @ 2020-09-06 21:53 ` Dave Chinner 0 siblings, 0 replies; 20+ messages in thread From: Dave Chinner @ 2020-09-06 21:53 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 04:28:37PM +0200, Carlos Maiolino wrote: > Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> > --- > fs/xfs/libxfs/xfs_attr_leaf.c | 16 ++++++++-------- > fs/xfs/libxfs/xfs_da_format.h | 4 ++-- > fs/xfs/xfs_attr_list.c | 2 +- > fs/xfs/xfs_ondisk.h | 12 ++++++------ > 4 files changed, 17 insertions(+), 17 deletions(-) Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v3 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry 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-03 14:28 ` [PATCH 2/4] xfs: Remove typedef xfs_attr_shortform_t Carlos Maiolino @ 2020-09-03 14:28 ` Carlos Maiolino 2020-09-03 14:32 ` Christoph Hellwig 2020-09-03 16:17 ` [PATCH v4 " Carlos Maiolino 2020-09-03 14:28 ` [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino 3 siblings, 2 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 14:28 UTC (permalink / raw) To: linux-xfs nameval is a variable-size array, so, define it as it, and remove all the -1 magic number subtractions Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> --- Changelog: V2: - Drop wrong change to XFS_ATTR_SF_ENTSIZE_MAX V3: - Use XFS_ATTR_SF_ENTSIZE_BYNAME in xfs_attr_shortform_allfit() - Remove int casting and fix spacing on XFS_ATTR_SF_ENTSIZE_BYNAME fs/xfs/libxfs/xfs_attr_leaf.c | 10 ++++------ fs/xfs/libxfs/xfs_attr_sf.h | 4 ++-- fs/xfs/libxfs/xfs_da_format.h | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index d920183b08a99..fb05c77fc8c9f 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -992,9 +992,9 @@ xfs_attr_shortform_allfit( return 0; if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) return 0; - bytes += sizeof(struct xfs_attr_sf_entry) - 1 - + name_loc->namelen - + be16_to_cpu(name_loc->valuelen); + bytes += XFS_ATTR_SF_ENTSIZE_BYNAME( + name_loc->namelen, + be16_to_cpu(name_loc->valuelen)); } if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) && @@ -1036,10 +1036,8 @@ xfs_attr_shortform_verify( * struct xfs_attr_sf_entry has a variable length. * Check the fixed-offset parts of the structure are * within the data buffer. - * xfs_attr_sf_entry is defined with a 1-byte variable - * array at the end, so we must subtract that off. */ - if (((char *)sfep + sizeof(*sfep) - 1) >= endp) + if (((char *)sfep + sizeof(*sfep)) >= endp) return __this_address; /* Don't allow names with known bad length. */ diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h index c4afb33079184..29934103ce559 100644 --- a/fs/xfs/libxfs/xfs_attr_sf.h +++ b/fs/xfs/libxfs/xfs_attr_sf.h @@ -27,11 +27,11 @@ typedef struct xfs_attr_sf_sort { } xfs_attr_sf_sort_t; #define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \ - (((int)sizeof(struct xfs_attr_sf_entry)-1 + (nlen)+(vlen))) + ((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)-1 + \ + ((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) + \ diff --git a/fs/xfs/libxfs/xfs_da_format.h b/fs/xfs/libxfs/xfs_da_format.h index e708b714bf99d..b40a4e80f5ee6 100644 --- a/fs/xfs/libxfs/xfs_da_format.h +++ b/fs/xfs/libxfs/xfs_da_format.h @@ -589,7 +589,7 @@ struct xfs_attr_shortform { uint8_t namelen; /* actual length of name (no NULL) */ uint8_t valuelen; /* actual length of value (no NULL) */ uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */ - uint8_t nameval[1]; /* name & value bytes concatenated */ + uint8_t nameval[]; /* name & value bytes concatenated */ } list[1]; /* variable sized array */ }; -- 2.26.2 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v3 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry 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 1 sibling, 0 replies; 20+ messages in thread From: Christoph Hellwig @ 2020-09-03 14:32 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 04:28:38PM +0200, Carlos Maiolino wrote: > nameval is a variable-size array, so, define it as it, and remove all > the -1 magic number subtractions > > Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> > --- > > Changelog: > > V2: > - Drop wrong change to XFS_ATTR_SF_ENTSIZE_MAX > V3: > - Use XFS_ATTR_SF_ENTSIZE_BYNAME in xfs_attr_shortform_allfit() > - Remove int casting and fix spacing on > XFS_ATTR_SF_ENTSIZE_BYNAME > > fs/xfs/libxfs/xfs_attr_leaf.c | 10 ++++------ > fs/xfs/libxfs/xfs_attr_sf.h | 4 ++-- > fs/xfs/libxfs/xfs_da_format.h | 2 +- > 3 files changed, 7 insertions(+), 9 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c > index d920183b08a99..fb05c77fc8c9f 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.c > +++ b/fs/xfs/libxfs/xfs_attr_leaf.c > @@ -992,9 +992,9 @@ xfs_attr_shortform_allfit( > return 0; > if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) > return 0; > - bytes += sizeof(struct xfs_attr_sf_entry) - 1 > - + name_loc->namelen > - + be16_to_cpu(name_loc->valuelen); > + bytes += XFS_ATTR_SF_ENTSIZE_BYNAME( > + name_loc->namelen, > + be16_to_cpu(name_loc->valuelen)); This can be: bytes += XFS_ATTR_SF_ENTSIZE_BYNAME(name_loc->namelen, be16_to_cpu(name_loc->valuelen)); and would be way more readable that way. Otherwise looks good: Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v4 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry 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 ` Carlos Maiolino 2020-09-03 16:18 ` [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino ` (2 more replies) 1 sibling, 3 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 16:17 UTC (permalink / raw) To: linux-xfs nameval is a variable-size array, so, define it as it, and remove all the -1 magic number subtractions Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> --- Changelog: V2: - Drop wrong change to XFS_ATTR_SF_ENTSIZE_MAX V3: - Use XFS_ATTR_SF_ENTSIZE_BYNAME in xfs_attr_shortform_allfit() - Remove int casting and fix spacing on XFS_ATTR_SF_ENTSIZE_BYNAME V4: - Fix indentation on xfs_attr_shortform_allfit() fs/xfs/libxfs/xfs_attr_leaf.c | 9 +++------ fs/xfs/libxfs/xfs_attr_sf.h | 4 ++-- fs/xfs/libxfs/xfs_da_format.h | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index d920183b08a99..b0c8626e166ac 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -992,9 +992,8 @@ xfs_attr_shortform_allfit( return 0; if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) return 0; - bytes += sizeof(struct xfs_attr_sf_entry) - 1 - + name_loc->namelen - + be16_to_cpu(name_loc->valuelen); + bytes += XFS_ATTR_SF_ENTSIZE_BYNAME(name_loc->namelen, + be16_to_cpu(name_loc->valuelen)); } if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) && @@ -1036,10 +1035,8 @@ xfs_attr_shortform_verify( * struct xfs_attr_sf_entry has a variable length. * Check the fixed-offset parts of the structure are * within the data buffer. - * xfs_attr_sf_entry is defined with a 1-byte variable - * array at the end, so we must subtract that off. */ - if (((char *)sfep + sizeof(*sfep) - 1) >= endp) + if (((char *)sfep + sizeof(*sfep)) >= endp) return __this_address; /* Don't allow names with known bad length. */ diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h index c4afb33079184..29934103ce559 100644 --- a/fs/xfs/libxfs/xfs_attr_sf.h +++ b/fs/xfs/libxfs/xfs_attr_sf.h @@ -27,11 +27,11 @@ typedef struct xfs_attr_sf_sort { } xfs_attr_sf_sort_t; #define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \ - (((int)sizeof(struct xfs_attr_sf_entry)-1 + (nlen)+(vlen))) + ((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)-1 + \ + ((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) + \ diff --git a/fs/xfs/libxfs/xfs_da_format.h b/fs/xfs/libxfs/xfs_da_format.h index e708b714bf99d..b40a4e80f5ee6 100644 --- a/fs/xfs/libxfs/xfs_da_format.h +++ b/fs/xfs/libxfs/xfs_da_format.h @@ -589,7 +589,7 @@ struct xfs_attr_shortform { uint8_t namelen; /* actual length of name (no NULL) */ uint8_t valuelen; /* actual length of value (no NULL) */ uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */ - uint8_t nameval[1]; /* name & value bytes concatenated */ + uint8_t nameval[]; /* name & value bytes concatenated */ } list[1]; /* variable sized array */ }; -- 2.26.2 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-03 16:17 ` [PATCH v4 " Carlos Maiolino @ 2020-09-03 16:18 ` Carlos Maiolino 2020-09-04 7:53 ` Carlos Maiolino ` (3 more replies) 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 2 siblings, 4 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 16:18 UTC (permalink / raw) To: linux-xfs 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> --- 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 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 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 ` (2 subsequent siblings) 3 siblings, 1 reply; 20+ messages in thread From: Carlos Maiolino @ 2020-09-04 7:53 UTC (permalink / raw) To: linux-xfs 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> > --- > > 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 > hmmm, my apologies Darrick, looks like my ctrl+c/ctrl+v on the msgid tricked me This patch was supposed to be sent as in-reply-to the v3 4/4, looks like I sent it to the wrong id. Do you want me to resend everything? Again, my apologies for the confusion. -- Carlos ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-04 7:53 ` Carlos Maiolino @ 2020-09-04 15:42 ` Darrick J. Wong 0 siblings, 0 replies; 20+ messages in thread From: Darrick J. Wong @ 2020-09-04 15:42 UTC (permalink / raw) To: linux-xfs On Fri, Sep 04, 2020 at 09:53:28AM +0200, Carlos Maiolino wrote: > 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> > > --- > > > > 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 > > > > hmmm, my apologies Darrick, looks like my ctrl+c/ctrl+v on the msgid tricked me > This patch was supposed to be sent as in-reply-to the v3 4/4, looks like I sent > it to the wrong id. Do you want me to resend everything? Again, my apologies for > the confusion. Nah, I already RVB'd it. --D > -- > Carlos > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 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:41 ` Darrick J. Wong 2020-09-06 22:00 ` Dave Chinner 2020-09-07 11:47 ` [PATCH V5 " Carlos Maiolino 3 siblings, 0 replies; 20+ messages in thread From: Darrick J. Wong @ 2020-09-04 15:41 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs 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 > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 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:41 ` Darrick J. Wong @ 2020-09-06 22:00 ` Dave Chinner 2020-09-07 11:33 ` Carlos Maiolino 2020-09-07 11:47 ` [PATCH V5 " Carlos Maiolino 3 siblings, 1 reply; 20+ messages in thread From: Dave Chinner @ 2020-09-06 22:00 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs 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> > --- > > 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(-) Couple of minor nits below. > 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 */ Comment is redundant. > +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); > +} If you have to break the declaration line like that, you may as well just do: + struct xfs_attr_shortform *sf; + + sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data; + return be16_to_cpu(sf->hdr.totsize); Otherwise the patch looks fine. Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-06 22:00 ` Dave Chinner @ 2020-09-07 11:33 ` Carlos Maiolino 0 siblings, 0 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-07 11:33 UTC (permalink / raw) To: Dave Chinner; +Cc: linux-xfs > > > > +/* total space in use */ > > Comment is redundant. > > > +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); > > +} > > If you have to break the declaration line like that, you > may as well just do: > > + struct xfs_attr_shortform *sf; > + > + sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data; > + return be16_to_cpu(sf->hdr.totsize); > > > Otherwise the patch looks fine. > > Reviewed-by: Dave Chinner <dchinner@redhat.com> Fair enough, I'll re-send this patch, thanks for the review guys. > > -- > Dave Chinner > david@fromorbit.com > -- Carlos ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH V5 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-03 16:18 ` [PATCH v4 4/4] xfs: Convert xfs_attr_sf macros to inline functions Carlos Maiolino ` (2 preceding siblings ...) 2020-09-06 22:00 ` Dave Chinner @ 2020-09-07 11:47 ` Carlos Maiolino 3 siblings, 0 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-07 11:47 UTC (permalink / raw) To: linux-xfs 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. Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> --- 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 V5: - Remove redundant comment on xfs_attr_sf_totsize() - Rearrange xfs_attr_sf_totsize() to remove weird line breaks Darrick, I kept your RVB on it since there is no significant changes on this patch other than some cosmetic fixes. Hope that's ok. fs/xfs/libxfs/xfs_attr.c | 14 +++++++++++--- 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, 41 insertions(+), 25 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 2e055c079f397..fd8e6418a0d31 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,14 @@ xfs_attr_set( * External routines when attribute list is inside the inode *========================================================================*/ +static inline int xfs_attr_sf_totsize(struct xfs_inode *dp) +{ + struct xfs_attr_shortform *sf; + + 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 +563,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 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v4 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry 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 15:42 ` Darrick J. Wong 2020-09-06 21:53 ` Dave Chinner 2 siblings, 0 replies; 20+ messages in thread From: Darrick J. Wong @ 2020-09-04 15:42 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 06:17:24PM +0200, Carlos Maiolino wrote: > nameval is a variable-size array, so, define it as it, and remove all > the -1 magic number subtractions > > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > --- > > Changelog: > > V2: > - Drop wrong change to XFS_ATTR_SF_ENTSIZE_MAX > V3: > - Use XFS_ATTR_SF_ENTSIZE_BYNAME in xfs_attr_shortform_allfit() > - Remove int casting and fix spacing on > XFS_ATTR_SF_ENTSIZE_BYNAME > V4: > - Fix indentation on xfs_attr_shortform_allfit() > > fs/xfs/libxfs/xfs_attr_leaf.c | 9 +++------ > fs/xfs/libxfs/xfs_attr_sf.h | 4 ++-- > fs/xfs/libxfs/xfs_da_format.h | 2 +- > 3 files changed, 6 insertions(+), 9 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c > index d920183b08a99..b0c8626e166ac 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.c > +++ b/fs/xfs/libxfs/xfs_attr_leaf.c > @@ -992,9 +992,8 @@ xfs_attr_shortform_allfit( > return 0; > if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX) > return 0; > - bytes += sizeof(struct xfs_attr_sf_entry) - 1 > - + name_loc->namelen > - + be16_to_cpu(name_loc->valuelen); > + bytes += XFS_ATTR_SF_ENTSIZE_BYNAME(name_loc->namelen, > + be16_to_cpu(name_loc->valuelen)); > } > if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && > (dp->i_df.if_format != XFS_DINODE_FMT_BTREE) && > @@ -1036,10 +1035,8 @@ xfs_attr_shortform_verify( > * struct xfs_attr_sf_entry has a variable length. > * Check the fixed-offset parts of the structure are > * within the data buffer. > - * xfs_attr_sf_entry is defined with a 1-byte variable > - * array at the end, so we must subtract that off. > */ > - if (((char *)sfep + sizeof(*sfep) - 1) >= endp) > + if (((char *)sfep + sizeof(*sfep)) >= endp) > return __this_address; > > /* Don't allow names with known bad length. */ > diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h > index c4afb33079184..29934103ce559 100644 > --- a/fs/xfs/libxfs/xfs_attr_sf.h > +++ b/fs/xfs/libxfs/xfs_attr_sf.h > @@ -27,11 +27,11 @@ typedef struct xfs_attr_sf_sort { > } xfs_attr_sf_sort_t; > > #define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \ > - (((int)sizeof(struct xfs_attr_sf_entry)-1 + (nlen)+(vlen))) > + ((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)-1 + \ > + ((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) + \ > diff --git a/fs/xfs/libxfs/xfs_da_format.h b/fs/xfs/libxfs/xfs_da_format.h > index e708b714bf99d..b40a4e80f5ee6 100644 > --- a/fs/xfs/libxfs/xfs_da_format.h > +++ b/fs/xfs/libxfs/xfs_da_format.h > @@ -589,7 +589,7 @@ struct xfs_attr_shortform { > uint8_t namelen; /* actual length of name (no NULL) */ > uint8_t valuelen; /* actual length of value (no NULL) */ > uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */ > - uint8_t nameval[1]; /* name & value bytes concatenated */ > + uint8_t nameval[]; /* name & value bytes concatenated */ > } list[1]; /* variable sized array */ > }; > > -- > 2.26.2 > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v4 3/4] xfs: Use variable-size array for nameval in xfs_attr_sf_entry 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 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 2 siblings, 0 replies; 20+ messages in thread From: Dave Chinner @ 2020-09-06 21:53 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 06:17:24PM +0200, Carlos Maiolino wrote: > nameval is a variable-size array, so, define it as it, and remove all > the -1 magic number subtractions > > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> > --- > > Changelog: > > V2: > - Drop wrong change to XFS_ATTR_SF_ENTSIZE_MAX > V3: > - Use XFS_ATTR_SF_ENTSIZE_BYNAME in xfs_attr_shortform_allfit() > - Remove int casting and fix spacing on > XFS_ATTR_SF_ENTSIZE_BYNAME > V4: > - Fix indentation on xfs_attr_shortform_allfit() > > fs/xfs/libxfs/xfs_attr_leaf.c | 9 +++------ > fs/xfs/libxfs/xfs_attr_sf.h | 4 ++-- > fs/xfs/libxfs/xfs_da_format.h | 2 +- > 3 files changed, 6 insertions(+), 9 deletions(-) Looks fine. Reviewed-by: Dave Chinner <dchinner@redhat.com> -- Dave Chinner david@fromorbit.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-03 14:28 [PATCH v3 0/4] Clean up xfs_attr_sf_entry Carlos Maiolino ` (2 preceding siblings ...) 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:28 ` Carlos Maiolino 2020-09-03 14:33 ` Christoph Hellwig 3 siblings, 1 reply; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 14:28 UTC (permalink / raw) To: linux-xfs 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> --- 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() fs/xfs/libxfs/xfs_attr.c | 14 +++++++++++--- 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, 41 insertions(+), 25 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 2e055c079f397..982014499f1ff 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,14 @@ 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 +563,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 fb05c77fc8c9f..05d1f221d4119 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( + bytes += xfs_attr_sf_entsize_byname( name_loc->namelen, be16_to_cpu(name_loc->valuelen)); } @@ -1049,7 +1049,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..cb0b4801b7c7a 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 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions 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 0 siblings, 1 reply; 20+ messages in thread From: Christoph Hellwig @ 2020-09-03 14:33 UTC (permalink / raw) To: Carlos Maiolino; +Cc: linux-xfs On Thu, Sep 03, 2020 at 04:28:39PM +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> > --- > > 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() > > fs/xfs/libxfs/xfs_attr.c | 14 +++++++++++--- > 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, 41 insertions(+), 25 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 2e055c079f397..982014499f1ff 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,14 @@ 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); The { should go on a line by its own. > +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); No need for the braces around sfep. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v3 4/4] xfs: Convert xfs_attr_sf macros to inline functions 2020-09-03 14:33 ` Christoph Hellwig @ 2020-09-03 16:05 ` Carlos Maiolino 0 siblings, 0 replies; 20+ messages in thread From: Carlos Maiolino @ 2020-09-03 16:05 UTC (permalink / raw) To: Christoph Hellwig; +Cc: linux-xfs On Thu, Sep 03, 2020 at 03:33:09PM +0100, Christoph Hellwig wrote: > On Thu, Sep 03, 2020 at 04:28:39PM +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> > > --- > > > > 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() > > > > fs/xfs/libxfs/xfs_attr.c | 14 +++++++++++--- > > 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, 41 insertions(+), 25 deletions(-) > > > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > > index 2e055c079f397..982014499f1ff 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,14 @@ 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); > > The { should go on a line by its own. Sorry, I forgot to modify this one > > > +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); > > No need for the braces around sfep. > I'll resend, thanks -- Carlos ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2020-09-07 11:47 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox