Merge branch 'for-3.8' of git://linux-nfs.org/~bfields/linux
[linux-drm-fsl-dcu.git] / net / sunrpc / svc.c
index c6abf1a6ba956230bd65c97df4fb28d9c93f6edd..dbf12ac5ecb7f611fac1a06d5db643a7a5a39ac4 100644 (file)
@@ -323,7 +323,9 @@ svc_pool_map_set_cpumask(struct task_struct *task, unsigned int pidx)
         * The caller checks for sv_nrpools > 1, which
         * implies that we've been initialized.
         */
-       BUG_ON(m->count == 0);
+       WARN_ON_ONCE(m->count == 0);
+       if (m->count == 0)
+               return;
 
        switch (m->mode) {
        case SVC_POOL_PERCPU:
@@ -584,7 +586,9 @@ svc_init_buffer(struct svc_rqst *rqstp, unsigned int size, int node)
                                       * We assume one is at most one page
                                       */
        arghi = 0;
-       BUG_ON(pages > RPCSVC_MAXPAGES);
+       WARN_ON_ONCE(pages > RPCSVC_MAXPAGES);
+       if (pages > RPCSVC_MAXPAGES)
+               pages = RPCSVC_MAXPAGES;
        while (pages) {
                struct page *p = alloc_pages_node(node, GFP_KERNEL, 0);
                if (!p)
@@ -945,7 +949,9 @@ int svc_register(const struct svc_serv *serv, struct net *net,
        unsigned int            i;
        int                     error = 0;
 
-       BUG_ON(proto == 0 && port == 0);
+       WARN_ON_ONCE(proto == 0 && port == 0);
+       if (proto == 0 && port == 0)
+               return -EINVAL;
 
        for (progp = serv->sv_program; progp; progp = progp->pg_next) {
                for (i = 0; i < progp->pg_nvers; i++) {