mirror of
https://github.com/versity/scoutfs.git
synced 2026-07-30 20:13:17 +00:00
Allow harmless srch compact commit errors
The server's srch commit error warnings were a bit severe. The compaction operations are a function of persistent state. If they fail then the inputs still exist and the next attempt will retry whatever failed. Not all errors are a problem, only those that result in partial commits that leave inconsistent state. In particular, we have to support the case where a client retransmits a compaction request to a new server after a first server performed the commit but couldn't respond. Throwing warnings when the new server gets ENOENT looking for the busy compaction item isn't helpful. This came in tests as background compaction was in flight as tests unmounted and mounted servers repeatedly to test lock recovery. Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user