xfs: factor out a xfs_attr_match helper
Factor out a helper that compares an on-disk attr vs the name, length and flags specified in struct xfs_da_args. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Chandan Rajendra <chandanrlinux@gmail.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
1d73301994
commit
377f16ac67
|
@ -445,14 +445,21 @@ xfs_attr3_leaf_read(
|
|||
* Namespace helper routines
|
||||
*========================================================================*/
|
||||
|
||||
/*
|
||||
* If namespace bits don't match return 0.
|
||||
* If all match then return 1.
|
||||
*/
|
||||
STATIC int
|
||||
xfs_attr_namesp_match(int arg_flags, int ondisk_flags)
|
||||
static bool
|
||||
xfs_attr_match(
|
||||
struct xfs_da_args *args,
|
||||
uint8_t namelen,
|
||||
unsigned char *name,
|
||||
int flags)
|
||||
{
|
||||
return XFS_ATTR_NSP_ONDISK(ondisk_flags) == XFS_ATTR_NSP_ARGS_TO_ONDISK(arg_flags);
|
||||
if (args->namelen != namelen)
|
||||
return false;
|
||||
if (memcmp(args->name, name, namelen) != 0)
|
||||
return false;
|
||||
if (XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags) !=
|
||||
XFS_ATTR_NSP_ONDISK(flags))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -678,15 +685,8 @@ xfs_attr_shortform_add(xfs_da_args_t *args, int forkoff)
|
|||
sf = (xfs_attr_shortform_t *)ifp->if_u1.if_data;
|
||||
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)
|
||||
continue;
|
||||
if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, sfe->flags))
|
||||
continue;
|
||||
ASSERT(0);
|
||||
#endif
|
||||
ASSERT(!xfs_attr_match(args, sfe->namelen, sfe->nameval,
|
||||
sfe->flags));
|
||||
}
|
||||
|
||||
offset = (char *)sfe - (char *)sf;
|
||||
|
@ -749,13 +749,9 @@ 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)
|
||||
continue;
|
||||
if (memcmp(sfe->nameval, args->name, args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, sfe->flags))
|
||||
continue;
|
||||
break;
|
||||
if (xfs_attr_match(args, sfe->namelen, sfe->nameval,
|
||||
sfe->flags))
|
||||
break;
|
||||
}
|
||||
if (i == end)
|
||||
return -ENOATTR;
|
||||
|
@ -816,13 +812,9 @@ 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)
|
||||
continue;
|
||||
if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, sfe->flags))
|
||||
continue;
|
||||
return -EEXIST;
|
||||
if (xfs_attr_match(args, sfe->namelen, sfe->nameval,
|
||||
sfe->flags))
|
||||
return -EEXIST;
|
||||
}
|
||||
return -ENOATTR;
|
||||
}
|
||||
|
@ -847,14 +839,10 @@ 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)
|
||||
continue;
|
||||
if (memcmp(args->name, sfe->nameval, args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, sfe->flags))
|
||||
continue;
|
||||
return xfs_attr_copy_value(args, &sfe->nameval[args->namelen],
|
||||
sfe->valuelen);
|
||||
if (xfs_attr_match(args, sfe->namelen, sfe->nameval,
|
||||
sfe->flags))
|
||||
return xfs_attr_copy_value(args,
|
||||
&sfe->nameval[args->namelen], sfe->valuelen);
|
||||
}
|
||||
return -ENOATTR;
|
||||
}
|
||||
|
@ -2409,23 +2397,15 @@ 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)
|
||||
continue;
|
||||
if (memcmp(args->name, name_loc->nameval,
|
||||
args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, entry->flags))
|
||||
if (!xfs_attr_match(args, name_loc->namelen,
|
||||
name_loc->nameval, entry->flags))
|
||||
continue;
|
||||
args->index = probe;
|
||||
return -EEXIST;
|
||||
} else {
|
||||
name_rmt = xfs_attr3_leaf_name_remote(leaf, probe);
|
||||
if (name_rmt->namelen != args->namelen)
|
||||
continue;
|
||||
if (memcmp(args->name, name_rmt->name,
|
||||
args->namelen) != 0)
|
||||
continue;
|
||||
if (!xfs_attr_namesp_match(args->flags, entry->flags))
|
||||
if (!xfs_attr_match(args, name_rmt->namelen,
|
||||
name_rmt->name, entry->flags))
|
||||
continue;
|
||||
args->index = probe;
|
||||
args->rmtvaluelen = be32_to_cpu(name_rmt->valuelen);
|
||||
|
|
Loading…
Reference in New Issue