|
@@ -223,23 +223,29 @@ static int find_socket(struct svc_serv *serv, int proto)
|
|
|
return found;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Make any sockets that are needed but not present.
|
|
|
+ * If nlm_udpport or nlm_tcpport were set as module
|
|
|
+ * options, make those sockets unconditionally
|
|
|
+ */
|
|
|
static int make_socks(struct svc_serv *serv, int proto)
|
|
|
{
|
|
|
- /* Make any sockets that are needed but not present.
|
|
|
- * If nlm_udpport or nlm_tcpport were set as module
|
|
|
- * options, make those sockets unconditionally
|
|
|
- */
|
|
|
- static int warned;
|
|
|
+ static int warned;
|
|
|
int err = 0;
|
|
|
+
|
|
|
if (proto == IPPROTO_UDP || nlm_udpport)
|
|
|
if (!find_socket(serv, IPPROTO_UDP))
|
|
|
- err = svc_makesock(serv, IPPROTO_UDP, nlm_udpport);
|
|
|
- if (err == 0 && (proto == IPPROTO_TCP || nlm_tcpport))
|
|
|
+ err = svc_makesock(serv, IPPROTO_UDP, nlm_udpport,
|
|
|
+ SVC_SOCK_DEFAULTS);
|
|
|
+ if (err >= 0 && (proto == IPPROTO_TCP || nlm_tcpport))
|
|
|
if (!find_socket(serv, IPPROTO_TCP))
|
|
|
- err= svc_makesock(serv, IPPROTO_TCP, nlm_tcpport);
|
|
|
- if (!err)
|
|
|
+ err = svc_makesock(serv, IPPROTO_TCP, nlm_tcpport,
|
|
|
+ SVC_SOCK_DEFAULTS);
|
|
|
+
|
|
|
+ if (err >= 0) {
|
|
|
warned = 0;
|
|
|
- else if (warned++ == 0)
|
|
|
+ err = 0;
|
|
|
+ } else if (warned++ == 0)
|
|
|
printk(KERN_WARNING
|
|
|
"lockd_up: makesock failed, error=%d\n", err);
|
|
|
return err;
|