Project

General

Profile

Actions

Bug #18877

closed

mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_logged

Added by Zhi Zhang about 7 years ago. Updated over 6 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
% Done:

0%

Source:
Community (dev)
Tags:
Backport:
jewel, kraken
Regression:
No
Severity:
2 - major
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
MDS
Labels (FS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

This issue was found by testing another PR (https://github.com/ceph/ceph/pull/12792), which makes MDS directly uses TCMALLOC, not boost::pool. When the version of TCMALLOC is 4.2.6 or above, removing directory will cause MDS crash.

assert((o->lru_list == & lru_pintail) || (o->lru_list ==&lru_top) || (o->lru_list == &lru_b))

The root cause is that in StrayManager::_purge_stray_logged, inode will delete itself firstly, then it tries to drop dentry via this deleted inode. I think it should be the new version of TCMALLOC to expose this issue more easily and obviously.

The fix here is to reorder the dropping sequence. Tests have passed with following test cases:

1. boost::pool with TCMALLOC 4.2.6
2. only TCMALLOC 4.2.6
3. boost::pool with TCMALLOC 4.1.2
4. only TCMALLOC 4.1.2


Related issues 2 (0 open2 closed)

Copied to CephFS - Backport #18949: jewel: mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_loggedResolvedNathan CutlerActions
Copied to CephFS - Backport #18950: kraken: mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_loggedResolvedNathan CutlerActions
Actions #2

Updated by Zhi Zhang about 7 years ago

  • Subject changed from mds/StrayManager: aviod reusing deleted inode in StrayManager::_purge_stray_logged to mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_logged
Actions #3

Updated by John Spray about 7 years ago

  • Backport changed from jewel to jewel, kraken
Actions #4

Updated by John Spray about 7 years ago

  • Status changed from New to Pending Backport
Actions #5

Updated by Loïc Dachary about 7 years ago

  • Copied to Backport #18949: jewel: mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_logged added
Actions #6

Updated by Loïc Dachary about 7 years ago

  • Copied to Backport #18950: kraken: mds/StrayManager: avoid reusing deleted inode in StrayManager::_purge_stray_logged added
Actions #7

Updated by Nathan Cutler over 6 years ago

  • Status changed from Pending Backport to Resolved
Actions

Also available in: Atom PDF