From: liyichao Date: Wed, 16 May 2018 13:21:52 +0000 (+0800) Subject: Pass the result of PreReleaseRequest to next handler. X-Git-Tag: v14.0.1~874^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=86af091cf05a1f732453d53243fdba522ef0d8b4;p=ceph.git Pass the result of PreReleaseRequest to next handler. We have to pass the error code so PreReleaseRequest is considered failed so that in `ExclusiveLock::post_release_lock_handler`, `io_work_queue->unblock_writes` will be not called because it is already called in PreReleaseRequest. Signed-off-by: liyichao --- diff --git a/src/librbd/ManagedLock.cc b/src/librbd/ManagedLock.cc index 53bfd2622665..f039eb405152 100644 --- a/src/librbd/ManagedLock.cc +++ b/src/librbd/ManagedLock.cc @@ -762,8 +762,9 @@ void ManagedLock::handle_shutdown_pre_release(int r) { using managed_lock::ReleaseRequest; ReleaseRequest* req = ReleaseRequest::create(m_ioctx, m_watcher, m_work_queue, m_oid, cookie, - new FunctionContext([this](int r) { - post_release_lock_handler(true, r, create_context_callback< + new FunctionContext([this, r](int l) { + int rst = r < 0 ? r : l; + post_release_lock_handler(true, rst, create_context_callback< ManagedLock, &ManagedLock::handle_shutdown_post_release>(this)); })); req->send();