Loading fs/nfsd/nfsctl.c +29 −24 Original line number Diff line number Diff line Loading @@ -910,6 +910,31 @@ static ssize_t write_versions(struct file *file, char *buf, size_t size) return rv; } /* * A transport listener is removed by writing a "-", it's transport * name, and it's port number. */ static ssize_t __write_ports_delxprt(char *buf) { struct svc_xprt *xprt; char transport[16]; int port; if (sscanf(&buf[1], "%15s %4u", transport, &port) != 2) return -EINVAL; if (port < 1 || port > USHORT_MAX || nfsd_serv == NULL) return -EINVAL; xprt = svc_find_xprt(nfsd_serv, transport, AF_UNSPEC, port); if (xprt == NULL) return -ENOTCONN; svc_close_xprt(xprt); svc_xprt_put(xprt); return 0; } static ssize_t __write_ports(struct file *file, char *buf, size_t size) { if (size == 0) { Loading Loading @@ -984,30 +1009,10 @@ static ssize_t __write_ports(struct file *file, char *buf, size_t size) return err < 0 ? err : 0; } } /* * Remove a transport by writing it's transport name and port number */ if (buf[0] == '-' && isalpha(buf[1])) { struct svc_xprt *xprt; int err = -EINVAL; char transport[16]; int port; if (sscanf(&buf[1], "%15s %4d", transport, &port) == 2) { if (port < 1 || port > 65535) return -EINVAL; if (nfsd_serv) { xprt = svc_find_xprt(nfsd_serv, transport, AF_UNSPEC, port); if (xprt) { svc_close_xprt(xprt); svc_xprt_put(xprt); err = 0; } else err = -ENOTCONN; } return err < 0 ? err : 0; } } if (buf[0] == '-' && isalpha(buf[1])) return __write_ports_delxprt(buf); return -EINVAL; } Loading Loading
fs/nfsd/nfsctl.c +29 −24 Original line number Diff line number Diff line Loading @@ -910,6 +910,31 @@ static ssize_t write_versions(struct file *file, char *buf, size_t size) return rv; } /* * A transport listener is removed by writing a "-", it's transport * name, and it's port number. */ static ssize_t __write_ports_delxprt(char *buf) { struct svc_xprt *xprt; char transport[16]; int port; if (sscanf(&buf[1], "%15s %4u", transport, &port) != 2) return -EINVAL; if (port < 1 || port > USHORT_MAX || nfsd_serv == NULL) return -EINVAL; xprt = svc_find_xprt(nfsd_serv, transport, AF_UNSPEC, port); if (xprt == NULL) return -ENOTCONN; svc_close_xprt(xprt); svc_xprt_put(xprt); return 0; } static ssize_t __write_ports(struct file *file, char *buf, size_t size) { if (size == 0) { Loading Loading @@ -984,30 +1009,10 @@ static ssize_t __write_ports(struct file *file, char *buf, size_t size) return err < 0 ? err : 0; } } /* * Remove a transport by writing it's transport name and port number */ if (buf[0] == '-' && isalpha(buf[1])) { struct svc_xprt *xprt; int err = -EINVAL; char transport[16]; int port; if (sscanf(&buf[1], "%15s %4d", transport, &port) == 2) { if (port < 1 || port > 65535) return -EINVAL; if (nfsd_serv) { xprt = svc_find_xprt(nfsd_serv, transport, AF_UNSPEC, port); if (xprt) { svc_close_xprt(xprt); svc_xprt_put(xprt); err = 0; } else err = -ENOTCONN; } return err < 0 ? err : 0; } } if (buf[0] == '-' && isalpha(buf[1])) return __write_ports_delxprt(buf); return -EINVAL; } Loading