From: Samuel Just Date: Sun, 8 Dec 2013 22:44:48 +0000 (-0800) Subject: FileStore::_collection_move_rename: remove source before closing guard X-Git-Tag: v0.78~286^2~56 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b7d100b697d6fc3cee24ca4a8a749a6f5fedaabd;p=ceph.git FileStore::_collection_move_rename: remove source before closing guard Fixes a bug in _collection_move_rename replays. Signed-off-by: Samuel Just --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index a6656725e356..d18393c06ab7 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -4342,13 +4342,26 @@ int FileStore::_collection_move_rename(coll_t oldcid, const ghobject_t& oldoid, _inject_failure(); + lfn_close(fd); + fd = FDRef(); + + if (r == 0) + r = lfn_unlink(oldcid, oldoid, spos, true); + + if (r == 0) + r = lfn_open(c, o, 0, &fd); + // close guard on object so we don't do this again - if (r == 0) { + if (r == 0) _close_replay_guard(**fd, spos); - } + lfn_close(fd); } + dout(10) << __func__ << " " << c << "/" << o << " from " << oldcid << "/" << oldoid + << " = " << r << dendl; + return r; + out_rm_src: // remove source if (_check_replay_guard(oldcid, oldoid, spos) > 0) {