From: Sage Weil Date: Mon, 5 Feb 2018 15:08:44 +0000 (-0600) Subject: os/filestore: add replay guards for omap operations X-Git-Tag: v12.2.6~101^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4bfbb7340466d5c230404bd89f742d46d5708cf6;p=ceph.git os/filestore: add replay guards for omap operations These were not guarded, meaning they could get replayed onto an object that was cloned or renamed. Eek! Fixes: http://tracker.ceph.com/issues/22920 Signed-off-by: Sage Weil (cherry picked from commit 6f5a952fb710610672cda1af714250088923d84a) --- diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index cd4972c1a9d5..862cb1420fa2 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -2981,7 +2981,8 @@ void FileStore::_do_transaction( const coll_t &cid = !_need_temp_object_collection(_cid, oid) ? _cid : _cid.get_temp(); tracepoint(objectstore, omap_clear_enter, osr_name); - r = _omap_clear(cid, oid, spos); + if (_check_replay_guard(cid, oid, spos) > 0) + r = _omap_clear(cid, oid, spos); tracepoint(objectstore, omap_clear_exit, r); } break; @@ -2994,7 +2995,8 @@ void FileStore::_do_transaction( map aset; i.decode_attrset(aset); tracepoint(objectstore, omap_setkeys_enter, osr_name); - r = _omap_setkeys(cid, oid, aset, spos); + if (_check_replay_guard(cid, oid, spos) > 0) + r = _omap_setkeys(cid, oid, aset, spos); tracepoint(objectstore, omap_setkeys_exit, r); } break; @@ -3007,7 +3009,8 @@ void FileStore::_do_transaction( set keys; i.decode_keyset(keys); tracepoint(objectstore, omap_rmkeys_enter, osr_name); - r = _omap_rmkeys(cid, oid, keys, spos); + if (_check_replay_guard(cid, oid, spos) > 0) + r = _omap_rmkeys(cid, oid, keys, spos); tracepoint(objectstore, omap_rmkeys_exit, r); } break; @@ -3021,7 +3024,8 @@ void FileStore::_do_transaction( first = i.decode_string(); last = i.decode_string(); tracepoint(objectstore, omap_rmkeyrange_enter, osr_name); - r = _omap_rmkeyrange(cid, oid, first, last, spos); + if (_check_replay_guard(cid, oid, spos) > 0) + r = _omap_rmkeyrange(cid, oid, first, last, spos); tracepoint(objectstore, omap_rmkeyrange_exit, r); } break; @@ -3034,7 +3038,8 @@ void FileStore::_do_transaction( bufferlist bl; i.decode_bl(bl); tracepoint(objectstore, omap_setheader_enter, osr_name); - r = _omap_setheader(cid, oid, bl, spos); + if (_check_replay_guard(cid, oid, spos) > 0) + r = _omap_setheader(cid, oid, bl, spos); tracepoint(objectstore, omap_setheader_exit, r); } break;