diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/xattr.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 9b6b2b6dd164..be661d8f532a 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c | |||
@@ -675,17 +675,18 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value, | |||
675 | if (!ceph_is_valid_xattr(name)) | 675 | if (!ceph_is_valid_xattr(name)) |
676 | return -ENODATA; | 676 | return -ENODATA; |
677 | 677 | ||
678 | spin_lock(&ci->i_ceph_lock); | ||
679 | dout("getxattr %p ver=%lld index_ver=%lld\n", inode, | ||
680 | ci->i_xattrs.version, ci->i_xattrs.index_version); | ||
681 | 678 | ||
682 | /* let's see if a virtual xattr was requested */ | 679 | /* let's see if a virtual xattr was requested */ |
683 | vxattr = ceph_match_vxattr(inode, name); | 680 | vxattr = ceph_match_vxattr(inode, name); |
684 | if (vxattr && !(vxattr->exists_cb && !vxattr->exists_cb(ci))) { | 681 | if (vxattr && !(vxattr->exists_cb && !vxattr->exists_cb(ci))) { |
685 | err = vxattr->getxattr_cb(ci, value, size); | 682 | err = vxattr->getxattr_cb(ci, value, size); |
686 | goto out; | 683 | return err; |
687 | } | 684 | } |
688 | 685 | ||
686 | spin_lock(&ci->i_ceph_lock); | ||
687 | dout("getxattr %p ver=%lld index_ver=%lld\n", inode, | ||
688 | ci->i_xattrs.version, ci->i_xattrs.index_version); | ||
689 | |||
689 | if (__ceph_caps_issued_mask(ci, CEPH_CAP_XATTR_SHARED, 1) && | 690 | if (__ceph_caps_issued_mask(ci, CEPH_CAP_XATTR_SHARED, 1) && |
690 | (ci->i_xattrs.index_version >= ci->i_xattrs.version)) { | 691 | (ci->i_xattrs.index_version >= ci->i_xattrs.version)) { |
691 | goto get_xattr; | 692 | goto get_xattr; |