Skip to content

Commit 07f3502

Browse files
committed
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 <[email protected]> cc: Marc Dionne <[email protected]> cc: [email protected]
1 parent fe245c8 commit 07f3502

File tree

10 files changed

+26
-22
lines changed

10 files changed

+26
-22
lines changed

fs/afs/addr_list.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ struct afs_addr_list *afs_alloc_addrlist(unsigned int nr,
4545
alist->max_addrs = nr;
4646

4747
for (i = 0; i < nr; i++) {
48-
struct sockaddr_rxrpc *srx = &alist->addrs[i];
48+
struct sockaddr_rxrpc *srx = &alist->addrs[i].srx;
4949
srx->srx_family = AF_RXRPC;
5050
srx->srx_service = service;
5151
srx->transport_type = SOCK_DGRAM;
@@ -281,7 +281,7 @@ void afs_merge_fs_addr4(struct afs_addr_list *alist, __be32 xdr, u16 port)
281281
return;
282282

283283
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;
285285
u32 a_addr = ntohl(a->sin_addr.s_addr);
286286
u16 a_port = ntohs(a->sin_port);
287287

@@ -298,7 +298,7 @@ void afs_merge_fs_addr4(struct afs_addr_list *alist, __be32 xdr, u16 port)
298298
alist->addrs + i,
299299
sizeof(alist->addrs[0]) * (alist->nr_addrs - i));
300300

301-
srx = &alist->addrs[i];
301+
srx = &alist->addrs[i].srx;
302302
srx->srx_family = AF_RXRPC;
303303
srx->transport_type = SOCK_DGRAM;
304304
srx->transport_len = sizeof(srx->transport.sin);
@@ -321,7 +321,7 @@ void afs_merge_fs_addr6(struct afs_addr_list *alist, __be32 *xdr, u16 port)
321321
return;
322322

323323
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;
325325
u16 a_port = ntohs(a->sin6_port);
326326

327327
diff = memcmp(xdr, &a->sin6_addr, 16);
@@ -338,7 +338,7 @@ void afs_merge_fs_addr6(struct afs_addr_list *alist, __be32 *xdr, u16 port)
338338
alist->addrs + i,
339339
sizeof(alist->addrs[0]) * (alist->nr_addrs - i));
340340

341-
srx = &alist->addrs[i];
341+
srx = &alist->addrs[i].srx;
342342
srx->srx_family = AF_RXRPC;
343343
srx->transport_type = SOCK_DGRAM;
344344
srx->transport_len = sizeof(srx->transport.sin6);

fs/afs/fs_probe.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,12 @@ void afs_fileserver_probe_result(struct afs_call *call)
153153
if (call->service_id == YFS_FS_SERVICE) {
154154
server->probe.is_yfs = true;
155155
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;
157157
} else {
158158
server->probe.not_yfs = true;
159159
if (!server->probe.is_yfs) {
160160
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;
162162
}
163163
cap0 = ntohl(call->tmp);
164164
if (cap0 & AFS3_VICED_CAPABILITY_64BITFILES)
@@ -182,7 +182,7 @@ void afs_fileserver_probe_result(struct afs_call *call)
182182
spin_unlock(&server->probe_lock);
183183

184184
_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,
186186
rtt_us, ret);
187187

188188
return afs_done_one_fs_probe(call->net, server);

fs/afs/internal.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ struct afs_addr_list {
8787
enum dns_lookup_status status:8;
8888
unsigned long failed; /* Mask of addrs that failed locally/ICMP */
8989
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);
9193
#define AFS_MAX_ADDRESSES ((unsigned int)(sizeof(unsigned long) * 8))
9294
};
9395

@@ -969,6 +971,8 @@ extern void afs_put_addrlist(struct afs_addr_list *);
969971
extern struct afs_vlserver_list *afs_parse_text_addrs(struct afs_net *,
970972
const char *, size_t, char,
971973
unsigned short, unsigned short);
974+
bool afs_addr_list_same(const struct afs_addr_list *a,
975+
const struct afs_addr_list *b);
972976
extern struct afs_vlserver_list *afs_dns_query(struct afs_cell *, time64_t *);
973977
extern bool afs_iterate_addresses(struct afs_addr_cursor *);
974978
extern int afs_end_cursor(struct afs_addr_cursor *);

