diff --git a/kmod/src/server.c b/kmod/src/server.c index 4c9de90f..c8618273 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -2134,7 +2134,7 @@ static int server_srch_commit_compact(struct super_block *sb, &super->srch_root, rid, sc, &av, &fr); mutex_unlock(&server->srch_mutex); - if (ret < 0) /* XXX very bad, leaks allocators */ + if (ret < 0) goto apply; /* reclaim allocators if they were set by _srch_commit_ */ @@ -2144,10 +2144,10 @@ static int server_srch_commit_compact(struct super_block *sb, scoutfs_alloc_splice_list(sb, &server->alloc, &server->wri, server->other_freed, &fr); mutex_unlock(&server->alloc_mutex); + WARN_ON(ret < 0); /* XXX leaks allocators */ apply: ret = server_apply_commit(sb, &hold, ret); out: - WARN_ON(ret < 0); /* XXX leaks allocators */ return scoutfs_net_response(sb, conn, cmd, id, ret, NULL, 0); } diff --git a/kmod/src/srch.c b/kmod/src/srch.c index 4f08be0c..54d437a9 100644 --- a/kmod/src/srch.c +++ b/kmod/src/srch.c @@ -1406,7 +1406,7 @@ int scoutfs_srch_commit_compact(struct super_block *sb, ret = -EIO; scoutfs_btree_put_iref(&iref); } - if (ret < 0) /* XXX leaks allocators */ + if (ret < 0) goto out; /* restore busy to pending if the operation failed */ @@ -1426,10 +1426,8 @@ int scoutfs_srch_commit_compact(struct super_block *sb, /* update file references if we finished compaction (!deleting) */ if (!(res->flags & SCOUTFS_SRCH_COMPACT_FLAG_DELETE)) { ret = commit_files(sb, alloc, wri, root, res); - if (ret < 0) { - /* XXX we can't commit, shutdown? */ + if (ret < 0) goto out; - } /* transition flags for deleting input files */ for (i = 0; i < res->nr; i++) { @@ -1456,7 +1454,7 @@ update: le64_to_cpu(pending->id), 0); ret = scoutfs_btree_insert(sb, alloc, wri, root, &key, pending, sizeof(*pending)); - if (ret < 0) + if (WARN_ON_ONCE(ret < 0)) /* XXX inconsistency */ goto out; } @@ -1469,7 +1467,6 @@ update: BUG_ON(err); /* both busy and pending present */ } out: - WARN_ON_ONCE(ret < 0); /* XXX inconsistency */ kfree(busy); return ret; }