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: v13.0.2~338^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F20279%2Fhead;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 --- diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 33faa2371f85..0a7f1bf8e015 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -2999,7 +2999,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; @@ -3012,7 +3013,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; @@ -3025,7 +3027,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; @@ -3039,7 +3042,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; @@ -3052,7 +3056,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;