Commit b282c548 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'rxrpc-afs-miscellaneous-fixes'

David Howells says:

====================
rxrpc, afs: Miscellaneous fixes

Here are some miscellaneous fixes for rxrpc and afs:

 (1) In the rxperf test server, make it correctly receive and decode the
     terminal magic cookie.

 (2) In rxrpc, get rid of the peer->mtu_lock as it is not only redundant,
     it now causes a lockdep complaint.

 (3) In rxrpc, fix a lockdep-detected instance where a spinlock is being
     bh-locked whilst irqs are disabled.

 (4) In afs, fix the ref of a server displaced from an afs_server_list
     struct.

 (5) In afs, make afs_server records belonging to a cell take refs on the
     afs_cell record so that the latter doesn't get deleted first when that
     cell is being destroyed.
====================

Link: https://patch.msgid.link/20250218192250.296870-1-dhowells@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents f06e4bfd 1f0fc337
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -163,6 +163,8 @@ static struct afs_server *afs_install_server(struct afs_cell *cell,
	rb_insert_color(&server->uuid_rb, &net->fs_servers);
	hlist_add_head_rcu(&server->proc_link, &net->fs_proc);

	afs_get_cell(cell, afs_cell_trace_get_server);

added_dup:
	write_seqlock(&net->fs_addr_lock);
	estate = rcu_dereference_protected(server->endpoint_state,
@@ -442,6 +444,7 @@ static void afs_server_rcu(struct rcu_head *rcu)
			 atomic_read(&server->active), afs_server_trace_free);
	afs_put_endpoint_state(rcu_access_pointer(server->endpoint_state),
			       afs_estate_trace_put_server);
	afs_put_cell(server->cell, afs_cell_trace_put_server);
	kfree(server);
}

+2 −2
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ struct afs_server_list *afs_alloc_server_list(struct afs_volume *volume,
				break;
		if (j < slist->nr_servers) {
			if (slist->servers[j].server == server) {
				afs_put_server(volume->cell->net, server,
				afs_unuse_server(volume->cell->net, server,
						 afs_server_trace_put_slist_isort);
				continue;
			}
+2 −0
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@ enum yfs_cm_operation {
	EM(afs_cell_trace_get_queue_dns,	"GET q-dns ") \
	EM(afs_cell_trace_get_queue_manage,	"GET q-mng ") \
	EM(afs_cell_trace_get_queue_new,	"GET q-new ") \
	EM(afs_cell_trace_get_server,		"GET server") \
	EM(afs_cell_trace_get_vol,		"GET vol   ") \
	EM(afs_cell_trace_insert,		"INSERT    ") \
	EM(afs_cell_trace_manage,		"MANAGE    ") \
@@ -182,6 +183,7 @@ enum yfs_cm_operation {
	EM(afs_cell_trace_put_destroy,		"PUT destry") \
	EM(afs_cell_trace_put_queue_work,	"PUT q-work") \
	EM(afs_cell_trace_put_queue_fail,	"PUT q-fail") \
	EM(afs_cell_trace_put_server,		"PUT server") \
	EM(afs_cell_trace_put_vol,		"PUT vol   ") \
	EM(afs_cell_trace_see_source,		"SEE source") \
	EM(afs_cell_trace_see_ws,		"SEE ws    ") \
+0 −1
Original line number Diff line number Diff line
@@ -360,7 +360,6 @@ struct rxrpc_peer {
	u8			pmtud_jumbo;	/* Max jumbo packets for the MTU */
	bool			ackr_adv_pmtud;	/* T if the peer advertises path-MTU */
	unsigned int		ackr_max_data;	/* Maximum data advertised by peer */
	seqcount_t		mtu_lock;	/* Lockless MTU access management */
	unsigned int		if_mtu;		/* Local interface MTU (- hdrsize) for this peer */
	unsigned int		max_data;	/* Maximum packet data capacity for this peer */
	unsigned short		hdrsize;	/* header size (IP + UDP + RxRPC) */
+0 −2
Original line number Diff line number Diff line
@@ -810,9 +810,7 @@ static void rxrpc_input_ack_trailer(struct rxrpc_call *call, struct sk_buff *skb
	if (max_mtu < peer->max_data) {
		trace_rxrpc_pmtud_reduce(peer, sp->hdr.serial, max_mtu,
					 rxrpc_pmtud_reduce_ack);
		write_seqcount_begin(&peer->mtu_lock);
		peer->max_data = max_mtu;
		write_seqcount_end(&peer->mtu_lock);
	}

	max_data = umin(max_mtu, peer->max_data);
Loading