From dd5a263b83e74dc865283352d8da0ff6714b2c64 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 10 Nov 2015 08:20:13 -0500 Subject: [PATCH] librbd: perf counters might not be initialized on error Fixes: #13740 Signed-off-by: Jason Dillaman --- src/librbd/ImageCtx.cc | 4 +++- src/librbd/internal.cc | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 50c0b0295edd..68a03faffbd4 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -108,7 +108,9 @@ public: } ImageCtx::~ImageCtx() { - perf_stop(); + if (perfcounter) { + perf_stop(); + } if (object_cacher) { delete object_cacher; object_cacher = NULL; diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index da0c9bcf0d0f..56eb7c5567c9 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -2884,7 +2884,8 @@ reprotect_and_return_err: if (ictx->object_cacher) { r = ictx->shutdown_cache(); // implicitly flushes } else { - r = flush(ictx); + RWLock::RLocker owner_locker(ictx->owner_lock); + r = _flush(ictx); } if (r < 0) { lderr(ictx->cct) << "error flushing IO: " << cpp_strerror(r) -- 2.47.3