From 86af091cf05a1f732453d53243fdba522ef0d8b4 Mon Sep 17 00:00:00 2001 From: liyichao Date: Wed, 16 May 2018 21:21:52 +0800 Subject: [PATCH] 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 --- src/librbd/ManagedLock.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/librbd/ManagedLock.cc b/src/librbd/ManagedLock.cc index 53bfd262266..f039eb40515 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(); -- 2.47.3