From: Mykola Golub Date: Mon, 21 Sep 2020 13:32:17 +0000 (+0100) Subject: librbd: track complete async operation return code X-Git-Tag: v15.2.17~119^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7a89317815ce7e70f722844c3a22c75e95ee7ed9;p=ceph.git librbd: track complete async operation return code Signed-off-by: Mykola Golub (cherry picked from commit 96bc20445afb0b2579a79b54a7854bc4a23f5b62) Conflicts: src/librbd/ImageWatcher.cc (no quiesce requests in octopus) --- diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index 4b067025b9d..02a52a65fa4 100644 --- a/src/librbd/ImageWatcher.cc +++ b/src/librbd/ImageWatcher.cc @@ -166,7 +166,7 @@ void ImageWatcher::handle_async_complete(const AsyncRequestId &request, } std::unique_lock async_request_locker{m_async_request_lock}; - mark_async_request_complete(request); + mark_async_request_complete(request, r); m_async_op_tracker.finish_op(); } @@ -497,7 +497,8 @@ bool ImageWatcher::is_new_request(const AsyncRequestId &id) const { } template -bool ImageWatcher::mark_async_request_complete(const AsyncRequestId &id) { +bool ImageWatcher::mark_async_request_complete(const AsyncRequestId &id, + int r) { ceph_assert(ceph_mutex_is_locked(m_async_request_lock)); bool found = m_async_pending.erase(id); @@ -510,7 +511,7 @@ bool ImageWatcher::mark_async_request_complete(const AsyncRequestId &id) { it = m_async_complete_expiration.erase(it); } - if (m_async_complete.insert(id).second) { + if (m_async_complete.insert({id, r}).second) { auto expiration_time = now; expiration_time += 600; m_async_complete_expiration.insert({expiration_time, id}); @@ -607,6 +608,10 @@ int ImageWatcher::prepare_async_request(const AsyncRequestId& async_request_i *ctx = new RemoteContext(*this, async_request_id, *prog_ctx); } else { *new_request = false; + auto it = m_async_complete.find(async_request_id); + if (it != m_async_complete.end()) { + return it->second; + } } } return 0; diff --git a/src/librbd/ImageWatcher.h b/src/librbd/ImageWatcher.h index b71e83dc972..52b2bc18cae 100644 --- a/src/librbd/ImageWatcher.h +++ b/src/librbd/ImageWatcher.h @@ -168,7 +168,7 @@ private: ceph::shared_mutex m_async_request_lock; std::map m_async_requests; std::set m_async_pending; - std::set m_async_complete; + std::map m_async_complete; std::set> m_async_complete_expiration; @@ -192,7 +192,8 @@ private: Context *on_finish); bool is_new_request(const watch_notify::AsyncRequestId &id) const; - bool mark_async_request_complete(const watch_notify::AsyncRequestId &id); + bool mark_async_request_complete(const watch_notify::AsyncRequestId &id, + int r); Context *remove_async_request(const watch_notify::AsyncRequestId &id); void schedule_async_request_timed_out(const watch_notify::AsyncRequestId &id); void async_request_timed_out(const watch_notify::AsyncRequestId &id);