svc_sock_update_bufs(serv);
 
-       cb_info->serv = serv;
        cb_info->rqst = rqstp;
        cb_info->task = kthread_create(serv->sv_ops->svo_function,
                                    cb_info->rqst,
        /*
         * Check whether we're already up and running.
         */
-       if (cb_info->task) {
+       if (cb_info->serv) {
                /*
                 * Note: increase service usage, because later in case of error
                 * svc_destroy() will be called.
                printk(KERN_ERR "nfs_callback_create_svc: create service failed\n");
                return ERR_PTR(-ENOMEM);
        }
+       cb_info->serv = serv;
        /* As there is only one thread we need to over-ride the
         * default maximum of 80 connections
         */
         * thread exits.
         */
 err_net:
+       if (!cb_info->users)
+               cb_info->serv = NULL;
        svc_destroy(serv);
 err_create:
        mutex_unlock(&nfs_callback_mutex);
        mutex_lock(&nfs_callback_mutex);
        nfs_callback_down_net(minorversion, cb_info->serv, net);
        cb_info->users--;
-       if (cb_info->users == 0 && cb_info->task != NULL) {
-               kthread_stop(cb_info->task);
-               dprintk("nfs_callback_down: service stopped\n");
+       if (cb_info->users == 0) {
+               if (cb_info->task != NULL) {
+                       kthread_stop(cb_info->task);
+                       dprintk("nfs_callback_down: service stopped\n");
+               }
                svc_exit_thread(cb_info->rqst);
                dprintk("nfs_callback_down: service destroyed\n");
                cb_info->serv = NULL;