SUNRPC: parametrize rpc_uaddr2sockaddr() by network context
Parametrize rpc_uaddr2sockaddr() by network context and thus force it's callers to pass in network context instead of using hard-coded "init_net". Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
90100b1766
commit
f2ac4dc911
@@ -1308,7 +1308,7 @@ gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_r
|
|||||||
else
|
else
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
conn->cb_addrlen = rpc_uaddr2sockaddr(se->se_callback_addr_val,
|
conn->cb_addrlen = rpc_uaddr2sockaddr(&init_net, se->se_callback_addr_val,
|
||||||
se->se_callback_addr_len,
|
se->se_callback_addr_len,
|
||||||
(struct sockaddr *)&conn->cb_addr,
|
(struct sockaddr *)&conn->cb_addr,
|
||||||
sizeof(conn->cb_addr));
|
sizeof(conn->cb_addr));
|
||||||
|
@@ -166,7 +166,7 @@ size_t rpc_ntop(const struct sockaddr *, char *, const size_t);
|
|||||||
size_t rpc_pton(struct net *, const char *, const size_t,
|
size_t rpc_pton(struct net *, const char *, const size_t,
|
||||||
struct sockaddr *, const size_t);
|
struct sockaddr *, const size_t);
|
||||||
char * rpc_sockaddr2uaddr(const struct sockaddr *, gfp_t);
|
char * rpc_sockaddr2uaddr(const struct sockaddr *, gfp_t);
|
||||||
size_t rpc_uaddr2sockaddr(const char *, const size_t,
|
size_t rpc_uaddr2sockaddr(struct net *, const char *, const size_t,
|
||||||
struct sockaddr *, const size_t);
|
struct sockaddr *, const size_t);
|
||||||
|
|
||||||
static inline unsigned short rpc_get_port(const struct sockaddr *sap)
|
static inline unsigned short rpc_get_port(const struct sockaddr *sap)
|
||||||
|
@@ -297,6 +297,7 @@ char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* rpc_uaddr2sockaddr - convert a universal address to a socket address.
|
* rpc_uaddr2sockaddr - convert a universal address to a socket address.
|
||||||
|
* @net: applicable network namespace
|
||||||
* @uaddr: C string containing universal address to convert
|
* @uaddr: C string containing universal address to convert
|
||||||
* @uaddr_len: length of universal address string
|
* @uaddr_len: length of universal address string
|
||||||
* @sap: buffer into which to plant socket address
|
* @sap: buffer into which to plant socket address
|
||||||
@@ -308,8 +309,9 @@ char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags)
|
|||||||
* Returns the size of the socket address if successful; otherwise
|
* Returns the size of the socket address if successful; otherwise
|
||||||
* zero is returned.
|
* zero is returned.
|
||||||
*/
|
*/
|
||||||
size_t rpc_uaddr2sockaddr(const char *uaddr, const size_t uaddr_len,
|
size_t rpc_uaddr2sockaddr(struct net *net, const char *uaddr,
|
||||||
struct sockaddr *sap, const size_t salen)
|
const size_t uaddr_len, struct sockaddr *sap,
|
||||||
|
const size_t salen)
|
||||||
{
|
{
|
||||||
char *c, buf[RPCBIND_MAXUADDRLEN + sizeof('\0')];
|
char *c, buf[RPCBIND_MAXUADDRLEN + sizeof('\0')];
|
||||||
unsigned long portlo, porthi;
|
unsigned long portlo, porthi;
|
||||||
@@ -341,7 +343,7 @@ size_t rpc_uaddr2sockaddr(const char *uaddr, const size_t uaddr_len,
|
|||||||
port = (unsigned short)((porthi << 8) | portlo);
|
port = (unsigned short)((porthi << 8) | portlo);
|
||||||
|
|
||||||
*c = '\0';
|
*c = '\0';
|
||||||
if (rpc_pton(&init_net, buf, strlen(buf), sap, salen) == 0)
|
if (rpc_pton(net, buf, strlen(buf), sap, salen) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (sap->sa_family) {
|
switch (sap->sa_family) {
|
||||||
|
@@ -934,7 +934,7 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|||||||
dprintk("RPC: %5u RPCB_%s reply: %s\n", task->tk_pid,
|
dprintk("RPC: %5u RPCB_%s reply: %s\n", task->tk_pid,
|
||||||
task->tk_msg.rpc_proc->p_name, (char *)p);
|
task->tk_msg.rpc_proc->p_name, (char *)p);
|
||||||
|
|
||||||
if (rpc_uaddr2sockaddr((char *)p, len, sap, sizeof(address)) == 0)
|
if (rpc_uaddr2sockaddr(&init_net, (char *)p, len, sap, sizeof(address)) == 0)
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
rpcb->r_port = rpc_get_port(sap);
|
rpcb->r_port = rpc_get_port(sap);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user