]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
mds: properly eval locks after importing inode 19414/head
authorYan, Zheng <zyan@redhat.com>
Sat, 9 Dec 2017 06:09:24 +0000 (14:09 +0800)
committerYan, Zheng <zyan@redhat.com>
Sat, 9 Dec 2017 07:05:11 +0000 (15:05 +0800)
commitdebb556076c5685f0d8bb8029a95684b9e552eb8
treedc21c6eb5875eee5093f69f9a9c220acb525c3a5
parent8a6434c20e7451d4f2101c6f9e45bbfe2ab5585a
mds: properly eval locks after importing inode

We should call Locker:eval() for all imported inodes who have non-zero
'wanted caps'. MDS does not properly handle following case.

- client open a inode for read, it send a cap message to MDS.a (the cap
  message updates 'wanted caps')
- MDS.a receive the cap message, the inode is non-auth and is ambiguous
  auth. MDS.a can not request 'wanted caps' from auth mds.
- MDS.a finishes importing the inode from. But no caps are imported and
  mds_caps_wanted map is empty.

The bug can cause read hang.

Fixes: http://tracker.ceph.com/issues/22357
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/mds/Migrator.cc