Lines Matching refs:alist
19 void afs_put_addrlist(struct afs_addr_list *alist)
21 if (alist && refcount_dec_and_test(&alist->usage))
22 kfree_rcu(alist, rcu);
32 struct afs_addr_list *alist;
40 alist = kzalloc(struct_size(alist, addrs, nr), GFP_KERNEL);
41 if (!alist)
44 refcount_set(&alist->usage, 1);
45 alist->max_addrs = nr;
48 struct sockaddr_rxrpc *srx = &alist->addrs[i];
57 return alist;
70 struct afs_addr_list *alist;
129 alist = afs_alloc_addrlist(nr, service, AFS_VL_PORT);
130 if (!alist)
200 afs_merge_fs_addr4(alist, x[0], xport);
202 afs_merge_fs_addr6(alist, x, xport);
206 rcu_assign_pointer(vllist->servers[0].server->addresses, alist);
207 _leave(" = [nr %u]", alist->nr_addrs);
219 afs_put_addrlist(alist);
274 void afs_merge_fs_addr4(struct afs_addr_list *alist, __be32 xdr, u16 port)
280 if (alist->nr_addrs >= alist->max_addrs)
283 for (i = 0; i < alist->nr_ipv4; i++) {
284 struct sockaddr_in *a = &alist->addrs[i].transport.sin;
296 if (i < alist->nr_addrs)
297 memmove(alist->addrs + i + 1,
298 alist->addrs + i,
299 sizeof(alist->addrs[0]) * (alist->nr_addrs - i));
301 srx = &alist->addrs[i];
308 alist->nr_ipv4++;
309 alist->nr_addrs++;
315 void afs_merge_fs_addr6(struct afs_addr_list *alist, __be32 *xdr, u16 port)
320 if (alist->nr_addrs >= alist->max_addrs)
323 for (i = alist->nr_ipv4; i < alist->nr_addrs; i++) {
324 struct sockaddr_in6 *a = &alist->addrs[i].transport.sin6;
336 if (i < alist->nr_addrs)
337 memmove(alist->addrs + i + 1,
338 alist->addrs + i,
339 sizeof(alist->addrs[0]) * (alist->nr_addrs - i));
341 srx = &alist->addrs[i];
348 alist->nr_addrs++;
359 if (!ac->alist)
362 set = ac->alist->responded;
363 failed = ac->alist->failed;
373 index = READ_ONCE(ac->alist->preferred);
391 struct afs_addr_list *alist;
393 alist = ac->alist;
394 if (alist) {
396 ac->index != alist->preferred &&
397 test_bit(ac->alist->preferred, &ac->tried))
398 WRITE_ONCE(alist->preferred, ac->index);
399 afs_put_addrlist(alist);
400 ac->alist = NULL;