mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
ceph: getattr before read on ceph.* xattrs
Previously we were returning values for quota, layout xattrs without any kind of update -- the user just got whatever happened to be in our cache. Clearly this extra round trip has a cost, but reads of these xattrs are fairly rare, happening on admin intervention rather than in normal operation. Link: http://tracker.ceph.com/issues/17939 Signed-off-by: "Yan, Zheng" <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
92e57e6287
commit
1684dd03e9
@ -756,6 +756,9 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
|
|||||||
/* let's see if a virtual xattr was requested */
|
/* let's see if a virtual xattr was requested */
|
||||||
vxattr = ceph_match_vxattr(inode, name);
|
vxattr = ceph_match_vxattr(inode, name);
|
||||||
if (vxattr) {
|
if (vxattr) {
|
||||||
|
err = ceph_do_getattr(inode, 0, true);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
err = -ENODATA;
|
err = -ENODATA;
|
||||||
if (!(vxattr->exists_cb && !vxattr->exists_cb(ci)))
|
if (!(vxattr->exists_cb && !vxattr->exists_cb(ci)))
|
||||||
err = vxattr->getxattr_cb(ci, value, size);
|
err = vxattr->getxattr_cb(ci, value, size);
|
||||||
|
Loading…
Reference in New Issue
Block a user