NFSD: Refactor portlist socket closing into a helper
authorChuck Lever <chuck.lever@oracle.com>
Thu, 23 Apr 2009 23:31:48 +0000 (19:31 -0400)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Tue, 28 Apr 2009 17:54:26 +0000 (13:54 -0400)
Clean up: Refactor the socket closing logic out of __write_ports() to
make it easier to understand and maintain.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
fs/nfsd/nfsctl.c

index 748532b..fa268d1 100644 (file)
@@ -911,6 +911,27 @@ static ssize_t write_versions(struct file *file, char *buf, size_t size)
 }
 
 /*
+ * A '-' followed by the 'name' of a socket means we close the socket.
+ */
+static ssize_t __write_ports_delfd(char *buf)
+{
+       char *toclose;
+       int len = 0;
+
+       toclose = kstrdup(buf + 1, GFP_KERNEL);
+       if (toclose == NULL)
+               return -ENOMEM;
+
+       if (nfsd_serv != NULL)
+               len = svc_sock_names(buf, nfsd_serv, toclose);
+       if (len >= 0)
+               lockd_down();
+
+       kfree(toclose);
+       return len;
+}
+
+/*
  * A transport listener is added by writing it's transport name and
  * a port number.
  */
@@ -1004,18 +1025,9 @@ static ssize_t __write_ports(struct file *file, char *buf, size_t size)
                }
                return err < 0 ? err : 0;
        }
-       if (buf[0] == '-' && isdigit(buf[1])) {
-               char *toclose = kstrdup(buf+1, GFP_KERNEL);
-               int len = 0;
-               if (!toclose)
-                       return -ENOMEM;
-               if (nfsd_serv)
-                       len = svc_sock_names(buf, nfsd_serv, toclose);
-               if (len >= 0)
-                       lockd_down();
-               kfree(toclose);
-               return len;
-       }
+
+       if (buf[0] == '-' && isdigit(buf[1]))
+               return __write_ports_delfd(buf);
 
        if (isalpha(buf[0]))
                return __write_ports_addxprt(buf);