Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 47973
b: refs/heads/master
c: 6b17433
h: refs/heads/master
i:
  47971: 355cddb
v: v3
  • Loading branch information
Chuck Lever authored and Linus Torvalds committed Feb 12, 2007
1 parent 3d86ff9 commit 99bdb0e
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 21 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: f85aaeba458fda1de199a73566c641516e9a935d
refs/heads/master: 6b174337e5126de834a971d3edc3681bbfa45e2c
7 changes: 7 additions & 0 deletions trunk/include/linux/sunrpc/svcsock.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,11 @@ int svc_addsock(struct svc_serv *serv,
char *name_return,
int *proto);

/*
* svc_makesock socket characteristics
*/
#define SVC_SOCK_DEFAULTS (0U)
#define SVC_SOCK_ANONYMOUS (1U << 0) /* don't register with pmap */
#define SVC_SOCK_TEMPORARY (1U << 1) /* flag socket as temporary */

#endif /* SUNRPC_SVCSOCK_H */
47 changes: 27 additions & 20 deletions trunk/net/sunrpc/svcsock.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@


static struct svc_sock *svc_setup_socket(struct svc_serv *, struct socket *,
int *errp, int pmap_reg);
int *errp, int flags);
static void svc_delete_socket(struct svc_sock *svsk);
static void svc_udp_data_ready(struct sock *, int);
static int svc_udp_recvfrom(struct svc_rqst *);
Expand Down Expand Up @@ -935,7 +935,8 @@ svc_tcp_accept(struct svc_sock *svsk)
*/
newsock->sk->sk_sndtimeo = HZ*30;

if (!(newsvsk = svc_setup_socket(serv, newsock, &err, 0)))
if (!(newsvsk = svc_setup_socket(serv, newsock, &err,
(SVC_SOCK_ANONYMOUS | SVC_SOCK_TEMPORARY))))
goto failed;


Expand Down Expand Up @@ -1476,12 +1477,14 @@ svc_age_temp_sockets(unsigned long closure)
* Initialize socket for RPC use and create svc_sock struct
* XXX: May want to setsockopt SO_SNDBUF and SO_RCVBUF.
*/
static struct svc_sock *
svc_setup_socket(struct svc_serv *serv, struct socket *sock,
int *errp, int pmap_register)
static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
struct socket *sock,
int *errp, int flags)
{
struct svc_sock *svsk;
struct sock *inet;
int pmap_register = !(flags & SVC_SOCK_ANONYMOUS);
int is_temporary = flags & SVC_SOCK_TEMPORARY;

dprintk("svc: svc_setup_socket %p\n", sock);
if (!(svsk = kzalloc(sizeof(*svsk), GFP_KERNEL))) {
Expand Down Expand Up @@ -1523,7 +1526,7 @@ svc_setup_socket(struct svc_serv *serv, struct socket *sock,
svc_tcp_init(svsk);

spin_lock_bh(&serv->sv_lock);
if (!pmap_register) {
if (is_temporary) {
set_bit(SK_TEMP, &svsk->sk_flags);
list_add(&svsk->sk_list, &serv->sv_tempsocks);
serv->sv_tmpcnt++;
Expand Down Expand Up @@ -1567,7 +1570,7 @@ int svc_addsock(struct svc_serv *serv,
else if (so->state > SS_UNCONNECTED)
err = -EISCONN;
else {
svsk = svc_setup_socket(serv, so, &err, 1);
svsk = svc_setup_socket(serv, so, &err, SVC_SOCK_DEFAULTS);
if (svsk)
err = 0;
}
Expand All @@ -1583,8 +1586,8 @@ EXPORT_SYMBOL_GPL(svc_addsock);
/*
* Create socket for RPC service.
*/
static int
svc_create_socket(struct svc_serv *serv, int protocol, struct sockaddr_in *sin)
static int svc_create_socket(struct svc_serv *serv, int protocol,
struct sockaddr_in *sin, int flags)
{
struct svc_sock *svsk;
struct socket *sock;
Expand Down Expand Up @@ -1620,8 +1623,8 @@ svc_create_socket(struct svc_serv *serv, int protocol, struct sockaddr_in *sin)
goto bummer;
}

if ((svsk = svc_setup_socket(serv, sock, &error, 1)) != NULL)
return 0;
if ((svsk = svc_setup_socket(serv, sock, &error, flags)) != NULL)
return ntohs(inet_sk(svsk->sk_sk)->sport);

bummer:
dprintk("svc: svc_create_socket error = %d\n", -error);
Expand Down Expand Up @@ -1681,19 +1684,23 @@ void svc_close_socket(struct svc_sock *svsk)
svc_sock_put(svsk);
}

/*
* Make a socket for nfsd and lockd
/**
* svc_makesock - Make a socket for nfsd and lockd
* @serv: RPC server structure
* @protocol: transport protocol to use
* @port: port to use
*
*/
int
svc_makesock(struct svc_serv *serv, int protocol, unsigned short port)
int svc_makesock(struct svc_serv *serv, int protocol, unsigned short port)
{
struct sockaddr_in sin;
struct sockaddr_in sin = {
.sin_family = AF_INET,
.sin_addr.s_addr = INADDR_ANY,
.sin_port = htons(port),
};

dprintk("svc: creating socket proto = %d\n", protocol);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(port);
return svc_create_socket(serv, protocol, &sin);
return svc_create_socket(serv, protocol, &sin, SVC_SOCK_DEFAULTS);
}

/*
Expand Down

0 comments on commit 99bdb0e

Please sign in to comment.