From: Ilya Dryomov Date: Sat, 6 Dec 2025 08:32:08 +0000 (+0100) Subject: librbd: add ExclusiveLock::accept_request() overload X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3327001c8f65aebf9eb08fe5d28c8e344f338d4d;p=ceph.git librbd: add ExclusiveLock::accept_request() overload Make ret_val out parameter required for the existing method and introduce an overload taking just request_type to compensate. Signed-off-by: Ilya Dryomov --- diff --git a/src/librbd/ExclusiveLock.cc b/src/librbd/ExclusiveLock.cc index 888d4800780d..d2d99dec9a94 100644 --- a/src/librbd/ExclusiveLock.cc +++ b/src/librbd/ExclusiveLock.cc @@ -43,6 +43,12 @@ ExclusiveLock::ExclusiveLock(I &image_ctx) ML::set_state_uninitialized(); } +template +bool ExclusiveLock::accept_request(OperationRequestType request_type) const { + int ret_val; // ignored + return accept_request(request_type, &ret_val); +} + template bool ExclusiveLock::accept_request(OperationRequestType request_type, int *ret_val) const { @@ -53,12 +59,10 @@ bool ExclusiveLock::accept_request(OperationRequestType request_type, (m_request_blocked_count == 0 || m_image_ctx.get_exclusive_lock_policy()->accept_blocked_request( request_type))); - if (ret_val != nullptr) { - *ret_val = accept_request ? 0 : m_request_blocked_ret_val; - } + *ret_val = accept_request ? 0 : m_request_blocked_ret_val; - ldout(m_image_ctx.cct, 20) << "=" << accept_request << " (request_type=" - << request_type << ")" << dendl; + ldout(m_image_ctx.cct, 20) << "=" << accept_request << " ret_val=" << *ret_val + << " (request_type=" << request_type << ")" << dendl; return accept_request; } diff --git a/src/librbd/ExclusiveLock.h b/src/librbd/ExclusiveLock.h index aaf6ed3397f8..2616e9c18a54 100644 --- a/src/librbd/ExclusiveLock.h +++ b/src/librbd/ExclusiveLock.h @@ -26,6 +26,7 @@ public: ExclusiveLock(ImageCtxT &image_ctx); + bool accept_request(exclusive_lock::OperationRequestType request_type) const; bool accept_request(exclusive_lock::OperationRequestType request_type, int *ret_val) const; bool accept_ops() const; diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index f233c6422872..e6eb96172bf8 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -257,7 +257,7 @@ struct C_InvokeAsyncRequest : public Context { } if (image_ctx.exclusive_lock->is_lock_owner() && - image_ctx.exclusive_lock->accept_request(request_type, nullptr)) { + image_ctx.exclusive_lock->accept_request(request_type)) { send_local_request(); owner_lock.unlock_shared(); return; @@ -1850,7 +1850,7 @@ int Operations::prepare_image_update( std::unique_lock owner_locker{m_image_ctx.owner_lock}; if (m_image_ctx.exclusive_lock != nullptr && (!m_image_ctx.exclusive_lock->is_lock_owner() || - !m_image_ctx.exclusive_lock->accept_request(request_type, nullptr))) { + !m_image_ctx.exclusive_lock->accept_request(request_type))) { attempting_lock = true; m_image_ctx.exclusive_lock->block_requests(0);