~ubuntu-branches/ubuntu/lucid/linux-rt/lucid

« back to all changes in this revision

Viewing changes to fs/lockd/svc.c

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2009-08-05 23:00:52 UTC
  • Revision ID: james.westby@ubuntu.com-20090805230052-7xedvqcyk9dnnxb2
Tags: 2.6.31-1.1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
unsigned long                   nlmsvc_timeout;
54
54
 
55
55
/*
56
 
 * If the kernel has IPv6 support available, always listen for
57
 
 * both AF_INET and AF_INET6 requests.
58
 
 */
59
 
#if (defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) && \
60
 
        defined(CONFIG_SUNRPC_REGISTER_V4)
61
 
static const sa_family_t        nlmsvc_family = AF_INET6;
62
 
#else   /* (CONFIG_IPV6 || CONFIG_IPV6_MODULE) && CONFIG_SUNRPC_REGISTER_V4 */
63
 
static const sa_family_t        nlmsvc_family = AF_INET;
64
 
#endif  /* (CONFIG_IPV6 || CONFIG_IPV6_MODULE) && CONFIG_SUNRPC_REGISTER_V4 */
65
 
 
66
 
/*
67
56
 * These can be set at insmod time (useful for NFS as root filesystem),
68
57
 * and also changed through the sysctl interface.  -- Jamie Lokier, Aug 2003
69
58
 */
211
200
        return 0;
212
201
}
213
202
 
214
 
static int create_lockd_listener(struct svc_serv *serv, char *name,
215
 
                                 unsigned short port)
 
203
static int create_lockd_listener(struct svc_serv *serv, const char *name,
 
204
                                 const int family, const unsigned short port)
216
205
{
217
206
        struct svc_xprt *xprt;
218
207
 
219
 
        xprt = svc_find_xprt(serv, name, 0, 0);
 
208
        xprt = svc_find_xprt(serv, name, family, 0);
220
209
        if (xprt == NULL)
221
 
                return svc_create_xprt(serv, name, port, SVC_SOCK_DEFAULTS);
222
 
 
 
210
                return svc_create_xprt(serv, name, family, port,
 
211
                                                SVC_SOCK_DEFAULTS);
223
212
        svc_xprt_put(xprt);
224
213
        return 0;
225
214
}
226
215
 
 
216
static int create_lockd_family(struct svc_serv *serv, const int family)
 
217
{
 
218
        int err;
 
219
 
 
220
        err = create_lockd_listener(serv, "udp", family, nlm_udpport);
 
221
        if (err < 0)
 
222
                return err;
 
223
 
 
224
        return create_lockd_listener(serv, "tcp", family, nlm_tcpport);
 
225
}
 
226
 
227
227
/*
228
228
 * Ensure there are active UDP and TCP listeners for lockd.
229
229
 *
239
239
        static int warned;
240
240
        int err;
241
241
 
242
 
        err = create_lockd_listener(serv, "udp", nlm_udpport);
 
242
        err = create_lockd_family(serv, PF_INET);
243
243
        if (err < 0)
244
244
                goto out_err;
245
245
 
246
 
        err = create_lockd_listener(serv, "tcp", nlm_tcpport);
247
 
        if (err < 0)
 
246
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 
247
        err = create_lockd_family(serv, PF_INET6);
 
248
        if (err < 0 && err != -EAFNOSUPPORT)
248
249
                goto out_err;
 
250
#endif  /* CONFIG_IPV6 || CONFIG_IPV6_MODULE */
249
251
 
250
252
        warned = 0;
251
253
        return 0;
281
283
                        "lockd_up: no pid, %d users??\n", nlmsvc_users);
282
284
 
283
285
        error = -ENOMEM;
284
 
        serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, nlmsvc_family, NULL);
 
286
        serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, NULL);
285
287
        if (!serv) {
286
288
                printk(KERN_WARNING "lockd_up: create service failed\n");
287
289
                goto out;