summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/os/FileStore.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc
index 82185dc9d7c..c764d6bef2a 100644
--- a/src/os/FileStore.cc
+++ b/src/os/FileStore.cc
@@ -4352,9 +4352,6 @@ 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));
- _set_global_replay_guard(cid, spos);
- _set_replay_guard(cid, spos);
-
if (_check_replay_guard(cid, spos) < 0) {
return 0;
}
@@ -4363,6 +4360,16 @@ int FileStore::_collection_rename(const coll_t &cid, const coll_t &ncid,
return _collection_remove_recursive(cid, spos);
}
+ if (!collection_exists(cid)) {
+ if (replaying) {
+ // already happened
+ return 0;
+ } else {
+ return -ENOENT;
+ }
+ }
+ _set_global_replay_guard(cid, spos);
+
int ret = 0;
if (::rename(old_coll, new_coll)) {
if (replaying && !btrfs_stable_commits &&