diff options
| author | Benjamin Poirier <bpoirier@suse.de> | 2012-03-08 05:55:58 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-03-08 13:52:08 -0800 | 
| commit | 0343c5543b1d3ffa08e6716d82afb62648b80eba (patch) | |
| tree | 125feb540692bed744e916ff3f12bd14bffdb865 /net/sctp/socket.c | |
| parent | b8622cbd58f345d48f683d881abe3037c60aa673 (diff) | |
sctp: Export sctp_do_peeloff
lookup sctp_association within sctp_do_peeloff() to enable its use outside of
the sctp code with minimal knowledge of the former.
Signed-off-by: Benjamin Poirier <bpoirier@suse.de>
Acked-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/socket.c')
| -rw-r--r-- | net/sctp/socket.c | 24 | 
1 files changed, 9 insertions, 15 deletions
| diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 408ebd0e7330..06b42b7f5a02 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4170,14 +4170,16 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv  }  /* Helper routine to branch off an association to a new socket.  */ -SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc, -				struct socket **sockp) +int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp)  { -	struct sock *sk = asoc->base.sk; +	struct sctp_association *asoc = sctp_id2assoc(sk, id);  	struct socket *sock;  	struct sctp_af *af;  	int err = 0; +	if (!asoc) +		return -EINVAL; +  	/* An association cannot be branched off from an already peeled-off  	 * socket, nor is this supported for tcp style sockets.  	 */ @@ -4206,13 +4208,13 @@ SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc,  	return err;  } +EXPORT_SYMBOL(sctp_do_peeloff);  static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen)  {  	sctp_peeloff_arg_t peeloff;  	struct socket *newsock;  	int retval = 0; -	struct sctp_association *asoc;  	if (len < sizeof(sctp_peeloff_arg_t))  		return -EINVAL; @@ -4220,15 +4222,7 @@ static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval  	if (copy_from_user(&peeloff, optval, len))  		return -EFAULT; -	asoc = sctp_id2assoc(sk, peeloff.associd); -	if (!asoc) { -		retval = -EINVAL; -		goto out; -	} - -	SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p\n", __func__, sk, asoc); - -	retval = sctp_do_peeloff(asoc, &newsock); +	retval = sctp_do_peeloff(sk, peeloff.associd, &newsock);  	if (retval < 0)  		goto out; @@ -4239,8 +4233,8 @@ static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval  		goto out;  	} -	SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p newsk: %p sd: %d\n", -			  __func__, sk, asoc, newsock->sk, retval); +	SCTP_DEBUG_PRINTK("%s: sk: %p newsk: %p sd: %d\n", +			  __func__, sk, newsock->sk, retval);  	/* Return the fd mapped to the new socket.  */  	peeloff.sd = retval; | 
