mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 12:16:41 +00:00
rxrpc: Stash the network namespace pointer in rxrpc_local
Stash the network namespace pointer in the rxrpc_local struct in addition to a pointer to the rxrpc-specific net namespace info. Use this to remove some places where the socket is passed as a parameter. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org
This commit is contained in:
parent
eea8ce81fb
commit
8a758d98db
@ -283,7 +283,8 @@ struct rxrpc_local {
|
||||
struct rcu_head rcu;
|
||||
atomic_t active_users; /* Number of users of the local endpoint */
|
||||
refcount_t ref; /* Number of references to the structure */
|
||||
struct rxrpc_net *rxnet; /* The network ns in which this resides */
|
||||
struct net *net; /* The network namespace */
|
||||
struct rxrpc_net *rxnet; /* Our bits in the network namespace */
|
||||
struct hlist_node link;
|
||||
struct socket *socket; /* my UDP socket */
|
||||
struct task_struct *io_thread;
|
||||
@ -1063,12 +1064,11 @@ void rxrpc_peer_keepalive_worker(struct work_struct *);
|
||||
*/
|
||||
struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *,
|
||||
const struct sockaddr_rxrpc *);
|
||||
struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *, struct rxrpc_local *,
|
||||
struct sockaddr_rxrpc *, gfp_t);
|
||||
struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *local,
|
||||
struct sockaddr_rxrpc *srx, gfp_t gfp);
|
||||
struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t,
|
||||
enum rxrpc_peer_trace);
|
||||
void rxrpc_new_incoming_peer(struct rxrpc_sock *, struct rxrpc_local *,
|
||||
struct rxrpc_peer *);
|
||||
void rxrpc_new_incoming_peer(struct rxrpc_local *local, struct rxrpc_peer *peer);
|
||||
void rxrpc_destroy_all_peers(struct rxrpc_net *);
|
||||
struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *, enum rxrpc_peer_trace);
|
||||
struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *, enum rxrpc_peer_trace);
|
||||
|
@ -280,7 +280,7 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
|
||||
(peer_tail + 1) &
|
||||
(RXRPC_BACKLOG_MAX - 1));
|
||||
|
||||
rxrpc_new_incoming_peer(rx, local, peer);
|
||||
rxrpc_new_incoming_peer(local, peer);
|
||||
}
|
||||
|
||||
/* Now allocate and set up the connection */
|
||||
|
@ -378,7 +378,7 @@ static struct rxrpc_bundle *rxrpc_prep_call(struct rxrpc_sock *rx,
|
||||
|
||||
_enter("{%d,%lx},", call->debug_id, call->user_call_ID);
|
||||
|
||||
cp->peer = rxrpc_lookup_peer(rx, cp->local, srx, gfp);
|
||||
cp->peer = rxrpc_lookup_peer(cp->local, srx, gfp);
|
||||
if (!cp->peer)
|
||||
goto error;
|
||||
|
||||
|
@ -85,7 +85,7 @@ static long rxrpc_local_cmp_key(const struct rxrpc_local *local,
|
||||
/*
|
||||
* Allocate a new local endpoint.
|
||||
*/
|
||||
static struct rxrpc_local *rxrpc_alloc_local(struct rxrpc_net *rxnet,
|
||||
static struct rxrpc_local *rxrpc_alloc_local(struct net *net,
|
||||
const struct sockaddr_rxrpc *srx)
|
||||
{
|
||||
struct rxrpc_local *local;
|
||||
@ -94,7 +94,8 @@ static struct rxrpc_local *rxrpc_alloc_local(struct rxrpc_net *rxnet,
|
||||
if (local) {
|
||||
refcount_set(&local->ref, 1);
|
||||
atomic_set(&local->active_users, 1);
|
||||
local->rxnet = rxnet;
|
||||
local->net = net;
|
||||
local->rxnet = rxrpc_net(net);
|
||||
INIT_HLIST_NODE(&local->link);
|
||||
init_rwsem(&local->defrag_sem);
|
||||
init_completion(&local->io_thread_ready);
|
||||
@ -248,7 +249,7 @@ struct rxrpc_local *rxrpc_lookup_local(struct net *net,
|
||||
goto found;
|
||||
}
|
||||
|
||||
local = rxrpc_alloc_local(rxnet, srx);
|
||||
local = rxrpc_alloc_local(net, srx);
|
||||
if (!local)
|
||||
goto nomem;
|
||||
|
||||
|
@ -147,10 +147,10 @@ struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *local,
|
||||
* assess the MTU size for the network interface through which this peer is
|
||||
* reached
|
||||
*/
|
||||
static void rxrpc_assess_MTU_size(struct rxrpc_sock *rx,
|
||||
static void rxrpc_assess_MTU_size(struct rxrpc_local *local,
|
||||
struct rxrpc_peer *peer)
|
||||
{
|
||||
struct net *net = sock_net(&rx->sk);
|
||||
struct net *net = local->net;
|
||||
struct dst_entry *dst;
|
||||
struct rtable *rt;
|
||||
struct flowi fl;
|
||||
@ -236,11 +236,11 @@ struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *local, gfp_t gfp,
|
||||
/*
|
||||
* Initialise peer record.
|
||||
*/
|
||||
static void rxrpc_init_peer(struct rxrpc_sock *rx, struct rxrpc_peer *peer,
|
||||
static void rxrpc_init_peer(struct rxrpc_local *local, struct rxrpc_peer *peer,
|
||||
unsigned long hash_key)
|
||||
{
|
||||
peer->hash_key = hash_key;
|
||||
rxrpc_assess_MTU_size(rx, peer);
|
||||
rxrpc_assess_MTU_size(local, peer);
|
||||
peer->mtu = peer->if_mtu;
|
||||
peer->rtt_last_req = ktime_get_real();
|
||||
|
||||
@ -272,8 +272,7 @@ static void rxrpc_init_peer(struct rxrpc_sock *rx, struct rxrpc_peer *peer,
|
||||
/*
|
||||
* Set up a new peer.
|
||||
*/
|
||||
static struct rxrpc_peer *rxrpc_create_peer(struct rxrpc_sock *rx,
|
||||
struct rxrpc_local *local,
|
||||
static struct rxrpc_peer *rxrpc_create_peer(struct rxrpc_local *local,
|
||||
struct sockaddr_rxrpc *srx,
|
||||
unsigned long hash_key,
|
||||
gfp_t gfp)
|
||||
@ -285,7 +284,7 @@ static struct rxrpc_peer *rxrpc_create_peer(struct rxrpc_sock *rx,
|
||||
peer = rxrpc_alloc_peer(local, gfp, rxrpc_peer_new_client);
|
||||
if (peer) {
|
||||
memcpy(&peer->srx, srx, sizeof(*srx));
|
||||
rxrpc_init_peer(rx, peer, hash_key);
|
||||
rxrpc_init_peer(local, peer, hash_key);
|
||||
}
|
||||
|
||||
_leave(" = %p", peer);
|
||||
@ -304,14 +303,13 @@ static void rxrpc_free_peer(struct rxrpc_peer *peer)
|
||||
* since we've already done a search in the list from the non-reentrant context
|
||||
* (the data_ready handler) that is the only place we can add new peers.
|
||||
*/
|
||||
void rxrpc_new_incoming_peer(struct rxrpc_sock *rx, struct rxrpc_local *local,
|
||||
struct rxrpc_peer *peer)
|
||||
void rxrpc_new_incoming_peer(struct rxrpc_local *local, struct rxrpc_peer *peer)
|
||||
{
|
||||
struct rxrpc_net *rxnet = local->rxnet;
|
||||
unsigned long hash_key;
|
||||
|
||||
hash_key = rxrpc_peer_hash_key(local, &peer->srx);
|
||||
rxrpc_init_peer(rx, peer, hash_key);
|
||||
rxrpc_init_peer(local, peer, hash_key);
|
||||
|
||||
spin_lock(&rxnet->peer_hash_lock);
|
||||
hash_add_rcu(rxnet->peer_hash, &peer->hash_link, hash_key);
|
||||
@ -322,8 +320,7 @@ void rxrpc_new_incoming_peer(struct rxrpc_sock *rx, struct rxrpc_local *local,
|
||||
/*
|
||||
* obtain a remote transport endpoint for the specified address
|
||||
*/
|
||||
struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *rx,
|
||||
struct rxrpc_local *local,
|
||||
struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *local,
|
||||
struct sockaddr_rxrpc *srx, gfp_t gfp)
|
||||
{
|
||||
struct rxrpc_peer *peer, *candidate;
|
||||
@ -343,7 +340,7 @@ struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *rx,
|
||||
/* The peer is not yet present in hash - create a candidate
|
||||
* for a new record and then redo the search.
|
||||
*/
|
||||
candidate = rxrpc_create_peer(rx, local, srx, hash_key, gfp);
|
||||
candidate = rxrpc_create_peer(local, srx, hash_key, gfp);
|
||||
if (!candidate) {
|
||||
_leave(" = NULL [nomem]");
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user