diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-07-25 12:33:51 +0800 |
---|---|---|
committer | Yan, Zheng <zheng.z.yan@intel.com> | 2013-08-05 11:09:07 +0800 |
commit | 0c22dade2481af5431c3ce06a2e2329937225a95 (patch) | |
tree | 2df3ee61b5d1dbe01f2b1207287390a1a9f4b61e /src/mds | |
parent | 8f67adfb696714ae23c1ed4661bef8ab9817f3e2 (diff) | |
download | ceph-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>
Diffstat (limited to 'src/mds')
-rw-r--r-- | src/mds/CInode.cc | 4 |
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; |