From: Sage Weil Date: Tue, 19 Feb 2013 01:39:46 +0000 (-0800) Subject: os/FileStore: check replay guard on src for collection rename X-Git-Tag: v0.56.4~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=66dca7730006dffbce12e6b27016ea5469b7691b;p=ceph.git os/FileStore: check replay guard on src for collection rename This avoids a problematic sequence like: - rename A/ -> B/ - remove B/1...100 - destroy B/ - create A/ - write A/101... - replay A/ -> B/ - remove B/1...100 (fails but tolerated) - destroy B/ (fails with ENOTEMPTY) Signed-off-by: Sage Weil Reviewed-by: Samuel Just (cherry picked from commit 5fc83c8d9887d2a916af11436ccc94fcbfe59b7a) --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 44f3b571960e..ac4d9b3afc88 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -4159,6 +4159,10 @@ int FileStore::_collection_rename(const coll_t &cid, const coll_t &ncid, get_cdir(cid, old_coll, sizeof(old_coll)); get_cdir(ncid, new_coll, sizeof(new_coll)); + if (_check_replay_guard(cid, spos) < 0) { + return 0; + } + if (_check_replay_guard(ncid, spos) < 0) { return _collection_remove_recursive(cid, spos); }