From: Allison Collins <allison.henderson@oracle.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH v7 02/19] xfs: Embed struct xfs_name in xfs_da_args
Date: Sat, 22 Feb 2020 19:05:54 -0700 [thread overview]
Message-ID: <20200223020611.1802-3-allison.henderson@oracle.com> (raw)
In-Reply-To: <20200223020611.1802-1-allison.henderson@oracle.com>
This patch embeds an xfs_name in xfs_da_args, replacing the name, namelen, and flags
members. This helps to clean up the xfs_da_args structure and make it more uniform
with the new xfs_name parameter being passed around.
Signed-off-by: Allison Collins <allison.henderson@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
---
fs/xfs/libxfs/xfs_attr.c | 37 +++++++-------
fs/xfs/libxfs/xfs_attr_leaf.c | 104 +++++++++++++++++++++-------------------
fs/xfs/libxfs/xfs_attr_remote.c | 2 +-
fs/xfs/libxfs/xfs_da_btree.c | 6 ++-
fs/xfs/libxfs/xfs_da_btree.h | 4 +-
fs/xfs/libxfs/xfs_dir2.c | 18 +++----
fs/xfs/libxfs/xfs_dir2_block.c | 6 +--
fs/xfs/libxfs/xfs_dir2_leaf.c | 6 +--
fs/xfs/libxfs/xfs_dir2_node.c | 8 ++--
fs/xfs/libxfs/xfs_dir2_sf.c | 30 ++++++------
fs/xfs/scrub/attr.c | 12 ++---
fs/xfs/xfs_trace.h | 20 ++++----
12 files changed, 130 insertions(+), 123 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index 6717f47..9acdb23 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -72,13 +72,12 @@ xfs_attr_args_init(
args->geo = dp->i_mount->m_attr_geo;
args->whichfork = XFS_ATTR_FORK;
args->dp = dp;
- args->flags = flags;
- args->name = name->name;
- args->namelen = name->len;
- if (args->namelen >= MAXNAMELEN)
+ memcpy(&args->name, name, sizeof(struct xfs_name));
+ args->name.type = flags;
+ if (args->name.len >= MAXNAMELEN)
return -EFAULT; /* match IRIX behaviour */
- args->hashval = xfs_da_hashname(args->name, args->namelen);
+ args->hashval = xfs_da_hashname(args->name.name, args->name.len);
return 0;
}
@@ -236,7 +235,7 @@ xfs_attr_try_sf_addname(
* Commit the shortform mods, and we're done.
* NOTE: this is also the error path (EEXIST, etc).
*/
- if (!error && (args->flags & ATTR_KERNOTIME) == 0)
+ if (!error && (args->name.type & ATTR_KERNOTIME) == 0)
xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG);
if (mp->m_flags & XFS_MOUNT_WSYNC)
@@ -357,6 +356,9 @@ xfs_attr_set(
if (error)
return error;
+ /* Use name now stored in args */
+ name = &args.name;
+
args.value = value;
args.valuelen = valuelen;
args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT;
@@ -372,7 +374,7 @@ xfs_attr_set(
*/
if (XFS_IFORK_Q(dp) == 0) {
int sf_size = sizeof(xfs_attr_sf_hdr_t) +
- XFS_ATTR_SF_ENTSIZE_BYNAME(args.namelen, valuelen);
+ XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen);
error = xfs_bmap_add_attrfork(dp, sf_size, rsvd);
if (error)
@@ -457,6 +459,9 @@ xfs_attr_remove(
if (error)
return error;
+ /* Use name now stored in args */
+ name = &args.name;
+
/*
* we have no control over the attribute names that userspace passes us
* to remove, so we have to allow the name lookup prior to attribute
@@ -532,10 +537,10 @@ xfs_attr_shortform_addname(xfs_da_args_t *args)
trace_xfs_attr_sf_addname(args);
retval = xfs_attr_shortform_lookup(args);
- if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
+ if ((args->name.type & ATTR_REPLACE) && (retval == -ENOATTR)) {
return retval;
} else if (retval == -EEXIST) {
- if (args->flags & ATTR_CREATE)
+ if (args->name.type & ATTR_CREATE)
return retval;
retval = xfs_attr_shortform_remove(args);
if (retval)
@@ -545,15 +550,15 @@ xfs_attr_shortform_addname(xfs_da_args_t *args)
* that the leaf format add routine won't trip over the attr
* not being around.
*/
- args->flags &= ~ATTR_REPLACE;
+ args->name.type &= ~ATTR_REPLACE;
}
- if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX ||
+ if (args->name.len >= XFS_ATTR_SF_ENTSIZE_MAX ||
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_ENTSIZE_BYNAME(args->name.len, args->valuelen);
forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize);
if (!forkoff)
@@ -598,11 +603,11 @@ xfs_attr_leaf_addname(
* the given flags produce an error or call for an atomic rename.
*/
retval = xfs_attr3_leaf_lookup_int(bp, args);
- if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
+ if ((args->name.type & ATTR_REPLACE) && (retval == -ENOATTR)) {
xfs_trans_brelse(args->trans, bp);
return retval;
} else if (retval == -EEXIST) {
- if (args->flags & ATTR_CREATE) { /* pure create op */
+ if (args->name.type & ATTR_CREATE) { /* pure create op */
xfs_trans_brelse(args->trans, bp);
return retval;
}
@@ -872,10 +877,10 @@ xfs_attr_node_addname(
goto out;
blk = &state->path.blk[ state->path.active-1 ];
ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC);
- if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
+ if ((args->name.type & ATTR_REPLACE) && (retval == -ENOATTR)) {
goto out;
} else if (retval == -EEXIST) {
- if (args->flags & ATTR_CREATE)
+ if (args->name.type & ATTR_CREATE)
goto out;
trace_xfs_attr_node_replace(args);
diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
index fed537a..cb5ef66 100644
--- a/fs/xfs/libxfs/xfs_attr_leaf.c
+++ b/fs/xfs/libxfs/xfs_attr_leaf.c
@@ -464,7 +464,7 @@ xfs_attr_copy_value(
/*
* No copy if all we have to do is get the length
*/
- if (args->flags & ATTR_KERNOVAL) {
+ if (args->name.type & ATTR_KERNOVAL) {
args->valuelen = valuelen;
return 0;
}
@@ -679,27 +679,27 @@ xfs_attr_shortform_add(xfs_da_args_t *args, int forkoff)
sfe = &sf->list[0];
for (i = 0; i < sf->hdr.count; sfe = XFS_ATTR_SF_NEXTENTRY(sfe), i++) {
#ifdef DEBUG
- if (sfe->namelen != args->namelen)
+ if (sfe->namelen != args->name.len)
continue;
- if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
+ if (memcmp(args->name.name, sfe->nameval, args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, sfe->flags))
+ if (!xfs_attr_namesp_match(args->name.type, sfe->flags))
continue;
ASSERT(0);
#endif
}
offset = (char *)sfe - (char *)sf;
- size = XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen);
+ size = XFS_ATTR_SF_ENTSIZE_BYNAME(args->name.len, 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->namelen = args->namelen;
+ sfe->namelen = args->name.len;
sfe->valuelen = args->valuelen;
- sfe->flags = XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags);
- memcpy(sfe->nameval, args->name, args->namelen);
- memcpy(&sfe->nameval[args->namelen], args->value, args->valuelen);
+ sfe->flags = XFS_ATTR_NSP_ARGS_TO_ONDISK(args->name.type);
+ memcpy(sfe->nameval, args->name.name, args->name.len);
+ memcpy(&sfe->nameval[args->name.len], args->value, args->valuelen);
sf->hdr.count++;
be16_add_cpu(&sf->hdr.totsize, size);
xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_ADATA);
@@ -749,11 +749,11 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
for (i = 0; i < end; sfe = XFS_ATTR_SF_NEXTENTRY(sfe),
base += size, i++) {
size = XFS_ATTR_SF_ENTSIZE(sfe);
- if (sfe->namelen != args->namelen)
+ if (sfe->namelen != args->name.len)
continue;
- if (memcmp(sfe->nameval, args->name, args->namelen) != 0)
+ if (memcmp(sfe->nameval, args->name.name, args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, sfe->flags))
+ if (!xfs_attr_namesp_match(args->name.type, sfe->flags))
continue;
break;
}
@@ -816,11 +816,11 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args)
sfe = &sf->list[0];
for (i = 0; i < sf->hdr.count;
sfe = XFS_ATTR_SF_NEXTENTRY(sfe), i++) {
- if (sfe->namelen != args->namelen)
+ if (sfe->namelen != args->name.len)
continue;
- if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
+ if (memcmp(args->name.name, sfe->nameval, args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, sfe->flags))
+ if (!xfs_attr_namesp_match(args->name.type, sfe->flags))
continue;
return -EEXIST;
}
@@ -847,13 +847,13 @@ xfs_attr_shortform_getvalue(
sfe = &sf->list[0];
for (i = 0; i < sf->hdr.count;
sfe = XFS_ATTR_SF_NEXTENTRY(sfe), i++) {
- if (sfe->namelen != args->namelen)
+ if (sfe->namelen != args->name.len)
continue;
- if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
+ if (memcmp(args->name.name, sfe->nameval, args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, sfe->flags))
+ if (!xfs_attr_namesp_match(args->name.type, sfe->flags))
continue;
- return xfs_attr_copy_value(args, &sfe->nameval[args->namelen],
+ return xfs_attr_copy_value(args, &sfe->nameval[args->name.len],
sfe->valuelen);
}
return -ENOATTR;
@@ -912,13 +912,13 @@ xfs_attr_shortform_to_leaf(
sfe = &sf->list[0];
for (i = 0; i < sf->hdr.count; i++) {
- nargs.name = sfe->nameval;
- nargs.namelen = sfe->namelen;
- nargs.value = &sfe->nameval[nargs.namelen];
+ nargs.name.name = sfe->nameval;
+ nargs.name.len = sfe->namelen;
+ nargs.value = &sfe->nameval[nargs.name.len];
nargs.valuelen = sfe->valuelen;
nargs.hashval = xfs_da_hashname(sfe->nameval,
sfe->namelen);
- nargs.flags = XFS_ATTR_NSP_ONDISK_TO_ARGS(sfe->flags);
+ nargs.name.type = XFS_ATTR_NSP_ONDISK_TO_ARGS(sfe->flags);
error = xfs_attr3_leaf_lookup_int(bp, &nargs); /* set a->index */
ASSERT(error == -ENOATTR);
error = xfs_attr3_leaf_add(bp, &nargs);
@@ -1119,12 +1119,12 @@ xfs_attr3_leaf_to_shortform(
continue;
ASSERT(entry->flags & XFS_ATTR_LOCAL);
name_loc = xfs_attr3_leaf_name_local(leaf, i);
- nargs.name = name_loc->nameval;
- nargs.namelen = name_loc->namelen;
- nargs.value = &name_loc->nameval[nargs.namelen];
+ nargs.name.name = name_loc->nameval;
+ nargs.name.len = name_loc->namelen;
+ nargs.value = &name_loc->nameval[nargs.name.len];
nargs.valuelen = be16_to_cpu(name_loc->valuelen);
nargs.hashval = be32_to_cpu(entry->hashval);
- nargs.flags = XFS_ATTR_NSP_ONDISK_TO_ARGS(entry->flags);
+ nargs.name.type = XFS_ATTR_NSP_ONDISK_TO_ARGS(entry->flags);
xfs_attr_shortform_add(&nargs, forkoff);
}
error = 0;
@@ -1450,7 +1450,7 @@ xfs_attr3_leaf_add_work(
ichdr->freemap[mapindex].size);
entry->hashval = cpu_to_be32(args->hashval);
entry->flags = tmp ? XFS_ATTR_LOCAL : 0;
- entry->flags |= XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags);
+ entry->flags |= XFS_ATTR_NSP_ARGS_TO_ONDISK(args->name.type);
if (args->op_flags & XFS_DA_OP_RENAME) {
entry->flags |= XFS_ATTR_INCOMPLETE;
if ((args->blkno2 == args->blkno) &&
@@ -1474,15 +1474,16 @@ xfs_attr3_leaf_add_work(
*/
if (entry->flags & XFS_ATTR_LOCAL) {
name_loc = xfs_attr3_leaf_name_local(leaf, args->index);
- name_loc->namelen = args->namelen;
+ name_loc->namelen = args->name.len;
name_loc->valuelen = cpu_to_be16(args->valuelen);
- memcpy((char *)name_loc->nameval, args->name, args->namelen);
- memcpy((char *)&name_loc->nameval[args->namelen], args->value,
+ memcpy((char *)name_loc->nameval, args->name.name,
+ args->name.len);
+ memcpy((char *)&name_loc->nameval[args->name.len], args->value,
be16_to_cpu(name_loc->valuelen));
} else {
name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index);
- name_rmt->namelen = args->namelen;
- memcpy((char *)name_rmt->name, args->name, args->namelen);
+ name_rmt->namelen = args->name.len;
+ memcpy((char *)name_rmt->name, args->name.name, args->name.len);
entry->flags |= XFS_ATTR_INCOMPLETE;
/* just in case */
name_rmt->valuelen = 0;
@@ -2409,23 +2410,25 @@ xfs_attr3_leaf_lookup_int(
}
if (entry->flags & XFS_ATTR_LOCAL) {
name_loc = xfs_attr3_leaf_name_local(leaf, probe);
- if (name_loc->namelen != args->namelen)
+ if (name_loc->namelen != args->name.len)
continue;
- if (memcmp(args->name, name_loc->nameval,
- args->namelen) != 0)
+ if (memcmp(args->name.name, name_loc->nameval,
+ args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, entry->flags))
+ if (!xfs_attr_namesp_match(args->name.type,
+ entry->flags))
continue;
args->index = probe;
return -EEXIST;
} else {
name_rmt = xfs_attr3_leaf_name_remote(leaf, probe);
- if (name_rmt->namelen != args->namelen)
+ if (name_rmt->namelen != args->name.len)
continue;
- if (memcmp(args->name, name_rmt->name,
- args->namelen) != 0)
+ if (memcmp(args->name.name, name_rmt->name,
+ args->name.len) != 0)
continue;
- if (!xfs_attr_namesp_match(args->flags, entry->flags))
+ if (!xfs_attr_namesp_match(args->name.type,
+ entry->flags))
continue;
args->index = probe;
args->rmtvaluelen = be32_to_cpu(name_rmt->valuelen);
@@ -2467,16 +2470,17 @@ xfs_attr3_leaf_getvalue(
entry = &xfs_attr3_leaf_entryp(leaf)[args->index];
if (entry->flags & XFS_ATTR_LOCAL) {
name_loc = xfs_attr3_leaf_name_local(leaf, args->index);
- ASSERT(name_loc->namelen == args->namelen);
- ASSERT(memcmp(args->name, name_loc->nameval, args->namelen) == 0);
+ ASSERT(name_loc->namelen == args->name.len);
+ ASSERT(memcmp(args->name.name, name_loc->nameval,
+ args->name.len) == 0);
return xfs_attr_copy_value(args,
- &name_loc->nameval[args->namelen],
+ &name_loc->nameval[args->name.len],
be16_to_cpu(name_loc->valuelen));
}
name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index);
- ASSERT(name_rmt->namelen == args->namelen);
- ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0);
+ ASSERT(name_rmt->namelen == args->name.len);
+ ASSERT(memcmp(args->name.name, name_rmt->name, args->name.len) == 0);
args->rmtvaluelen = be32_to_cpu(name_rmt->valuelen);
args->rmtblkno = be32_to_cpu(name_rmt->valueblk);
args->rmtblkcnt = xfs_attr3_rmt_blocks(args->dp->i_mount,
@@ -2692,7 +2696,7 @@ xfs_attr_leaf_newentsize(
{
int size;
- size = xfs_attr_leaf_entsize_local(args->namelen, args->valuelen);
+ size = xfs_attr_leaf_entsize_local(args->name.len, args->valuelen);
if (size < xfs_attr_leaf_entsize_local_max(args->geo->blksize)) {
if (local)
*local = 1;
@@ -2700,7 +2704,7 @@ xfs_attr_leaf_newentsize(
}
if (local)
*local = 0;
- return xfs_attr_leaf_entsize_remote(args->namelen);
+ return xfs_attr_leaf_entsize_remote(args->name.len);
}
@@ -2754,8 +2758,8 @@ xfs_attr3_leaf_clearflag(
name = (char *)name_rmt->name;
}
ASSERT(be32_to_cpu(entry->hashval) == args->hashval);
- ASSERT(namelen == args->namelen);
- ASSERT(memcmp(name, args->name, namelen) == 0);
+ ASSERT(namelen == args->name.len);
+ ASSERT(memcmp(name, args->name.name, namelen) == 0);
#endif /* DEBUG */
entry->flags &= ~XFS_ATTR_INCOMPLETE;
diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c
index 8b7f74b..df8aca5 100644
--- a/fs/xfs/libxfs/xfs_attr_remote.c
+++ b/fs/xfs/libxfs/xfs_attr_remote.c
@@ -397,7 +397,7 @@ xfs_attr_rmtval_get(
trace_xfs_attr_rmtval_get(args);
- ASSERT(!(args->flags & ATTR_KERNOVAL));
+ ASSERT(!(args->name.type & ATTR_KERNOVAL));
ASSERT(args->rmtvaluelen == args->valuelen);
valuelen = args->rmtvaluelen;
diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c
index 875e04f..30f27d7 100644
--- a/fs/xfs/libxfs/xfs_da_btree.c
+++ b/fs/xfs/libxfs/xfs_da_btree.c
@@ -2125,8 +2125,10 @@ xfs_da_compname(
const unsigned char *name,
int len)
{
- return (args->namelen == len && memcmp(args->name, name, len) == 0) ?
- XFS_CMP_EXACT : XFS_CMP_DIFFERENT;
+ if (args->name.len == len && !memcmp(args->name.name, name, len))
+ return XFS_CMP_EXACT;
+
+ return XFS_CMP_DIFFERENT;
}
int
diff --git a/fs/xfs/libxfs/xfs_da_btree.h b/fs/xfs/libxfs/xfs_da_btree.h
index 0f4fbb0..14f1be3 100644
--- a/fs/xfs/libxfs/xfs_da_btree.h
+++ b/fs/xfs/libxfs/xfs_da_btree.h
@@ -54,12 +54,10 @@ enum xfs_dacmp {
*/
typedef struct xfs_da_args {
struct xfs_da_geometry *geo; /* da block geometry */
- const uint8_t *name; /* string (maybe not NULL terminated) */
- int namelen; /* length of string (maybe no NULL) */
+ struct xfs_name name; /* name, length and argument flags*/
uint8_t filetype; /* filetype of inode for directories */
uint8_t *value; /* set of bytes (maybe contain NULLs) */
int valuelen; /* length of value */
- int flags; /* argument flags (eg: ATTR_NOCREATE) */
xfs_dahash_t hashval; /* hash value of name */
xfs_ino_t inumber; /* input/output inode number */
struct xfs_inode *dp; /* directory inode to manipulate */
diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c
index dd6fcaa..3aadddc 100644
--- a/fs/xfs/libxfs/xfs_dir2.c
+++ b/fs/xfs/libxfs/xfs_dir2.c
@@ -74,14 +74,14 @@ xfs_ascii_ci_compname(
enum xfs_dacmp result;
int i;
- if (args->namelen != len)
+ if (args->name.len != len)
return XFS_CMP_DIFFERENT;
result = XFS_CMP_EXACT;
for (i = 0; i < len; i++) {
- if (args->name[i] == name[i])
+ if (args->name.name[i] == name[i])
continue;
- if (tolower(args->name[i]) != tolower(name[i]))
+ if (tolower(args->name.name[i]) != tolower(name[i]))
return XFS_CMP_DIFFERENT;
result = XFS_CMP_CASE;
}
@@ -265,8 +265,7 @@ xfs_dir_createname(
return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo;
- args->name = name->name;
- args->namelen = name->len;
+ memcpy(&args->name, name, sizeof(struct xfs_name));
args->filetype = name->type;
args->hashval = xfs_dir2_hashname(dp->i_mount, name);
args->inumber = inum;
@@ -361,8 +360,7 @@ xfs_dir_lookup(
*/
args = kmem_zalloc(sizeof(*args), KM_NOFS);
args->geo = dp->i_mount->m_dir_geo;
- args->name = name->name;
- args->namelen = name->len;
+ memcpy(&args->name, name, sizeof(struct xfs_name));
args->filetype = name->type;
args->hashval = xfs_dir2_hashname(dp->i_mount, name);
args->dp = dp;
@@ -433,8 +431,7 @@ xfs_dir_removename(
return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo;
- args->name = name->name;
- args->namelen = name->len;
+ memcpy(&args->name, name, sizeof(struct xfs_name));
args->filetype = name->type;
args->hashval = xfs_dir2_hashname(dp->i_mount, name);
args->inumber = ino;
@@ -494,8 +491,7 @@ xfs_dir_replace(
return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo;
- args->name = name->name;
- args->namelen = name->len;
+ memcpy(&args->name, name, sizeof(struct xfs_name));
args->filetype = name->type;
args->hashval = xfs_dir2_hashname(dp->i_mount, name);
args->inumber = inum;
diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c
index d6ced59..592e47c 100644
--- a/fs/xfs/libxfs/xfs_dir2_block.c
+++ b/fs/xfs/libxfs/xfs_dir2_block.c
@@ -355,7 +355,7 @@ xfs_dir2_block_addname(
if (error)
return error;
- len = xfs_dir2_data_entsize(dp->i_mount, args->namelen);
+ len = xfs_dir2_data_entsize(dp->i_mount, args->name.len);
/*
* Set up pointers to parts of the block.
@@ -539,8 +539,8 @@ xfs_dir2_block_addname(
* Create the new data entry.
*/
dep->inumber = cpu_to_be64(args->inumber);
- dep->namelen = args->namelen;
- memcpy(dep->name, args->name, args->namelen);
+ dep->namelen = args->name.len;
+ memcpy(dep->name, args->name.name, args->name.len);
xfs_dir2_data_put_ftype(dp->i_mount, dep, args->filetype);
tagp = xfs_dir2_data_entry_tag_p(dp->i_mount, dep);
*tagp = cpu_to_be16((char *)dep - (char *)hdr);
diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c
index a131b52..24a7fda 100644
--- a/fs/xfs/libxfs/xfs_dir2_leaf.c
+++ b/fs/xfs/libxfs/xfs_dir2_leaf.c
@@ -653,7 +653,7 @@ xfs_dir2_leaf_addname(
xfs_dir2_leaf_hdr_from_disk(dp->i_mount, &leafhdr, leaf);
ents = leafhdr.ents;
bestsp = xfs_dir2_leaf_bests_p(ltp);
- length = xfs_dir2_data_entsize(dp->i_mount, args->namelen);
+ length = xfs_dir2_data_entsize(dp->i_mount, args->name.len);
/*
* See if there are any entries with the same hash value
@@ -856,8 +856,8 @@ xfs_dir2_leaf_addname(
*/
dep = (xfs_dir2_data_entry_t *)dup;
dep->inumber = cpu_to_be64(args->inumber);
- dep->namelen = args->namelen;
- memcpy(dep->name, args->name, dep->namelen);
+ dep->namelen = args->name.len;
+ memcpy(dep->name, args->name.name, dep->namelen);
xfs_dir2_data_put_ftype(dp->i_mount, dep, args->filetype);
tagp = xfs_dir2_data_entry_tag_p(dp->i_mount, dep);
*tagp = cpu_to_be16((char *)dep - (char *)hdr);
diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
index a0cc5e2..3c74efc 100644
--- a/fs/xfs/libxfs/xfs_dir2_node.c
+++ b/fs/xfs/libxfs/xfs_dir2_node.c
@@ -666,7 +666,7 @@ xfs_dir2_leafn_lookup_for_addname(
ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC) ||
free->hdr.magic == cpu_to_be32(XFS_DIR3_FREE_MAGIC));
}
- length = xfs_dir2_data_entsize(mp, args->namelen);
+ length = xfs_dir2_data_entsize(mp, args->name.len);
/*
* Loop over leaf entries with the right hash value.
*/
@@ -1911,7 +1911,7 @@ xfs_dir2_node_addname_int(
int needscan = 0; /* need to rescan data frees */
__be16 *tagp; /* data entry tag pointer */
- length = xfs_dir2_data_entsize(dp->i_mount, args->namelen);
+ length = xfs_dir2_data_entsize(dp->i_mount, args->name.len);
error = xfs_dir2_node_find_freeblk(args, fblk, &dbno, &fbp, &freehdr,
&findex, length);
if (error)
@@ -1966,8 +1966,8 @@ xfs_dir2_node_addname_int(
/* Fill in the new entry and log it. */
dep = (xfs_dir2_data_entry_t *)dup;
dep->inumber = cpu_to_be64(args->inumber);
- dep->namelen = args->namelen;
- memcpy(dep->name, args->name, dep->namelen);
+ dep->namelen = args->name.len;
+ memcpy(dep->name, args->name.name, dep->namelen);
xfs_dir2_data_put_ftype(dp->i_mount, dep, args->filetype);
tagp = xfs_dir2_data_entry_tag_p(dp->i_mount, dep);
*tagp = cpu_to_be16((char *)dep - (char *)hdr);
diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c
index 7b7f6fb..058c526 100644
--- a/fs/xfs/libxfs/xfs_dir2_sf.c
+++ b/fs/xfs/libxfs/xfs_dir2_sf.c
@@ -387,7 +387,7 @@ xfs_dir2_sf_addname(
/*
* Compute entry (and change in) size.
*/
- incr_isize = xfs_dir2_sf_entsize(dp->i_mount, sfp, args->namelen);
+ incr_isize = xfs_dir2_sf_entsize(dp->i_mount, sfp, args->name.len);
objchange = 0;
/*
@@ -470,7 +470,7 @@ xfs_dir2_sf_addname_easy(
/*
* Grow the in-inode space.
*/
- xfs_idata_realloc(dp, xfs_dir2_sf_entsize(mp, sfp, args->namelen),
+ xfs_idata_realloc(dp, xfs_dir2_sf_entsize(mp, sfp, args->name.len),
XFS_DATA_FORK);
/*
* Need to set up again due to realloc of the inode data.
@@ -480,9 +480,9 @@ xfs_dir2_sf_addname_easy(
/*
* Fill in the new entry.
*/
- sfep->namelen = args->namelen;
+ sfep->namelen = args->name.len;
xfs_dir2_sf_put_offset(sfep, offset);
- memcpy(sfep->name, args->name, sfep->namelen);
+ memcpy(sfep->name, args->name.name, sfep->namelen);
xfs_dir2_sf_put_ino(mp, sfp, sfep, args->inumber);
xfs_dir2_sf_put_ftype(mp, sfep, args->filetype);
@@ -540,7 +540,7 @@ xfs_dir2_sf_addname_hard(
*/
for (offset = args->geo->data_first_offset,
oldsfep = xfs_dir2_sf_firstentry(oldsfp),
- add_datasize = xfs_dir2_data_entsize(mp, args->namelen),
+ add_datasize = xfs_dir2_data_entsize(mp, args->name.len),
eof = (char *)oldsfep == &buf[old_isize];
!eof;
offset = new_offset + xfs_dir2_data_entsize(mp, oldsfep->namelen),
@@ -570,9 +570,9 @@ xfs_dir2_sf_addname_hard(
/*
* Fill in the new entry, and update the header counts.
*/
- sfep->namelen = args->namelen;
+ sfep->namelen = args->name.len;
xfs_dir2_sf_put_offset(sfep, offset);
- memcpy(sfep->name, args->name, sfep->namelen);
+ memcpy(sfep->name, args->name.name, sfep->namelen);
xfs_dir2_sf_put_ino(mp, sfp, sfep, args->inumber);
xfs_dir2_sf_put_ftype(mp, sfep, args->filetype);
sfp->count++;
@@ -615,7 +615,7 @@ xfs_dir2_sf_addname_pick(
int used; /* data bytes used */
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
- size = xfs_dir2_data_entsize(mp, args->namelen);
+ size = xfs_dir2_data_entsize(mp, args->name.len);
offset = args->geo->data_first_offset;
sfep = xfs_dir2_sf_firstentry(sfp);
holefit = 0;
@@ -887,7 +887,7 @@ xfs_dir2_sf_lookup(
/*
* Special case for .
*/
- if (args->namelen == 1 && args->name[0] == '.') {
+ if (args->name.len == 1 && args->name.name[0] == '.') {
args->inumber = dp->i_ino;
args->cmpresult = XFS_CMP_EXACT;
args->filetype = XFS_DIR3_FT_DIR;
@@ -896,8 +896,8 @@ xfs_dir2_sf_lookup(
/*
* Special case for ..
*/
- if (args->namelen == 2 &&
- args->name[0] == '.' && args->name[1] == '.') {
+ if (args->name.len == 2 &&
+ args->name.name[0] == '.' && args->name.name[1] == '.') {
args->inumber = xfs_dir2_sf_get_parent_ino(sfp);
args->cmpresult = XFS_CMP_EXACT;
args->filetype = XFS_DIR3_FT_DIR;
@@ -984,7 +984,7 @@ xfs_dir2_sf_removename(
* Calculate sizes.
*/
byteoff = (int)((char *)sfep - (char *)sfp);
- entsize = xfs_dir2_sf_entsize(mp, sfp, args->namelen);
+ entsize = xfs_dir2_sf_entsize(mp, sfp, args->name.len);
newsize = oldsize - entsize;
/*
* Copy the part if any after the removed entry, sliding it down.
@@ -1085,12 +1085,12 @@ xfs_dir2_sf_replace(
} else
i8elevated = 0;
- ASSERT(args->namelen != 1 || args->name[0] != '.');
+ ASSERT(args->name.len != 1 || args->name.name[0] != '.');
/*
* Replace ..'s entry.
*/
- if (args->namelen == 2 &&
- args->name[0] == '.' && args->name[1] == '.') {
+ if (args->name.len == 2 &&
+ args->name.name[0] == '.' && args->name.name[1] == '.') {
ino = xfs_dir2_sf_get_parent_ino(sfp);
ASSERT(args->inumber != ino);
xfs_dir2_sf_put_parent_ino(sfp, args->inumber);
diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c
index d9f0dd4..d4a9fe4 100644
--- a/fs/xfs/scrub/attr.c
+++ b/fs/xfs/scrub/attr.c
@@ -147,17 +147,17 @@ xchk_xattr_listent(
return;
}
- args.flags = ATTR_KERNOTIME;
+ args.name.type = ATTR_KERNOTIME;
if (flags & XFS_ATTR_ROOT)
- args.flags |= ATTR_ROOT;
+ args.name.type |= ATTR_ROOT;
else if (flags & XFS_ATTR_SECURE)
- args.flags |= ATTR_SECURE;
+ args.name.type |= ATTR_SECURE;
args.geo = context->dp->i_mount->m_attr_geo;
args.whichfork = XFS_ATTR_FORK;
args.dp = context->dp;
- args.name = name;
- args.namelen = namelen;
- args.hashval = xfs_da_hashname(args.name, args.namelen);
+ args.name.name = name;
+ args.name.len = namelen;
+ args.hashval = xfs_da_hashname(args.name.name, args.name.len);
args.trans = context->tp;
args.value = xchk_xattr_valuebuf(sx->sc);
args.valuelen = valuelen;
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index a86be7f..159b8af 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -1633,7 +1633,7 @@ DECLARE_EVENT_CLASS(xfs_da_class,
TP_STRUCT__entry(
__field(dev_t, dev)
__field(xfs_ino_t, ino)
- __dynamic_array(char, name, args->namelen)
+ __dynamic_array(char, name, args->name.len)
__field(int, namelen)
__field(xfs_dahash_t, hashval)
__field(xfs_ino_t, inumber)
@@ -1642,9 +1642,10 @@ DECLARE_EVENT_CLASS(xfs_da_class,
TP_fast_assign(
__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
__entry->ino = args->dp->i_ino;
- if (args->namelen)
- memcpy(__get_str(name), args->name, args->namelen);
- __entry->namelen = args->namelen;
+ if (args->name.len)
+ memcpy(__get_str(name), args->name.name,
+ args->name.len);
+ __entry->namelen = args->name.len;
__entry->hashval = args->hashval;
__entry->inumber = args->inumber;
__entry->op_flags = args->op_flags;
@@ -1697,7 +1698,7 @@ DECLARE_EVENT_CLASS(xfs_attr_class,
TP_STRUCT__entry(
__field(dev_t, dev)
__field(xfs_ino_t, ino)
- __dynamic_array(char, name, args->namelen)
+ __dynamic_array(char, name, args->name.len)
__field(int, namelen)
__field(int, valuelen)
__field(xfs_dahash_t, hashval)
@@ -1707,12 +1708,13 @@ DECLARE_EVENT_CLASS(xfs_attr_class,
TP_fast_assign(
__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
__entry->ino = args->dp->i_ino;
- if (args->namelen)
- memcpy(__get_str(name), args->name, args->namelen);
- __entry->namelen = args->namelen;
+ if (args->name.len)
+ memcpy(__get_str(name), args->name.name,
+ args->name.len);
+ __entry->namelen = args->name.len;
__entry->valuelen = args->valuelen;
__entry->hashval = args->hashval;
- __entry->flags = args->flags;
+ __entry->flags = args->name.type;
__entry->op_flags = args->op_flags;
),
TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "
--
2.7.4
next prev parent reply other threads:[~2020-02-23 2:06 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-23 2:05 [PATCH v7 00/19] xfs: Delayed Ready Attrs Allison Collins
2020-02-23 2:05 ` [PATCH v7 01/19] xfs: Replace attribute parameters with struct xfs_name Allison Collins
2020-02-23 9:34 ` Amir Goldstein
2020-02-23 16:03 ` Allison Collins
2020-02-25 0:49 ` Dave Chinner
2020-02-24 12:08 ` Chandan Rajendra
2020-02-24 16:25 ` Allison Collins
2020-02-24 13:06 ` Brian Foster
2020-02-24 16:25 ` Allison Collins
2020-02-23 2:05 ` Allison Collins [this message]
2020-02-23 11:54 ` [PATCH v7 02/19] xfs: Embed struct xfs_name in xfs_da_args Amir Goldstein
2020-02-23 16:51 ` Allison Collins
2020-02-24 6:50 ` Amir Goldstein
2020-02-24 7:36 ` Allison Collins
2020-02-24 7:43 ` Amir Goldstein
2020-02-25 0:57 ` Dave Chinner
2020-02-25 2:00 ` Allison Collins
2020-02-25 4:06 ` Dave Chinner
2020-02-25 4:19 ` Allison Collins
2020-02-25 4:27 ` Darrick J. Wong
2020-02-25 6:07 ` Allison Collins
2020-02-25 6:30 ` Dave Chinner
2020-02-25 17:21 ` Christoph Hellwig
2020-02-25 6:56 ` Chandan Rajendra
2020-02-25 23:26 ` Allison Collins
2020-02-23 2:05 ` [PATCH v7 03/19] xfs: Add xfs_has_attr and subroutines Allison Collins
2020-02-23 12:20 ` Amir Goldstein
2020-02-23 17:28 ` Allison Collins
2020-02-24 6:58 ` Amir Goldstein
2020-02-25 6:26 ` Dave Chinner
2020-02-25 6:43 ` Amir Goldstein
2020-02-25 22:27 ` Dave Chinner
2020-02-24 13:08 ` Brian Foster
2020-02-24 21:18 ` Allison Collins
2020-02-25 13:25 ` Brian Foster
2020-02-26 2:31 ` Allison Collins
2020-02-25 9:49 ` Chandan Rajendra
2020-02-25 10:15 ` Chandan Rajendra
2020-02-26 2:19 ` Allison Collins
2020-02-26 2:18 ` Allison Collins
2020-02-23 2:05 ` [PATCH v7 04/19] xfs: Check for -ENOATTR or -EEXIST Allison Collins
2020-02-23 12:25 ` Amir Goldstein
2020-02-23 17:33 ` Allison Collins
2020-02-24 13:08 ` Brian Foster
2020-02-24 21:18 ` Allison Collins
2020-02-23 2:05 ` [PATCH v7 05/19] xfs: Factor out new helper functions xfs_attr_rmtval_set Allison Collins
2020-02-25 12:53 ` Chandan Rajendra
2020-02-26 2:20 ` Allison Collins
2020-02-23 2:05 ` [PATCH v7 06/19] xfs: Factor out trans handling in xfs_attr3_leaf_flipflags Allison Collins
2020-02-23 12:30 ` Amir Goldstein
2020-02-23 17:36 ` Allison Collins
2020-02-28 4:56 ` Chandan Rajendra
2020-02-23 2:05 ` [PATCH v7 07/19] xfs: Factor out xfs_attr_leaf_addname helper Allison Collins
2020-02-23 12:42 ` Amir Goldstein
2020-02-23 18:38 ` Allison Collins
2020-02-24 6:38 ` Amir Goldstein
2020-02-24 7:09 ` Allison Collins
2020-02-24 7:27 ` Amir Goldstein
2020-02-25 6:42 ` Dave Chinner
2020-02-25 13:26 ` Brian Foster
2020-02-25 23:26 ` Allison Collins
2020-02-28 6:51 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 08/19] xfs: Refactor xfs_attr_try_sf_addname Allison Collins
2020-02-23 13:04 ` Amir Goldstein
2020-02-23 17:51 ` Allison Collins
2020-02-24 13:08 ` Brian Foster
2020-02-24 21:19 ` Allison Collins
2020-02-28 7:42 ` Chandan Rajendra
2020-02-28 18:14 ` Allison Collins
2020-02-23 2:06 ` [PATCH v7 09/19] xfs: Factor out trans roll from xfs_attr3_leaf_setflag Allison Collins
2020-02-28 7:59 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 10/19] xfs: Factor out xfs_attr_rmtval_invalidate Allison Collins
2020-02-28 10:42 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 11/19] xfs: Factor out trans roll in xfs_attr3_leaf_clearflag Allison Collins
2020-02-28 10:56 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 12/19] xfs: Add helper function xfs_attr_rmtval_unmap Allison Collins
2020-02-24 13:40 ` Brian Foster
2020-02-24 21:44 ` Allison Collins
2020-02-25 13:27 ` Brian Foster
2020-02-26 3:29 ` Allison Collins
2020-02-26 13:47 ` Brian Foster
2020-02-25 7:21 ` Dave Chinner
2020-02-25 23:27 ` Allison Collins
2020-02-28 14:22 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 13/19] xfs: Add delay ready attr remove routines Allison Collins
2020-02-24 15:25 ` Brian Foster
2020-02-24 17:03 ` Brian Foster
2020-02-24 23:14 ` Allison Collins
2020-02-24 23:56 ` Darrick J. Wong
2020-02-25 13:34 ` Brian Foster
2020-02-26 5:36 ` Allison Collins
2020-02-26 13:48 ` Brian Foster
2020-02-26 19:23 ` Allison Collins
2020-02-25 8:57 ` Dave Chinner
2020-02-26 0:57 ` Allison Collins
2020-02-26 22:34 ` Dave Chinner
2020-02-27 4:18 ` Allison Collins
2020-03-03 5:03 ` Chandan Rajendra
2020-03-03 5:40 ` Allison Collins
2020-02-23 2:06 ` [PATCH v7 14/19] xfs: Add delay ready attr set routines Allison Collins
2020-03-03 13:41 ` Chandan Rajendra
2020-03-03 17:07 ` Allison Collins
2020-02-23 2:06 ` [PATCH v7 15/19] xfs: Add helper function xfs_attr_node_shrink Allison Collins
2020-02-23 13:22 ` Amir Goldstein
2020-02-23 18:41 ` Allison Collins
2020-02-25 9:05 ` Dave Chinner
2020-02-26 1:48 ` Allison Collins
2020-02-23 2:06 ` [PATCH v7 16/19] xfs: Simplify xfs_attr_set_iter Allison Collins
2020-02-23 13:26 ` Amir Goldstein
2020-02-23 18:42 ` Allison Collins
2020-02-25 9:21 ` Dave Chinner
2020-02-26 2:13 ` Allison Collins
2020-02-26 22:39 ` Dave Chinner
2020-03-04 4:30 ` Chandan Rajendra
2020-03-04 17:04 ` Allison Collins
2020-03-05 3:39 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 17/19] xfs: Add helper function xfs_attr_leaf_mark_incomplete Allison Collins
2020-02-23 13:47 ` Amir Goldstein
2020-02-23 18:43 ` Allison Collins
2020-02-25 9:31 ` Dave Chinner
2020-02-26 2:17 ` Allison Collins
2020-03-04 4:37 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 18/19] xfs: Add remote block helper functions Allison Collins
2020-02-23 13:45 ` Amir Goldstein
2020-03-04 4:59 ` Chandan Rajendra
2020-02-23 2:06 ` [PATCH v7 19/19] xfs: Remove xfs_attr_rmtval_remove Allison Collins
2020-02-23 13:54 ` Amir Goldstein
2020-02-23 18:50 ` Allison Collins
2020-02-23 7:55 ` [PATCH v7 00/19] xfs: Delayed Ready Attrs Amir Goldstein
2020-02-23 16:02 ` Allison Collins
2020-02-24 6:30 ` Amir Goldstein
2020-02-24 16:23 ` Allison Collins
2020-02-25 5:53 ` Amir Goldstein
2020-02-24 8:31 ` Chandan Rajendra
2020-02-25 9:52 ` Dave Chinner
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=20200223020611.1802-3-allison.henderson@oracle.com \
--to=allison.henderson@oracle.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