]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/nfsd/nfsctl.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-linus
[karo-tx-linux.git] / fs / nfsd / nfsctl.c
index af7469efc61c982cedb0aa29cdebe5dbb4bcf56b..b53b1d042f1ff3190b6696876da88cf355277b5a 100644 (file)
@@ -949,15 +949,8 @@ static ssize_t __write_ports_addfd(char *buf)
        if (err != 0)
                return err;
 
-       err = lockd_up();
-       if (err != 0) {
-               svc_destroy(nfsd_serv);
-               return err;
-       }
-
        err = svc_addsock(nfsd_serv, fd, buf, SIMPLE_TRANSACTION_LIMIT);
        if (err < 0) {
-               lockd_down();
                svc_destroy(nfsd_serv);
                return err;
        }
@@ -982,9 +975,6 @@ static ssize_t __write_ports_delfd(char *buf)
        if (nfsd_serv != NULL)
                len = svc_sock_names(nfsd_serv, buf,
                                        SIMPLE_TRANSACTION_LIMIT, toclose);
-       if (len >= 0)
-               lockd_down();
-
        kfree(toclose);
        return len;
 }
@@ -1018,6 +1008,9 @@ static ssize_t __write_ports_addxprt(char *buf)
                                PF_INET6, port, SVC_SOCK_ANONYMOUS);
        if (err < 0 && err != -EAFNOSUPPORT)
                goto out_close;
+
+       /* Decrease the count, but don't shut down the service */
+       nfsd_serv->sv_nrthreads--;
        return 0;
 out_close:
        xprt = svc_find_xprt(nfsd_serv, transport, PF_INET, port);
@@ -1026,8 +1019,7 @@ out_close:
                svc_xprt_put(xprt);
        }
 out_err:
-       /* Decrease the count, but don't shut down the service */
-       nfsd_serv->sv_nrthreads--;
+       svc_destroy(nfsd_serv);
        return err;
 }
 
@@ -1198,7 +1190,7 @@ static ssize_t write_maxblksize(struct file *file, char *buf, size_t size)
                        bsize = NFSSVC_MAXBLKSIZE;
                bsize &= ~(1024-1);
                mutex_lock(&nfsd_mutex);
-               if (nfsd_serv && nfsd_serv->sv_nrthreads) {
+               if (nfsd_serv) {
                        mutex_unlock(&nfsd_mutex);
                        return -EBUSY;
                }
@@ -1314,6 +1306,8 @@ static ssize_t __write_recoverydir(struct file *file, char *buf, size_t size)
                        return -EINVAL;
 
                status = nfs4_reset_recoverydir(recdir);
+               if (status)
+                       return status;
        }
 
        return scnprintf(buf, SIMPLE_TRANSACTION_LIMIT, "%s\n",