From 0558423b210d9c9929c30d19c1dc63d9b0d05b05 Mon Sep 17 00:00:00 2001 From: Song Shun Date: Tue, 10 Apr 2018 13:41:18 +0800 Subject: [PATCH] librbd: fix rbd close race with rewatch fix rbd close race with rewatch Signed-off-by: Song Shun (cherry picked from commit 8b833a293eac54fd3d38f12660d856ecc310d805) Conflicts: src/librbd/Watcher.cc: trivial resolution --- src/librbd/Watcher.cc | 2 +- src/librbd/watcher/RewatchRequest.cc | 13 ++----------- src/test/librbd/watcher/test_mock_RewatchRequest.cc | 3 +-- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/librbd/Watcher.cc b/src/librbd/Watcher.cc index 6e31ad7c63592..9a72fc13a76b1 100644 --- a/src/librbd/Watcher.cc +++ b/src/librbd/Watcher.cc @@ -263,7 +263,7 @@ void Watcher::rewatch() { } void Watcher::handle_rewatch(int r) { - ldout(m_cct, 10) "r=" << r << dendl; + ldout(m_cct, 10) << "r=" << r << dendl; bool watch_error = false; Context *unregister_watch_ctx = nullptr; diff --git a/src/librbd/watcher/RewatchRequest.cc b/src/librbd/watcher/RewatchRequest.cc index fe236269793a9..22d2bb8e56788 100644 --- a/src/librbd/watcher/RewatchRequest.cc +++ b/src/librbd/watcher/RewatchRequest.cc @@ -78,19 +78,10 @@ void RewatchRequest::rewatch() { void RewatchRequest::handle_rewatch(int r) { CephContext *cct = reinterpret_cast(m_ioctx.cct()); ldout(cct, 10) << "r=" << r << dendl; - - if (r == -EBLACKLISTED) { - lderr(cct) << "client blacklisted" << dendl; - finish(r); - return; - } else if (r == -ENOENT) { - ldout(cct, 5) << "object deleted" << dendl; - finish(r); - return; - } else if (r < 0) { + if (r < 0) { lderr(cct) << "failed to watch object: " << cpp_strerror(r) << dendl; - rewatch(); + finish(r); return; } diff --git a/src/test/librbd/watcher/test_mock_RewatchRequest.cc b/src/test/librbd/watcher/test_mock_RewatchRequest.cc index 3b42b0e992491..e9e7d2fbe1dfe 100644 --- a/src/test/librbd/watcher/test_mock_RewatchRequest.cc +++ b/src/test/librbd/watcher/test_mock_RewatchRequest.cc @@ -176,7 +176,6 @@ TEST_F(TestMockWatcherRewatchRequest, WatchError) { InSequence seq; expect_aio_unwatch(mock_image_ctx, 0); expect_aio_watch(mock_image_ctx, -EINVAL); - expect_aio_watch(mock_image_ctx, 0); C_SaferCond ctx; MockRewatchRequest *req = MockRewatchRequest::create(mock_image_ctx.md_ctx, @@ -189,7 +188,7 @@ TEST_F(TestMockWatcherRewatchRequest, WatchError) { RWLock::WLocker watch_locker(m_watch_lock); req->send(); } - ASSERT_EQ(0, ctx.wait()); + ASSERT_EQ(-EINVAL, ctx.wait()); } } // namespace watcher -- 2.39.5