summaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2014-04-21 15:46:37 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2014-06-06 09:29:55 +0800
commitca665e0282ece4f8121ab4de474351f291fa8c2d (patch)
treed2ad463509ad678de715e5f5d568de2c8bb03374 /fs/ceph
parent8d08503c130e96e3794f66fe47053051460b1584 (diff)
downloadlinux-ca665e0282ece4f8121ab4de474351f291fa8c2d.tar.gz
linux-ca665e0282ece4f8121ab4de474351f291fa8c2d.tar.bz2
linux-ca665e0282ece4f8121ab4de474351f291fa8c2d.zip
mds: check cap ID when handling cap export message
handle following sequence of events: - mds0 exports an inode to mds1. client receives the cap import message from mds1. caps from mds0 are removed while handling the cap import message. - mds1 exports an inode to mds0. client receives the cap export message from mds1. handle_cap_export() adds placeholder caps for mds0 - client receives the first cap export message (for exporting inode from mds0 to mds1) Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/caps.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 9f2c99c34e92..1fde164b74b5 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -2805,7 +2805,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
retry:
spin_lock(&ci->i_ceph_lock);
cap = __get_cap_for_mds(ci, mds);
- if (!cap)
+ if (!cap || cap->cap_id != le64_to_cpu(ex->cap_id))
goto out_unlock;
if (target < 0) {