staging/lustre: Remove unused lustre_acl_xattr_merge2posix()
Apparently this is only used only on the metadata server. Reported-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Oleg Drokin <green@linuxhacker.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f24f47a477
commit
600362f917
|
@ -80,10 +80,6 @@ extern void
|
||||||
lustre_posix_acl_xattr_free(posix_acl_xattr_header *header, int size);
|
lustre_posix_acl_xattr_free(posix_acl_xattr_header *header, int size);
|
||||||
extern void
|
extern void
|
||||||
lustre_ext_acl_xattr_free(ext_acl_xattr_header *header);
|
lustre_ext_acl_xattr_free(ext_acl_xattr_header *header);
|
||||||
extern int
|
|
||||||
lustre_acl_xattr_merge2posix(posix_acl_xattr_header *posix_header, int size,
|
|
||||||
ext_acl_xattr_header *ext_header,
|
|
||||||
posix_acl_xattr_header **out);
|
|
||||||
extern ext_acl_xattr_header *
|
extern ext_acl_xattr_header *
|
||||||
lustre_acl_xattr_merge2ext(posix_acl_xattr_header *posix_header, int size,
|
lustre_acl_xattr_merge2ext(posix_acl_xattr_header *posix_header, int size,
|
||||||
ext_acl_xattr_header *ext_header);
|
ext_acl_xattr_header *ext_header);
|
||||||
|
|
|
@ -286,125 +286,6 @@ again:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Merge the posix ACL and the extended ACL into new posix ACL.
|
|
||||||
*/
|
|
||||||
int lustre_acl_xattr_merge2posix(posix_acl_xattr_header *posix_header, int size,
|
|
||||||
ext_acl_xattr_header *ext_header,
|
|
||||||
posix_acl_xattr_header **out)
|
|
||||||
{
|
|
||||||
int posix_count, posix_size, i, j;
|
|
||||||
int ext_count = le32_to_cpu(ext_header->a_count), pos = 0, rc = 0;
|
|
||||||
posix_acl_xattr_entry pe = {ACL_MASK, 0, ACL_UNDEFINED_ID};
|
|
||||||
posix_acl_xattr_header *new;
|
|
||||||
ext_acl_xattr_entry *ee, ae;
|
|
||||||
|
|
||||||
lustre_posix_acl_cpu_to_le(&pe, &pe);
|
|
||||||
ee = lustre_ext_acl_xattr_search(ext_header, &pe, &pos);
|
|
||||||
if (ee == NULL || le32_to_cpu(ee->e_stat) == ES_DEL) {
|
|
||||||
/* there are only base ACL entries at most. */
|
|
||||||
posix_count = 3;
|
|
||||||
posix_size = CFS_ACL_XATTR_SIZE(posix_count, posix_acl_xattr);
|
|
||||||
new = kzalloc(posix_size, GFP_NOFS);
|
|
||||||
if (unlikely(new == NULL))
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
new->a_version = cpu_to_le32(CFS_ACL_XATTR_VERSION);
|
|
||||||
for (i = 0, j = 0; i < ext_count; i++) {
|
|
||||||
lustre_ext_acl_le_to_cpu(&ae,
|
|
||||||
&ext_header->a_entries[i]);
|
|
||||||
switch (ae.e_tag) {
|
|
||||||
case ACL_USER_OBJ:
|
|
||||||
case ACL_GROUP_OBJ:
|
|
||||||
case ACL_OTHER:
|
|
||||||
if (ae.e_id != ACL_UNDEFINED_ID) {
|
|
||||||
rc = -EIO;
|
|
||||||
goto _out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ae.e_stat != ES_DEL) {
|
|
||||||
new->a_entries[j].e_tag =
|
|
||||||
ext_header->a_entries[i].e_tag;
|
|
||||||
new->a_entries[j].e_perm =
|
|
||||||
ext_header->a_entries[i].e_perm;
|
|
||||||
new->a_entries[j++].e_id =
|
|
||||||
ext_header->a_entries[i].e_id;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ACL_MASK:
|
|
||||||
case ACL_USER:
|
|
||||||
case ACL_GROUP:
|
|
||||||
if (ae.e_stat == ES_DEL)
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
rc = -EIO;
|
|
||||||
goto _out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* maybe there are valid ACL_USER or ACL_GROUP entries in the
|
|
||||||
* original server-side ACL, they are regarded as ES_UNC stat.*/
|
|
||||||
int ori_posix_count;
|
|
||||||
|
|
||||||
if (unlikely(size < 0))
|
|
||||||
return -EINVAL;
|
|
||||||
else if (!size)
|
|
||||||
ori_posix_count = 0;
|
|
||||||
else
|
|
||||||
ori_posix_count =
|
|
||||||
CFS_ACL_XATTR_COUNT(size, posix_acl_xattr);
|
|
||||||
posix_count = ori_posix_count + ext_count;
|
|
||||||
posix_size =
|
|
||||||
CFS_ACL_XATTR_SIZE(posix_count, posix_acl_xattr);
|
|
||||||
new = kzalloc(posix_size, GFP_NOFS);
|
|
||||||
if (unlikely(new == NULL))
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
new->a_version = cpu_to_le32(CFS_ACL_XATTR_VERSION);
|
|
||||||
/* 1. process the unchanged ACL entries
|
|
||||||
* in the original server-side ACL. */
|
|
||||||
pos = 0;
|
|
||||||
for (i = 0, j = 0; i < ori_posix_count; i++) {
|
|
||||||
ee = lustre_ext_acl_xattr_search(ext_header,
|
|
||||||
&posix_header->a_entries[i], &pos);
|
|
||||||
if (ee == NULL)
|
|
||||||
memcpy(&new->a_entries[j++],
|
|
||||||
&posix_header->a_entries[i],
|
|
||||||
sizeof(posix_acl_xattr_entry));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 2. process the non-deleted entries
|
|
||||||
* from client-side extended ACL. */
|
|
||||||
for (i = 0; i < ext_count; i++) {
|
|
||||||
if (le16_to_cpu(ext_header->a_entries[i].e_stat) !=
|
|
||||||
ES_DEL) {
|
|
||||||
new->a_entries[j].e_tag =
|
|
||||||
ext_header->a_entries[i].e_tag;
|
|
||||||
new->a_entries[j].e_perm =
|
|
||||||
ext_header->a_entries[i].e_perm;
|
|
||||||
new->a_entries[j++].e_id =
|
|
||||||
ext_header->a_entries[i].e_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* free unused space. */
|
|
||||||
rc = lustre_posix_acl_xattr_reduce_space(&new, posix_count, j);
|
|
||||||
if (rc >= 0) {
|
|
||||||
posix_size = rc;
|
|
||||||
*out = new;
|
|
||||||
rc = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_out:
|
|
||||||
if (rc) {
|
|
||||||
kfree(new);
|
|
||||||
posix_size = rc;
|
|
||||||
}
|
|
||||||
return posix_size;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(lustre_acl_xattr_merge2posix);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Merge the posix ACL and the extended ACL into new extended ACL.
|
* Merge the posix ACL and the extended ACL into new extended ACL.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue