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.58~29^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5fc83c8d9887d2a916af11436ccc94fcbfe59b7a;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 --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index c91d47c6d0d4..c53bd79b2ede 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -4169,6 +4169,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); }