[Devel] [PATCH 0/2] NFSD: fix races in service per-net resources allocation
Stanislav Kinsbursky
skinsbursky at parallels.com
Tue Feb 12 01:52:32 PST 2013
12.02.2013 00:58, J. Bruce Fields пишет:
<snip>
> void svc_close_net(struct svc_serv *serv, struct net *net)
> {
> - svc_close_list(serv, &serv->sv_tempsocks, net);
> - svc_close_list(serv, &serv->sv_permsocks, net);
> -
> - svc_clear_pools(serv, net);
> - /*
> - * At this point the sp_sockets lists will stay empty, since
> - * svc_xprt_enqueue will not add new entries without taking the
> - * sp_lock and checking XPT_BUSY.
> - */
> - svc_clear_list(serv, &serv->sv_tempsocks, net);
> - svc_clear_list(serv, &serv->sv_permsocks, net);
> + int closed;
> + int delay = 0;
> +
> +again:
> + closed = svc_close_list(serv, &serv->sv_permsocks, net);
> + closed += svc_close_list(serv, &serv->sv_tempsocks, net);
> + if (closed) {
> + svc_clean_up_xprts(serv, net);
> + msleep(delay++);
> + goto again;
> + }
Frankly, this hunk above makes me feel sick... :(
But I have no better idea right now...
Maybe make this hunk a bit less weird (this is from my POW only, of course), like this:
> + while (svc_close_list(serv, &serv->sv_permsocks, net) +
> + svc_close_list(serv, &serv->sv_tempsocks, net)) {
> + svc_clean_up_xprts(serv, net);
> + msleep(delay++);
> + }
?
Anyway, thanks!
Acked-by: Stanislav Kinsbursky <skinsbursky at parallels.com>
--
Best regards,
Stanislav Kinsbursky
More information about the Devel
mailing list