void afs_put_serverlist(struct afs_net *net, struct afs_server_list *slist)
{ int i;
if (slist && refcount_dec_and_test(&slist->usage)) { for (i = 0; i < slist->nr_servers; i++)
afs_unuse_server(net, slist->servers[i].server,
afs_server_trace_unuse_slist);
kfree_rcu(slist, rcu);
}
}
/* Work out if we're going to restrict to NEWREPSITE-marked servers or *not.IfatleastonesiteismarkedasNEWREPSITE,thenit'slikely *that"vosrelease"isbusyupdatingROsites.Wecutoverfromone *totheotherwhen>=50%ofthesiteshavebeenupdated.Sitesthat *areintheprocessofbeingupdatedaremarkedDONTUSE.
*/ for (i = 0; i < vldb->nr_servers; i++) { if (!(vldb->fs_mask[i] & type_mask)) continue;
nr_servers++; if (vldb->vlsf_flags[i] & AFS_VLSF_DONTUSE) continue;
usable++; if (vldb->vlsf_flags[i] & AFS_VLSF_NEWREPSITE)
newrep++;
}
slist = kzalloc(struct_size(slist, servers, nr_servers), GFP_KERNEL); if (!slist) goto error;
/* Make sure a records exists for each server in the list. */ for (i = 0; i < vldb->nr_servers; i++) { unsignedlong se_flags = 0; bool newrepsite = vldb->vlsf_flags[i] & AFS_VLSF_NEWREPSITE;
if (!(vldb->fs_mask[i] & type_mask)) continue; if (vldb->vlsf_flags[i] & AFS_VLSF_DONTUSE)
__set_bit(AFS_SE_EXCLUDED, &se_flags); if (newrep && (newrepsite ^ use_newrepsites))
__set_bit(AFS_SE_EXCLUDED, &se_flags);
server = afs_lookup_server(volume->cell, key, &vldb->fs_server[i],
vldb->addr_version[i]); if (IS_ERR(server)) {
ret = PTR_ERR(server); if (ret == -ENOENT ||
ret == -ENOMEDIUM) continue; goto error_2;
}
/* Insertion-sort by UUID */ for (j = 0; j < slist->nr_servers; j++) if (memcmp(&slist->servers[j].server->uuid,
&server->uuid, sizeof(server->uuid)) >= 0) break; if (j < slist->nr_servers) { if (slist->servers[j].server == server) {
afs_unuse_server_notime(volume->cell->net, server,
afs_server_trace_unuse_slist_isort); continue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.