]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: avoid recursive lock of Objecter::rwlock 7343/head
authorYan, Zheng <zyan@redhat.com>
Mon, 25 Jan 2016 07:55:38 +0000 (15:55 +0800)
committerYan, Zheng <zyan@redhat.com>
Mon, 25 Jan 2016 08:12:05 +0000 (16:12 +0800)
Objecter::RequestStateHook::call() already takes read lock of
Objecter::rwlock. Taking read lock again in Objecter::_dump_foo_ops()
can trigger lockdep assertion.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/osdc/Objecter.cc

index 63d89f553ff9585898bf9269812e149be2413fc3..9bfbb06550af743bae2bbeaca1e71e20a8a77e5b 100644 (file)
@@ -4364,7 +4364,6 @@ void Objecter::_dump_ops(const OSDSession *s, Formatter *fmt)
 void Objecter::dump_ops(Formatter *fmt)
 {
   fmt->open_array_section("ops");
-  rwlock.get_read();
   for (map<int, OSDSession *>::const_iterator siter = osd_sessions.begin();
        siter != osd_sessions.end(); ++siter) {
     OSDSession *s = siter->second;
@@ -4372,7 +4371,6 @@ void Objecter::dump_ops(Formatter *fmt)
     _dump_ops(s, fmt);
     s->lock.unlock();
   }
-  rwlock.unlock();
   _dump_ops(homeless_session, fmt);
   fmt->close_section(); // ops array
 }
@@ -4395,7 +4393,6 @@ void Objecter::_dump_linger_ops(const OSDSession *s, Formatter *fmt)
 void Objecter::dump_linger_ops(Formatter *fmt)
 {
   fmt->open_array_section("linger_ops");
-  rwlock.get_read();
   for (map<int, OSDSession *>::const_iterator siter = osd_sessions.begin();
        siter != osd_sessions.end(); ++siter) {
     OSDSession *s = siter->second;
@@ -4403,7 +4400,6 @@ void Objecter::dump_linger_ops(Formatter *fmt)
     _dump_linger_ops(s, fmt);
     s->lock.unlock();
   }
-  rwlock.unlock();
   _dump_linger_ops(homeless_session, fmt);
   fmt->close_section(); // linger_ops array
 }
@@ -4433,7 +4429,6 @@ void Objecter::_dump_command_ops(const OSDSession *s, Formatter *fmt)
 void Objecter::dump_command_ops(Formatter *fmt)
 {
   fmt->open_array_section("command_ops");
-  rwlock.get_read();
   for (map<int, OSDSession *>::const_iterator siter = osd_sessions.begin();
        siter != osd_sessions.end(); ++siter) {
     OSDSession *s = siter->second;
@@ -4441,7 +4436,6 @@ void Objecter::dump_command_ops(Formatter *fmt)
     _dump_command_ops(s, fmt);
     s->lock.unlock();
   }
-  rwlock.unlock();
   _dump_command_ops(homeless_session, fmt);
   fmt->close_section(); // command_ops array
 }