[PATCH 2/3] afs: Unify fs_addresses lists
Jeffrey E Altman
jaltman at auristor.com
Fri Feb 16 12:42:40 PST 2024
On 2/16/2024 2:37 PM, Marc Dionne wrote:
> Given that the lists no longer contain addresses, there is little
> reason to splitting things between separate lists.
>
> That was probably the intention with the change from addresses to
> peer pointers in the list.
>
> Signed-off-by: Marc Dionne <marc.dionne at auristor.com>
> ---
> fs/afs/internal.h | 6 ++----
> fs/afs/main.c | 3 +--
> fs/afs/server.c | 34 ++++++++++------------------------
> 3 files changed, 13 insertions(+), 30 deletions(-)
>
> diff --git a/fs/afs/internal.h b/fs/afs/internal.h
> index 9c03fcf7ffaa..6ce5a612937c 100644
> --- a/fs/afs/internal.h
> +++ b/fs/afs/internal.h
> @@ -321,8 +321,7 @@ struct afs_net {
> struct list_head fs_probe_slow; /* List of afs_server to probe at 5m intervals */
> struct hlist_head fs_proc; /* procfs servers list */
>
> - struct hlist_head fs_addresses4; /* afs_server (by lowest IPv4 addr) */
> - struct hlist_head fs_addresses6; /* afs_server (by lowest IPv6 addr) */
> + struct hlist_head fs_addresses; /* afs_server (by lowest IPv6 addr) */
> seqlock_t fs_addr_lock; /* For fs_addresses[46] */
>
> struct work_struct fs_manager;
> @@ -561,8 +560,7 @@ struct afs_server {
> struct afs_server __rcu *uuid_next; /* Next server with same UUID */
> struct afs_server *uuid_prev; /* Previous server with same UUID */
> struct list_head probe_link; /* Link in net->fs_probe_list */
> - struct hlist_node addr4_link; /* Link in net->fs_addresses4 */
> - struct hlist_node addr6_link; /* Link in net->fs_addresses6 */
> + struct hlist_node addr_link; /* Link in net->fs_addresses6 */
> struct hlist_node proc_link; /* Link in net->fs_proc */
> struct list_head volumes; /* RCU list of afs_server_entry objects */
> struct afs_server *gc_next; /* Next server in manager's list */
> diff --git a/fs/afs/main.c b/fs/afs/main.c
> index 1b3bd21c168a..a14f6013e316 100644
> --- a/fs/afs/main.c
> +++ b/fs/afs/main.c
> @@ -90,8 +90,7 @@ static int __net_init afs_net_init(struct net *net_ns)
> INIT_LIST_HEAD(&net->fs_probe_slow);
> INIT_HLIST_HEAD(&net->fs_proc);
>
> - INIT_HLIST_HEAD(&net->fs_addresses4);
> - INIT_HLIST_HEAD(&net->fs_addresses6);
> + INIT_HLIST_HEAD(&net->fs_addresses);
> seqlock_init(&net->fs_addr_lock);
>
> INIT_WORK(&net->fs_manager, afs_manage_servers);
> diff --git a/fs/afs/server.c b/fs/afs/server.c
> index ff79d1761a84..038f9d0ae3af 100644
> --- a/fs/afs/server.c
> +++ b/fs/afs/server.c
> @@ -38,22 +38,12 @@ struct afs_server *afs_find_server(struct afs_net *net, const struct rxrpc_peer
> seq++; /* 2 on the 1st/lockless path, otherwise odd */
> read_seqbegin_or_lock(&net->fs_addr_lock, &seq);
>
> - if (peer->src->transport.family == AF_INET6) {
> - hlist_for_each_entry_rcu(server, &net->fs_addresses6, addr6_link) {
> - estate = rcu_dereference(server->endpoint_state);
> - alist = estate->addresses;
> - for (i = 0; i < alist->nr_addrs; i++)
> - if (alist->addrs[i].peer == peer)
> - goto found;
> - }
> - } else {
> - hlist_for_each_entry_rcu(server, &net->fs_addresses4, addr4_link) {
> - estate = rcu_dereference(server->endpoint_state);
> - alist = estate->addresses;
> - for (i = 0; i < alist->nr_addrs; i++)
> - if (alist->addrs[i].peer == peer)
> - goto found;
> - }
> + hlist_for_each_entry_rcu(server, &net->fs_addresses, addr_link) {
> + estate = rcu_dereference(server->endpoint_state);
> + alist = estate->addresses;
> + for (i = 0; i < alist->nr_addrs; i++)
> + if (alist->addrs[i].peer == peer)
> + goto found;
> }
>
> server = NULL;
> @@ -187,10 +177,8 @@ static struct afs_server *afs_install_server(struct afs_cell *cell,
> * bit, but anything we might want to do gets messy and memory
> * intensive.
> */
> - if (alist->nr_ipv4 > 0)
> - hlist_add_head_rcu(&server->addr4_link, &net->fs_addresses4);
> - if (alist->nr_addrs > alist->nr_ipv4)
> - hlist_add_head_rcu(&server->addr6_link, &net->fs_addresses6);
> + if (alist->nr_addrs > 0)
> + hlist_add_head_rcu(&server->addr_link, &net->fs_addresses);
>
> write_sequnlock(&net->fs_addr_lock);
>
> @@ -521,10 +509,8 @@ static void afs_gc_servers(struct afs_net *net, struct afs_server *gc_list)
>
> list_del(&server->probe_link);
> hlist_del_rcu(&server->proc_link);
> - if (!hlist_unhashed(&server->addr4_link))
> - hlist_del_rcu(&server->addr4_link);
> - if (!hlist_unhashed(&server->addr6_link))
> - hlist_del_rcu(&server->addr6_link);
> + if (!hlist_unhashed(&server->addr_link))
> + hlist_del_rcu(&server->addr_link);
> }
> write_sequnlock(&net->fs_lock);
>
Reviewed-by: Jeffrey E Altman <jaltman at auristor.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4039 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.infradead.org/pipermail/linux-afs/attachments/20240216/67c6f696/attachment.p7s>
More information about the linux-afs
mailing list