From 44f38a31ecf0328ceda881583d2145be9b69d17b Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Fri, 18 Mar 2022 13:18:55 -0700 Subject: [PATCH] Make server commit access private again There was a brief time where we exported the ability to hold and apply commits outside of the main server code. That wasn't a great idea, and the few users have seen been reworked to not require directly manipulating server transactions, so we can reduce risk and make these functions private again. Signed-off-by: Zach Brown --- kmod/src/server.c | 62 +++++++++++++++++++++++------------------------ kmod/src/server.h | 2 -- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/kmod/src/server.c b/kmod/src/server.c index 12b03a9d..74f7d9c7 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -225,7 +225,7 @@ struct commit_waiter { * (lock_server) and which are not called directly by the server core * (async timeout work). */ -void scoutfs_server_hold_commit(struct super_block *sb) +static void server_hold_commit(struct super_block *sb) { DECLARE_SERVER_INFO(sb, server); @@ -251,7 +251,7 @@ void scoutfs_server_hold_commit(struct super_block *sb) * will race to make their changes and they'll all be applied by the * next commit after that. */ -int scoutfs_server_apply_commit(struct super_block *sb, int err) +static int server_apply_commit(struct super_block *sb, int err) { DECLARE_SERVER_INFO(sb, server); struct commit_waiter cw; @@ -469,7 +469,7 @@ static int server_alloc_inodes(struct super_block *sb, memcpy(&lecount, arg, arg_len); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); spin_lock(&sbi->next_ino_lock); ino = le64_to_cpu(super->next_ino); @@ -477,7 +477,7 @@ static int server_alloc_inodes(struct super_block *sb, le64_add_cpu(&super->next_ino, nr); spin_unlock(&sbi->next_ino_lock); - ret = scoutfs_server_apply_commit(sb, 0); + ret = server_apply_commit(sb, 0); if (ret == 0) { ial.ino = cpu_to_le64(ino); ial.nr = cpu_to_le64(nr); @@ -981,13 +981,13 @@ static int finalize_and_start_log_merge(struct super_block *sb, struct scoutfs_l /* wait a bit for mounts to arrive */ if (others_active) { mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, 0); + ret = server_apply_commit(sb, 0); if (ret < 0) err_str = "applying commit before waiting for finalized"; msleep(FINALIZE_POLL_MS); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); /* done if we timed out */ @@ -1090,7 +1090,7 @@ static int server_get_log_trees(struct super_block *sb, goto out; } - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); @@ -1223,7 +1223,7 @@ unlock: mutex_unlock(&server->alloc_mutex); mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); out: if (ret < 0) scoutfs_err(sb, "error %d getting log trees for rid %016llx: %s", @@ -1267,7 +1267,7 @@ static int server_commit_log_trees(struct super_block *sb, goto out; } - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); @@ -1316,7 +1316,7 @@ static int server_commit_log_trees(struct super_block *sb, unlock: mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); if (ret < 0) scoutfs_err(sb, "server error %d committing client logs for rid %016llx: %s", ret, rid, err_str); @@ -1638,7 +1638,7 @@ static int server_srch_get_compact(struct super_block *sb, goto out; } - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->srch_mutex); ret = scoutfs_srch_get_compact(sb, &server->alloc, &server->wri, @@ -1666,7 +1666,7 @@ static int server_srch_get_compact(struct super_block *sb, mutex_unlock(&server->srch_mutex); apply: - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); WARN_ON_ONCE(ret < 0 && ret != -ENOENT); /* XXX leaked busy item */ out: ret = scoutfs_net_response(sb, conn, cmd, id, ret, @@ -1700,7 +1700,7 @@ static int server_srch_commit_compact(struct super_block *sb, } sc = arg; - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->srch_mutex); ret = scoutfs_srch_commit_compact(sb, &server->alloc, &server->wri, @@ -1718,7 +1718,7 @@ static int server_srch_commit_compact(struct super_block *sb, server->other_freed, &fr); mutex_unlock(&server->alloc_mutex); apply: - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); out: WARN_ON(ret < 0); /* XXX leaks allocators */ return scoutfs_net_response(sb, conn, cmd, id, ret, NULL, 0); @@ -2089,7 +2089,7 @@ static void server_log_merge_free_work(struct work_struct *work) while (!server_is_stopping(server)) { - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); commit = true; @@ -2139,7 +2139,7 @@ static void server_log_merge_free_work(struct work_struct *work) BUG_ON(ret < 0); mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); commit = false; if (ret < 0) { err_str = "looping commit del/upd freeing item"; @@ -2149,7 +2149,7 @@ static void server_log_merge_free_work(struct work_struct *work) if (commit) { mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); if (ret < 0) err_str = "final commit del/upd freeing item"; } @@ -2194,7 +2194,7 @@ static int server_get_log_merge(struct super_block *sb, if (arg_len != 0) return -EINVAL; - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); restart: @@ -2437,7 +2437,7 @@ out: } mutex_unlock(&server->logs_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); return scoutfs_net_response(sb, conn, cmd, id, ret, &req, sizeof(req)); } @@ -2478,7 +2478,7 @@ static int server_commit_log_merge(struct super_block *sb, le64_to_cpu(comp->seq), le64_to_cpu(comp->flags)); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->logs_mutex); /* find the status of the current log merge */ @@ -2571,7 +2571,7 @@ out: if (ret < 0 && err_str) scoutfs_err(sb, "error %d committing log merge: %s", ret, err_str); - err = scoutfs_server_apply_commit(sb, ret); + err = server_apply_commit(sb, ret); BUG_ON(ret < 0 && deleted); /* inconsistent */ if (ret == 0) @@ -2708,7 +2708,7 @@ static int server_set_volopt(struct super_block *sb, struct scoutfs_net_connecti mutex_lock(&server->volopt_mutex); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); if (le64_to_cpu(volopt->set_bits) & SCOUTFS_VOLOPT_DATA_ALLOC_ZONE_BLOCKS_BIT) { opt = le64_to_cpu(volopt->data_alloc_zone_blocks); @@ -2739,7 +2739,7 @@ static int server_set_volopt(struct super_block *sb, struct scoutfs_net_connecti } apply: - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); write_seqcount_begin(&server->volopt_seqcount); if (ret == 0) @@ -2777,7 +2777,7 @@ static int server_clear_volopt(struct super_block *sb, struct scoutfs_net_connec mutex_lock(&server->volopt_mutex); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); for (i = 0, bit = 1, opt = first_valopt(&super->volopt); i < 64; i++, bit <<= 1, opt++) { if (le64_to_cpu(volopt->set_bits) & bit) { @@ -2786,7 +2786,7 @@ static int server_clear_volopt(struct super_block *sb, struct scoutfs_net_connec } } - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); write_seqcount_begin(&server->volopt_seqcount); if (ret == 0) @@ -2830,7 +2830,7 @@ static int server_resize_devices(struct super_block *sb, struct scoutfs_net_conn meta_tot = le64_to_cpu(nrd->new_total_meta_blocks); data_tot = le64_to_cpu(nrd->new_total_data_blocks); - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); mutex_lock(&server->alloc_mutex); if (meta_tot == le64_to_cpu(super->total_meta_blocks)) @@ -2892,7 +2892,7 @@ static int server_resize_devices(struct super_block *sb, struct scoutfs_net_conn ret = 0; unlock: mutex_unlock(&server->alloc_mutex); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); out: return scoutfs_net_response(sb, conn, cmd, id, ret, NULL, 0); }; @@ -3273,12 +3273,12 @@ static int server_greeting(struct super_block *sb, } if (gr->server_term == 0) { - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); ret = insert_mounted_client(sb, le64_to_cpu(gr->rid), le64_to_cpu(gr->flags), &conn->peername); - ret = scoutfs_server_apply_commit(sb, ret); + ret = server_apply_commit(sb, ret); queue_work(server->wq, &server->farewell_work); if (ret < 0) goto send_err; @@ -3346,7 +3346,7 @@ static int reclaim_rid(struct super_block *sb, u64 rid) { int ret; - scoutfs_server_hold_commit(sb); + server_hold_commit(sb); /* delete mounted client last, recovery looks for it */ ret = scoutfs_lock_server_farewell(sb, rid) ?: @@ -3356,7 +3356,7 @@ static int reclaim_rid(struct super_block *sb, u64 rid) scoutfs_omap_remove_rid(sb, rid) ?: delete_mounted_client(sb, rid); - return scoutfs_server_apply_commit(sb, ret); + return server_apply_commit(sb, ret); } /* diff --git a/kmod/src/server.h b/kmod/src/server.h index ad215045..dc1bd69a 100644 --- a/kmod/src/server.h +++ b/kmod/src/server.h @@ -64,8 +64,6 @@ int scoutfs_server_lock_response(struct super_block *sb, u64 rid, u64 id, struct scoutfs_net_lock *nl); int scoutfs_server_lock_recover_request(struct super_block *sb, u64 rid, struct scoutfs_key *key); -void scoutfs_server_hold_commit(struct super_block *sb); -int scoutfs_server_apply_commit(struct super_block *sb, int err); void scoutfs_server_recov_finish(struct super_block *sb, u64 rid, int which); int scoutfs_server_send_omap_request(struct super_block *sb, u64 rid,