Re: [RFC 1/2] ceph: introduce 'ceph.all' virtual xattr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 21, 2016 at 2:49 PM, Venky Shankar <vshankar@xxxxxxxxxx> wrote:
> As of now listing extended attributes result in ceph dump all of
> it's internal xattrs thereby confusing tools such as rsync and the
> likes. This functionality would be removed in the subsequent patch,
> but there needs to be a way to examine ceph's internal xattr.
>
> Remembering all internal xattrs is cumbersome and error prone, so,
> we provide a virtual xattr to fetch a list of ceph's internal xattr,
> obviously excluding itself.
>
> Signed-off-by: Venky Shankar <vshankar@xxxxxxxxxx>
> ---
>  fs/ceph/xattr.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 54 insertions(+)
>
> diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
> index 4870b29..d0f59cb 100644
> --- a/fs/ceph/xattr.c
> +++ b/fs/ceph/xattr.c
> @@ -204,7 +204,45 @@ static size_t ceph_vxattrcb_dir_rctime(struct ceph_inode_info *ci, char *val,
>                         (long)ci->i_rctime.tv_nsec);
>  }
>
> +static struct ceph_vxattr *ceph_inode_vxattrs(struct inode *inode);
> +static size_t ceph_vxattrs_name_size(struct ceph_vxattr *vxattrs);
>
> +/* list all ceph internal xattrs */
> +static size_t ceph_vxattrcb_list_all(struct ceph_inode_info *ci, char *val,
> +                                     size_t size)
> +{
> +        struct inode *inode = &ci->vfs_inode;
> +        struct ceph_vxattr *vxattr;
> +        struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode);
> +        u32 len, namelen;
> +        int err = 0;
> +
> +        if (!vxattrs)
> +                goto out;
> +
> +        namelen = ceph_vxattrs_name_size(vxattrs);
> +
> +        err = -ERANGE;
> +        if (size && (namelen > size))
> +                goto out;
> +        err = namelen;
> +        if (size == 0)
> +                goto out;
> +
> +        /* fill up buffer with virtual xattrs */
> +        for (err = 0, vxattr = vxattrs; vxattr->name; vxattr++) {
> +                if (!vxattr->hidden && !(vxattr->exists_cb
> +                                         && !vxattr->exists_cb(ci))) {
> +                        len = snprintf(val + err, size - err, "%s", vxattr->name);
> +                        err += len + 1;
> +                }
> +        }
> +
> + out:
> +        return err;
> +}
> +
> +#define CEPH_XATTR_LIST_INTERNAL  XATTR_CEPH_PREFIX"all"

I prefer name ceph.list

>  #define CEPH_XATTR_NAME(_type, _name)  XATTR_CEPH_PREFIX #_type "." #_name
>  #define CEPH_XATTR_NAME2(_type, _name, _name2) \
>         XATTR_CEPH_PREFIX #_type "." #_name "." #_name2
> @@ -237,6 +275,14 @@ static struct ceph_vxattr ceph_dir_vxattrs[] = {
>                 .hidden = true,
>                 .exists_cb = ceph_vxattrcb_layout_exists,
>         },
> +        {
> +                .name = CEPH_XATTR_LIST_INTERNAL,
> +                .name_size = sizeof(CEPH_XATTR_LIST_INTERNAL),
> +                .getxattr_cb = ceph_vxattrcb_list_all,
> +                .readonly = true,
> +                .hidden = true,
> +                .exists_cb = NULL,
> +        },
>         XATTR_LAYOUT_FIELD(dir, layout, stripe_unit),
>         XATTR_LAYOUT_FIELD(dir, layout, stripe_count),
>         XATTR_LAYOUT_FIELD(dir, layout, object_size),
> @@ -264,6 +310,14 @@ static struct ceph_vxattr ceph_file_vxattrs[] = {
>                 .hidden = true,
>                 .exists_cb = ceph_vxattrcb_layout_exists,
>         },
> +        {
> +                .name = CEPH_XATTR_LIST_INTERNAL,
> +                .name_size = sizeof(CEPH_XATTR_LIST_INTERNAL),
> +                .getxattr_cb = ceph_vxattrcb_list_all,
> +                .readonly = true,
> +                .hidden = true,
> +                .exists_cb = NULL,
> +        },
>         XATTR_LAYOUT_FIELD(file, layout, stripe_unit),
>         XATTR_LAYOUT_FIELD(file, layout, stripe_count),
>         XATTR_LAYOUT_FIELD(file, layout, object_size),


Need to change the 'hidden' attribute of all other vxattrs to false.

Regards
Yan, Zheng


> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux