Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 82487
b: refs/heads/master
c: 9571af1
h: refs/heads/master
i:
  82485: b95906a
  82483: d2933ae
  82479: abce89f
v: v3
  • Loading branch information
Tom Tucker authored and J. Bruce Fields committed Feb 1, 2008
1 parent 52f11af commit 4c19ad3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a217813f9067b785241cb7f31956e51d2071703a
refs/heads/master: 9571af18fa1e4a431dc6f6023ddbd87d1112fd5d
2 changes: 1 addition & 1 deletion trunk/fs/nfsd/nfsctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ static ssize_t write_ports(struct file *file, char *buf, size_t size)
int len = 0;
lock_kernel();
if (nfsd_serv)
len = svc_sock_names(buf, nfsd_serv, NULL);
len = svc_xprt_names(nfsd_serv, buf, 0);
unlock_kernel();
return len;
}
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/sunrpc/svc_xprt.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ void svc_delete_xprt(struct svc_xprt *xprt);
int svc_port_is_privileged(struct sockaddr *sin);
int svc_print_xprts(char *buf, int maxlen);
struct svc_xprt *svc_find_xprt(struct svc_serv *, char *, int, int);
int svc_xprt_names(struct svc_serv *serv, char *buf, int buflen);

static inline void svc_xprt_get(struct svc_xprt *xprt)
{
Expand Down
35 changes: 35 additions & 0 deletions trunk/net/sunrpc/svc_xprt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1014,3 +1014,38 @@ struct svc_xprt *svc_find_xprt(struct svc_serv *serv, char *xcl_name,
return found;
}
EXPORT_SYMBOL_GPL(svc_find_xprt);

/*
* Format a buffer with a list of the active transports. A zero for
* the buflen parameter disables target buffer overflow checking.
*/
int svc_xprt_names(struct svc_serv *serv, char *buf, int buflen)
{
struct svc_xprt *xprt;
char xprt_str[64];
int totlen = 0;
int len;

/* Sanity check args */
if (!serv)
return 0;

spin_lock_bh(&serv->sv_lock);
list_for_each_entry(xprt, &serv->sv_permsocks, xpt_list) {
len = snprintf(xprt_str, sizeof(xprt_str),
"%s %d\n", xprt->xpt_class->xcl_name,
svc_xprt_local_port(xprt));
/* If the string was truncated, replace with error string */
if (len >= sizeof(xprt_str))
strcpy(xprt_str, "name-too-long\n");
/* Don't overflow buffer */
len = strlen(xprt_str);
if (buflen && (len + totlen >= buflen))
break;
strcpy(buf+totlen, xprt_str);
totlen += len;
}
spin_unlock_bh(&serv->sv_lock);
return totlen;
}
EXPORT_SYMBOL_GPL(svc_xprt_names);

0 comments on commit 4c19ad3

Please sign in to comment.