From f4db553c28b6b7acc9bb8a305913a0f910d74e60 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Thu, 16 Jul 2020 11:07:14 -0700 Subject: [PATCH] scoutfs: fix error unwinding in server advance_seq While checking for lost server commit holds, I noticed that the advance_seq request path had obviously incorrect unwinding after getting an error. Fix it up so that it always unlocks and applies its commit. Signed-off-by: Zach Brown --- kmod/src/server.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kmod/src/server.c b/kmod/src/server.c index e90e87ad..751ea274 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -747,7 +747,7 @@ static int server_advance_seq(struct super_block *sb, ret = scoutfs_btree_delete(sb, &server->alloc, &server->wri, &super->trans_seqs, &key); if (ret < 0 && ret != -ENOENT) - goto out; + goto unlock; } next_seq = super->next_trans_seq; @@ -759,10 +759,11 @@ static int server_advance_seq(struct super_block *sb, init_trans_seq_key(&key, le64_to_cpu(next_seq), rid); ret = scoutfs_btree_insert(sb, &server->alloc, &server->wri, &super->trans_seqs, &key, NULL, 0); -out: +unlock: up_write(&server->seq_rwsem); ret = scoutfs_server_apply_commit(sb, ret); +out: return scoutfs_net_response(sb, conn, cmd, id, ret, &next_seq, sizeof(next_seq)); }