From: Sage Weil Date: Wed, 29 Mar 2017 22:33:12 +0000 (-0400) Subject: os/bluestore: flush osr even on failure in _deferred_replay X-Git-Tag: v12.0.2~167^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=066514c37ccaf46afb9515435f2923e399e46fb6;p=ceph.git os/bluestore: flush osr even on failure in _deferred_replay This is one less thing for fsck to worry about. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 248d32d5e766..ca3a42805533 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8048,6 +8048,7 @@ int BlueStore::_deferred_replay() dout(10) << __func__ << " start" << dendl; OpSequencerRef osr = new OpSequencer(cct, this); int count = 0; + int r = 0; KeyValueDB::Iterator it = db->get_iterator(PREFIX_DEFERRED); for (it->lower_bound(string()); it->valid(); it->next(), ++count) { dout(20) << __func__ << " replay " << pretty_binary_string(it->key()) @@ -8062,18 +8063,20 @@ int BlueStore::_deferred_replay() derr << __func__ << " failed to decode deferred txn " << pretty_binary_string(it->key()) << dendl; delete deferred_txn; - return -EIO; + r = -EIO; + goto out; } TransContext *txc = _txc_create(osr.get()); txc->deferred_txn = deferred_txn; txc->state = TransContext::STATE_KV_DONE; _txc_state_proc(txc); } + out: dout(20) << __func__ << " draining osr" << dendl; _osr_drain_all(); osr->discard(); dout(10) << __func__ << " completed " << count << " events" << dendl; - return 0; + return r; } // ---------------------------