Project

General

Profile

Bug #41419

mds: missing dirfrag damaged check before CDir::fetch

Added by Zheng Yan 26 days ago. Updated 24 days ago.

Status:
New
Priority:
High
Assignee:
-
Category:
-
Target version:
Start date:
Due date:
% Done:

0%

Source:
Development
Tags:
Backport:
nautilus,mimic
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
MDS
Labels (FS):
Pull request ID:

Description

we don't have damaged check before every CDir::fetch. It can cause request leak.

An user encountered following crash when he handles damaged dirfrags.

 ceph version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)
 1: (()+0x5c15b4) [0x564a1d4e65b4]
 2: (()+0x11390) [0x7f991a947390]
 3: (gsignal()+0x38) [0x7f99198d7428]
 4: (abort()+0x16a) [0x7f99198d902a]
 5: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x28e) [0x564a1d52c93e]
 6: (Session::~Session()+0x3e6) [0x564a1d1caf76]
 7: (Session::~Session()+0x9) [0x564a1d1cb009]
 8: (RefCountedObject::put() const+0xfc) [0x564a1d1c879c]
 9: (SessionMap::remove_session(Session*)+0x311) [0x564a1d4631e1]
 10: (Server::_session_logged(Session*, unsigned long, bool, unsigned long, interval_set<inodeno_t, std::map<inodeno_t, inodeno_t, std::less<inodeno_t>, std::allocator<std::pair<inodeno_t const, inodeno_t> > > >&, unsigned long)+0xbef) [0x564a1d22339f]
 11: (C_MDS_session_finish::finish(int)+0x2c) [0x564a1d27d4ec]
 12: (MDSIOContextBase::complete(int)+0x98) [0x564a1d46c6b8]
 13: (MDSLogContextBase::complete(int)+0x40) [0x564a1d46ca30]
 14: (Finisher::finisher_thread_entry()+0x460) [0x564a1d52b8f0]
 15: (()+0x76ba) [0x7f991a93d6ba]
 16: (clone()+0x6d) [0x7f99199a941d]
 NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.

History

#1 Updated by Zheng Yan 26 days ago

another option is make sure all type of callback contexts (passing to CDir::fetch) handle error code

#2 Updated by Patrick Donnelly 24 days ago

  • Priority changed from Normal to High
  • Target version set to v15.0.0
  • Start date deleted (08/24/2019)
  • Source set to Development
  • Backport set to nautilus,mimic
  • Component(FS) MDS added

#3 Updated by Patrick Donnelly 24 days ago

  • Assignee set to Ramana Raja

#4 Updated by Zheng Yan 24 days ago

  • Assignee deleted (Ramana Raja)

0> 2019-08-23 15:51:03.871241 7f990ee3e700 -1 /build/ceph-12.2.8/src/include/elist.h: In function 'elist<T>::~elist() [with T = MDRequestImpl*]' thread 7f990ee3e700 time 2019-08-23 15:51:03.860523
/build/ceph-12.2.8/src/include/elist.h: 92: FAILED assert(_head.empty())

Also available in: Atom PDF