|
@@ -675,17 +675,18 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value,
|
|
|
if (!ceph_is_valid_xattr(name))
|
|
|
return -ENODATA;
|
|
|
|
|
|
- spin_lock(&ci->i_ceph_lock);
|
|
|
- dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
|
|
|
- ci->i_xattrs.version, ci->i_xattrs.index_version);
|
|
|
|
|
|
/* let's see if a virtual xattr was requested */
|
|
|
vxattr = ceph_match_vxattr(inode, name);
|
|
|
if (vxattr && !(vxattr->exists_cb && !vxattr->exists_cb(ci))) {
|
|
|
err = vxattr->getxattr_cb(ci, value, size);
|
|
|
- goto out;
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
+ spin_lock(&ci->i_ceph_lock);
|
|
|
+ dout("getxattr %p ver=%lld index_ver=%lld\n", inode,
|
|
|
+ ci->i_xattrs.version, ci->i_xattrs.index_version);
|
|
|
+
|
|
|
if (__ceph_caps_issued_mask(ci, CEPH_CAP_XATTR_SHARED, 1) &&
|
|
|
(ci->i_xattrs.index_version >= ci->i_xattrs.version)) {
|
|
|
goto get_xattr;
|