From ff9e24f9b5ecdd9c9680308e767cd5743f71bcc1 Mon Sep 17 00:00:00 2001 From: Zhi Zhang Date: Tue, 12 Feb 2019 10:44:31 +0800 Subject: [PATCH] mds: fix potential re-evaluate stray dentry in _unlink_local_finish If MDS handles cap release before _unlink_local_finish, then when MDS processes _unlink_local_finish, eval_stray might be re-entered twice, so this will cause crashing. Fixes: http://tracker.ceph.com/issues/38263 Signed-off-by: Zhi Zhang (cherry picked from commit 72c93baac64211e9f02fa01e743451bf5d63d7a6) Conflicts: src/mds/MDCache.h : Resolved in notify_stray --- src/mds/MDCache.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 6b23ca0781fd..04f5b6a55da9 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -192,6 +192,9 @@ public: */ void notify_stray(CDentry *dn) { assert(dn->get_dir()->get_inode()->is_stray()); + if (dn->state_test(CDentry::STATE_PURGING)) + return; + stray_manager.eval_stray(dn); } -- 2.47.3