Re: [RFC PATCH] ceph: don't list vxattrs in listxattr()

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

 



Jeff Layton <jlayton@xxxxxxxxxx> writes:

(CC'ing David)

> Most filesystems that provide virtual xattrs (e.g. CIFS) don't display
> them via listxattr(). Ceph does, and that causes some of the tests in
> xfstests to fail.
>
> Have cephfs stop listing vxattrs in listxattr. Userspace can always
> query them directly when the name is known.

I don't see a problem with this, unless we already have applications
relying on this behaviour.  The first thing that came to my mind was
samba, but I guess David can probably confirm whether this is true or
not.

If we're unable to stop listing there xattrs, the other option for
fixing the xfstests that _may_ be acceptable by the maintainers is to
use an output filter (lots of examples in common/filter).

Cheers,
-- 
Luis

>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
>  fs/ceph/xattr.c | 29 -----------------------------
>  1 file changed, 29 deletions(-)
>
> diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
> index 939eab7aa219..2fba06b50f25 100644
> --- a/fs/ceph/xattr.c
> +++ b/fs/ceph/xattr.c
> @@ -903,11 +903,9 @@ ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
>  {
>  	struct inode *inode = d_inode(dentry);
>  	struct ceph_inode_info *ci = ceph_inode(inode);
> -	struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode);
>  	bool len_only = (size == 0);
>  	u32 namelen;
>  	int err;
> -	int i;
>  
>  	spin_lock(&ci->i_ceph_lock);
>  	dout("listxattr %p ver=%lld index_ver=%lld\n", inode,
> @@ -936,33 +934,6 @@ ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
>  		names = __copy_xattr_names(ci, names);
>  		size -= namelen;
>  	}
> -
> -
> -	/* virtual xattr names, too */
> -	if (vxattrs) {
> -		for (i = 0; vxattrs[i].name; i++) {
> -			size_t this_len;
> -
> -			if (vxattrs[i].flags & VXATTR_FLAG_HIDDEN)
> -				continue;
> -			if (vxattrs[i].exists_cb && !vxattrs[i].exists_cb(ci))
> -				continue;
> -
> -			this_len = strlen(vxattrs[i].name) + 1;
> -			namelen += this_len;
> -			if (len_only)
> -				continue;
> -
> -			if (this_len > size) {
> -				err = -ERANGE;
> -				goto out;
> -			}
> -
> -			memcpy(names, vxattrs[i].name, this_len);
> -			names += this_len;
> -			size -= this_len;
> -		}
> -	}
>  	err = namelen;
>  out:
>  	spin_unlock(&ci->i_ceph_lock);



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

  Powered by Linux