X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Flockd%2Fclntlock.c;h=41e491b8e5d7e40164e0e51d90534c9d8660a94e;hb=9a1b6bf818e7;hp=01bfe76627516d836241b249bdeac7b0a02b0f97;hpb=4c0eec03b188efafba3a35315b59a9efbf9684fc;p=~andy%2Flinux diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c index 01bfe766275..41e491b8e5d 100644 --- a/fs/lockd/clntlock.c +++ b/fs/lockd/clntlock.c @@ -64,12 +64,17 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init) nlm_init->protocol, nlm_version, nlm_init->hostname, nlm_init->noresvport, nlm_init->net); - if (host == NULL) { - lockd_down(nlm_init->net); - return ERR_PTR(-ENOLCK); - } + if (host == NULL) + goto out_nohost; + if (host->h_rpcclnt == NULL && nlm_bind_host(host) == NULL) + goto out_nobind; return host; +out_nobind: + nlmclnt_release_host(host); +out_nohost: + lockd_down(nlm_init->net); + return ERR_PTR(-ENOLCK); } EXPORT_SYMBOL_GPL(nlmclnt_init);