fs/afs/proc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v)
307307
for (i = 0; i < alist->nr_addrs; i++)
308308
seq_printf(m, " %c %pISpc\n",
309309
alist->preferred == i ? '>' : '-',
310-
&alist->addrs[i].transport);
310+
&alist->addrs[i].srx.transport);
311311
}
312312
seq_printf(m, " info: fl=%lx rtt=%d\n", vlserver->flags, vlserver->rtt);
313313
seq_printf(m, " probe: fl=%x e=%d ac=%d out=%d\n",
@@ -399,7 +399,7 @@ static int afs_proc_servers_show(struct seq_file *m, void *v)
399399
alist->version, alist->responded, alist->failed);
400400
for (i = 0; i < alist->nr_addrs; i++)
401401
seq_printf(m, " [%x] %pISpc%s\n",
402-
i, &alist->addrs[i].transport,
402+
i, &alist->addrs[i].srx.transport,
403403
alist->preferred == i ? "*" : "");
404404
return 0;
405405
}

fs/afs/rotate.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ bool afs_select_fileserver(struct afs_operation *op)
488488

489489
_debug("address [%u] %u/%u %pISp",
490490
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);
492492

493493
_leave(" = t");
494494
return true;

fs/afs/rxrpc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ static void afs_notify_end_request_tx(struct sock *sock,
296296
*/
297297
void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp)
298298
{
299-
struct sockaddr_rxrpc *srx = &ac->alist->addrs[ac->index];
299+
struct sockaddr_rxrpc *srx = &ac->alist->addrs[ac->index].srx;
300300
struct rxrpc_call *rxcall;
301301
struct msghdr msg;
302302
struct kvec iov[1];
@@ -461,7 +461,7 @@ static void afs_log_error(struct afs_call *call, s32 remote_abort)
461461
max = m + 1;
462462
pr_notice("kAFS: Peer reported %s failure on %s [%pISp]\n",
463463
msg, call->type->name,
464-
&call->alist->addrs[call->addr_ix].transport);
464+
&call->alist->addrs[call->addr_ix].srx.transport);
465465
}
466466
}
467467

fs/afs/server.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
4343
hlist_for_each_entry_rcu(server, &net->fs_addresses6, addr6_link) {
4444
alist = rcu_dereference(server->addresses);
4545
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;
4747
diff = ((u16 __force)a->sin6_port -
4848
(u16 __force)b->sin6_port);
4949
if (diff == 0)
@@ -59,7 +59,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
5959
hlist_for_each_entry_rcu(server, &net->fs_addresses4, addr4_link) {
6060
alist = rcu_dereference(server->addresses);
6161
for (i = 0; i < alist->nr_ipv4; i++) {
62-
b = &alist->addrs[i].transport.sin;
62+
b = &alist->addrs[i].srx.transport.sin;
6363
diff = ((u16 __force)a->sin_port -
6464
(u16 __force)b->sin_port);
6565
if (diff == 0)

fs/afs/vl_alias.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ static int afs_compare_fs_alists(const struct afs_server *server_a,
9494
lb = rcu_dereference(server_b->addresses);
9595

9696
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;
9999
int diff = afs_compare_addrs(srx_a, srx_b);
100100

101101
if (diff < 0) {

fs/afs/vl_probe.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,12 @@ void afs_vlserver_probe_result(struct afs_call *call)
106106
if (call->service_id == YFS_VL_SERVICE) {
107107
server->probe.flags |= AFS_VLSERVER_PROBE_IS_YFS;
108108
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;
110110
} else {
111111
server->probe.flags |= AFS_VLSERVER_PROBE_NOT_YFS;
112112
if (!(server->probe.flags & AFS_VLSERVER_PROBE_IS_YFS)) {
113113
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;
115115
}
116116
}
117117

@@ -131,7 +131,7 @@ void afs_vlserver_probe_result(struct afs_call *call)
131131
spin_unlock(&server->probe_lock);
132132

133133
_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);
135135

136136
afs_done_one_vl_probe(server, have_result);
137137
}

fs/afs/vl_rotate.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ bool afs_select_vlserver(struct afs_vl_cursor *vc)
249249

250250
_debug("VL address %d/%d", vc->ac.index, vc->ac.alist->nr_addrs);
251251

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);
253253
return true;
254254

255255
next_server:

0 commit comments

Comments
 (0)