diff options
author | Yan, Zheng <zyan@redhat.com> | 2014-09-16 21:46:17 +0800 |
---|---|---|
committer | Ilya Dryomov <idryomov@redhat.com> | 2014-10-14 21:03:38 +0400 |
commit | 508b32d8661b12da4c9ca41a9b2054e1dc92fa7e (patch) | |
tree | 81b68ad636814b6ffbc3af1be01276a038b50759 /fs/ceph/super.h | |
parent | b76f82398c1017e303d87760e22125714010207f (diff) | |
download | linux-stable-508b32d8661b12da4c9ca41a9b2054e1dc92fa7e.tar.gz linux-stable-508b32d8661b12da4c9ca41a9b2054e1dc92fa7e.tar.bz2 linux-stable-508b32d8661b12da4c9ca41a9b2054e1dc92fa7e.zip |
ceph: request xattrs if xattr_version is zero
Following sequence of events can happen.
- Client releases an inode, queues cap release message.
- A 'lookup' reply brings the same inode back, but the reply
doesn't contain xattrs because MDS didn't receive the cap release
message and thought client already has up-to-data xattrs.
The fix is force sending a getattr request to MDS if xattrs_version
is 0. The getattr mask is set to CEPH_STAT_CAP_XATTR, so MDS knows client
does not have xattr.
Signed-off-by: Yan, Zheng <zyan@redhat.com>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 12b20744e386..bbb44cdcf1ab 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -714,7 +714,7 @@ extern void ceph_queue_vmtruncate(struct inode *inode); extern void ceph_queue_invalidate(struct inode *inode); extern void ceph_queue_writeback(struct inode *inode); -extern int ceph_do_getattr(struct inode *inode, int mask); +extern int ceph_do_getattr(struct inode *inode, int mask, bool force); extern int ceph_permission(struct inode *inode, int mask); extern int ceph_setattr(struct dentry *dentry, struct iattr *attr); extern int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, |