]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
osdc/Objecter: fix recursive locking in _finish_command 21742/head
authorSage Weil <sage@redhat.com>
Mon, 30 Apr 2018 14:52:38 +0000 (09:52 -0500)
committerSage Weil <sage@redhat.com>
Mon, 30 Apr 2018 14:52:38 +0000 (09:52 -0500)
commit891f5192427a4a783d5d7194fc2556dfdc1a0ed2
treeb38f5f0bc1c8c838a8b56f8109d6a8e5d65ea7fe
parent049e9097a9fb0158a0a9cf52b1c04caa5b8c96a8
osdc/Objecter: fix recursive locking in _finish_command

The path

#9  Objecter::_finish_command (this=this@entry=0x7f76c00aeb30, c=c@entry=0x7f76b0000b10, r=<optimized out>, rs="osd down") at /build/ceph-13.0.2-1932-g458b4fb/src/osdc/Objecter.cc:4950
#10 0x00007f76d26de106 in Objecter::_check_command_map_dne (this=this@entry=0x7f76c00aeb30, c=c@entry=0x7f76b0000b10) at /build/ceph-13.0.2-1932-g458b4fb/src/osdc/Objecter.cc:1726
#11 0x00007f76d26e52e4 in Objecter::_scan_requests (this=this@entry=0x7f76c00aeb30, s=0x7f76c00af8a0, skipped_map=skipped_map@entry=false, cluster_full=cluster_full@entry=false, pool_full_map=0x7f76be7fb330, need_resend=..., need_resend_linger=..., need_resend_command=std::map with 0 elements, sul=...,
    gap_removed_snaps=0x7f76ac0016f8) at /build/ceph-13.0.2-1932-g458b4fb/src/osdc/Objecter.cc:1120
#12 0x00007f76d26eded5 in Objecter::handle_osd_map (this=this@entry=0x7f76c00aeb30, m=m@entry=0x7f76ac0014a0) at /build/ceph-13.0.2-1932-g458b4fb/src/osdc/Objecter.cc:1228

led to recursive lock of the session mutex (locked in _scan_requests,
and again in _finish_command).

Fix by making the callers for _finish_command (and
_check_command_map_dne) take the session lock.

Fixes: http://tracker.ceph.com/issues/23940
Signed-off-by: Sage Weil <sage@redhat.com>
src/osdc/Objecter.cc