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);