Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

afs: Turn the afs_addr_list address array into an array of structs

Turn the afs_addr_list address array into an array of structs, thereby
allowing per-address (such as RTT) info to be added.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org

+26 -22
+5 -5
fs/afs/addr_list.c
··· 45 45 alist->max_addrs = nr; 46 46 47 47 for (i = 0; i < nr; i++) { 48 - struct sockaddr_rxrpc *srx = &alist->addrs[i]; 48 + struct sockaddr_rxrpc *srx = &alist->addrs[i].srx; 49 49 srx->srx_family = AF_RXRPC; 50 50 srx->srx_service = service; 51 51 srx->transport_type = SOCK_DGRAM; ··· 281 281 return; 282 282 283 283 for (i = 0; i < alist->nr_ipv4; i++) { 284 - struct sockaddr_in *a = &alist->addrs[i].transport.sin; 284 + struct sockaddr_in *a = &alist->addrs[i].srx.transport.sin; 285 285 u32 a_addr = ntohl(a->sin_addr.s_addr); 286 286 u16 a_port = ntohs(a->sin_port); 287 287 ··· 298 298 alist->addrs + i, 299 299 sizeof(alist->addrs[0]) * (alist->nr_addrs - i)); 300 300 301 - srx = &alist->addrs[i]; 301 + srx = &alist->addrs[i].srx; 302 302 srx->srx_family = AF_RXRPC; 303 303 srx->transport_type = SOCK_DGRAM; 304 304 srx->transport_len = sizeof(srx->transport.sin); ··· 321 321 return; 322 322 323 323 for (i = alist->nr_ipv4; i < alist->nr_addrs; i++) { 324 - struct sockaddr_in6 *a = &alist->addrs[i].transport.sin6; 324 + struct sockaddr_in6 *a = &alist->addrs[i].srx.transport.sin6; 325 325 u16 a_port = ntohs(a->sin6_port); 326 326 327 327 diff = memcmp(xdr, &a->sin6_addr, 16); ··· 338 338 alist->addrs + i, 339 339 sizeof(alist->addrs[0]) * (alist->nr_addrs - i)); 340 340 341 - srx = &alist->addrs[i]; 341 + srx = &alist->addrs[i].srx; 342 342 srx->srx_family = AF_RXRPC; 343 343 srx->transport_type = SOCK_DGRAM; 344 344 srx->transport_len = sizeof(srx->transport.sin6);
+3 -3
fs/afs/fs_probe.c
··· 153 153 if (call->service_id == YFS_FS_SERVICE) { 154 154 server->probe.is_yfs = true; 155 155 set_bit(AFS_SERVER_FL_IS_YFS, &server->flags); 156 - alist->addrs[index].srx_service = call->service_id; 156 + alist->addrs[index].srx.srx_service = call->service_id; 157 157 } else { 158 158 server->probe.not_yfs = true; 159 159 if (!server->probe.is_yfs) { 160 160 clear_bit(AFS_SERVER_FL_IS_YFS, &server->flags); 161 - alist->addrs[index].srx_service = call->service_id; 161 + alist->addrs[index].srx.srx_service = call->service_id; 162 162 } 163 163 cap0 = ntohl(call->tmp); 164 164 if (cap0 & AFS3_VICED_CAPABILITY_64BITFILES) ··· 182 182 spin_unlock(&server->probe_lock); 183 183 184 184 _debug("probe %pU [%u] %pISpc rtt=%u ret=%d", 185 - &server->uuid, index, &alist->addrs[index].transport, 185 + &server->uuid, index, &alist->addrs[index].srx.transport, 186 186 rtt_us, ret); 187 187 188 188 return afs_done_one_fs_probe(call->net, server);
+5 -1
fs/afs/internal.h
··· 87 87 enum dns_lookup_status status:8; 88 88 unsigned long failed; /* Mask of addrs that failed locally/ICMP */ 89 89 unsigned long responded; /* Mask of addrs that responded */ 90 - struct sockaddr_rxrpc addrs[] __counted_by(max_addrs); 90 + struct { 91 + struct sockaddr_rxrpc srx; 92 + } addrs[] __counted_by(max_addrs); 91 93 #define AFS_MAX_ADDRESSES ((unsigned int)(sizeof(unsigned long) * 8)) 92 94 }; 93 95 ··· 971 969 extern struct afs_vlserver_list *afs_parse_text_addrs(struct afs_net *, 972 970 const char *, size_t, char, 973 971 unsigned short, unsigned short); 972 + bool afs_addr_list_same(const struct afs_addr_list *a, 973 + const struct afs_addr_list *b); 974 974 extern struct afs_vlserver_list *afs_dns_query(struct afs_cell *, time64_t *); 975 975 extern bool afs_iterate_addresses(struct afs_addr_cursor *); 976 976 extern int afs_end_cursor(struct afs_addr_cursor *);
+2 -2
fs/afs/proc.c
··· 307 307 for (i = 0; i < alist->nr_addrs; i++) 308 308 seq_printf(m, " %c %pISpc\n", 309 309 alist->preferred == i ? '>' : '-', 310 - &alist->addrs[i].transport); 310 + &alist->addrs[i].srx.transport); 311 311 } 312 312 seq_printf(m, " info: fl=%lx rtt=%d\n", vlserver->flags, vlserver->rtt); 313 313 seq_printf(m, " probe: fl=%x e=%d ac=%d out=%d\n", ··· 399 399 alist->version, alist->responded, alist->failed); 400 400 for (i = 0; i < alist->nr_addrs; i++) 401 401 seq_printf(m, " [%x] %pISpc%s\n", 402 - i, &alist->addrs[i].transport, 402 + i, &alist->addrs[i].srx.transport, 403 403 alist->preferred == i ? "*" : ""); 404 404 return 0; 405 405 }
+1 -1
fs/afs/rotate.c
··· 488 488 489 489 _debug("address [%u] %u/%u %pISp", 490 490 op->index, op->ac.index, op->ac.alist->nr_addrs, 491 - &op->ac.alist->addrs[op->ac.index].transport); 491 + &op->ac.alist->addrs[op->ac.index].srx.transport); 492 492 493 493 _leave(" = t"); 494 494 return true;
+2 -2
fs/afs/rxrpc.c
··· 296 296 */ 297 297 void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp) 298 298 { 299 - struct sockaddr_rxrpc *srx = &ac->alist->addrs[ac->index]; 299 + struct sockaddr_rxrpc *srx = &ac->alist->addrs[ac->index].srx; 300 300 struct rxrpc_call *rxcall; 301 301 struct msghdr msg; 302 302 struct kvec iov[1]; ··· 461 461 max = m + 1; 462 462 pr_notice("kAFS: Peer reported %s failure on %s [%pISp]\n", 463 463 msg, call->type->name, 464 - &call->alist->addrs[call->addr_ix].transport); 464 + &call->alist->addrs[call->addr_ix].srx.transport); 465 465 } 466 466 } 467 467
+2 -2
fs/afs/server.c
··· 43 43 hlist_for_each_entry_rcu(server, &net->fs_addresses6, addr6_link) { 44 44 alist = rcu_dereference(server->addresses); 45 45 for (i = alist->nr_ipv4; i < alist->nr_addrs; i++) { 46 - b = &alist->addrs[i].transport.sin6; 46 + b = &alist->addrs[i].srx.transport.sin6; 47 47 diff = ((u16 __force)a->sin6_port - 48 48 (u16 __force)b->sin6_port); 49 49 if (diff == 0) ··· 59 59 hlist_for_each_entry_rcu(server, &net->fs_addresses4, addr4_link) { 60 60 alist = rcu_dereference(server->addresses); 61 61 for (i = 0; i < alist->nr_ipv4; i++) { 62 - b = &alist->addrs[i].transport.sin; 62 + b = &alist->addrs[i].srx.transport.sin; 63 63 diff = ((u16 __force)a->sin_port - 64 64 (u16 __force)b->sin_port); 65 65 if (diff == 0)
+2 -2
fs/afs/vl_alias.c
··· 94 94 lb = rcu_dereference(server_b->addresses); 95 95 96 96 while (a < la->nr_addrs && b < lb->nr_addrs) { 97 - const struct sockaddr_rxrpc *srx_a = &la->addrs[a]; 98 - const struct sockaddr_rxrpc *srx_b = &lb->addrs[b]; 97 + const struct sockaddr_rxrpc *srx_a = &la->addrs[a].srx; 98 + const struct sockaddr_rxrpc *srx_b = &lb->addrs[b].srx; 99 99 int diff = afs_compare_addrs(srx_a, srx_b); 100 100 101 101 if (diff < 0) {
+3 -3
fs/afs/vl_probe.c
··· 106 106 if (call->service_id == YFS_VL_SERVICE) { 107 107 server->probe.flags |= AFS_VLSERVER_PROBE_IS_YFS; 108 108 set_bit(AFS_VLSERVER_FL_IS_YFS, &server->flags); 109 - alist->addrs[index].srx_service = call->service_id; 109 + alist->addrs[index].srx.srx_service = call->service_id; 110 110 } else { 111 111 server->probe.flags |= AFS_VLSERVER_PROBE_NOT_YFS; 112 112 if (!(server->probe.flags & AFS_VLSERVER_PROBE_IS_YFS)) { 113 113 clear_bit(AFS_VLSERVER_FL_IS_YFS, &server->flags); 114 - alist->addrs[index].srx_service = call->service_id; 114 + alist->addrs[index].srx.srx_service = call->service_id; 115 115 } 116 116 } 117 117 ··· 131 131 spin_unlock(&server->probe_lock); 132 132 133 133 _debug("probe [%u][%u] %pISpc rtt=%u ret=%d", 134 - server_index, index, &alist->addrs[index].transport, rtt_us, ret); 134 + server_index, index, &alist->addrs[index].srx.transport, rtt_us, ret); 135 135 136 136 afs_done_one_vl_probe(server, have_result); 137 137 }
+1 -1
fs/afs/vl_rotate.c
··· 249 249 250 250 _debug("VL address %d/%d", vc->ac.index, vc->ac.alist->nr_addrs); 251 251 252 - _leave(" = t %pISpc", &vc->ac.alist->addrs[vc->ac.index].transport); 252 + _leave(" = t %pISpc", &vc->ac.alist->addrs[vc->ac.index].srx.transport); 253 253 return true; 254 254 255 255 next_server: