summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-07-25 12:33:51 +0800
committerYan, Zheng <zheng.z.yan@intel.com>2013-08-05 11:09:07 +0800
commit0c22dade2481af5431c3ce06a2e2329937225a95 (patch)
tree2df3ee61b5d1dbe01f2b1207287390a1a9f4b61e
parent8f67adfb696714ae23c1ed4661bef8ab9817f3e2 (diff)
downloadceph-0c22dade2481af5431c3ce06a2e2329937225a95.tar.gz
mds: don't issue caps while session is stale
Locker::issue_caps() does not issue new caps to stale client, CInode::encode_inodestat() should have the same logical. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/CInode.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc
index d215d18690f..dd483263b6d 100644
--- a/src/mds/CInode.cc
+++ b/src/mds/CInode.cc
@@ -2733,10 +2733,12 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
// do not issue caps if inode differs from readdir snaprealm
SnapRealm *realm = find_snaprealm();
- bool no_caps = (realm && dir_realm && realm != dir_realm) ||
+ bool no_caps = session->is_stale() ||
+ (realm && dir_realm && realm != dir_realm) ||
is_frozen() || state_test(CInode::STATE_EXPORTINGCAPS);
if (no_caps)
dout(20) << "encode_inodestat no caps"
+ << (session->is_stale()?", session stale ":"")
<< ((realm && dir_realm && realm != dir_realm)?", snaprealm differs ":"")
<< (state_test(CInode::STATE_EXPORTINGCAPS)?", exporting caps":"")
<< (is_frozen()?", frozen inode":"") << dendl;