.. | .. |
---|
1988 | 1988 | { |
---|
1989 | 1989 | struct sock *sk = sock->sk; |
---|
1990 | 1990 | struct smc_sock *smc; |
---|
1991 | | - int rc = -EPIPE; |
---|
| 1991 | + int rc; |
---|
1992 | 1992 | |
---|
1993 | 1993 | smc = smc_sk(sk); |
---|
1994 | 1994 | lock_sock(sk); |
---|
1995 | | - if ((sk->sk_state != SMC_ACTIVE) && |
---|
1996 | | - (sk->sk_state != SMC_APPCLOSEWAIT1) && |
---|
1997 | | - (sk->sk_state != SMC_INIT)) |
---|
1998 | | - goto out; |
---|
1999 | 1995 | |
---|
| 1996 | + /* SMC does not support connect with fastopen */ |
---|
2000 | 1997 | if (msg->msg_flags & MSG_FASTOPEN) { |
---|
| 1998 | + /* not connected yet, fallback */ |
---|
2001 | 1999 | if (sk->sk_state == SMC_INIT && !smc->connect_nonblock) { |
---|
2002 | 2000 | smc_switch_to_fallback(smc); |
---|
2003 | 2001 | smc->fallback_rsn = SMC_CLC_DECL_OPTUNSUPP; |
---|
.. | .. |
---|
2005 | 2003 | rc = -EINVAL; |
---|
2006 | 2004 | goto out; |
---|
2007 | 2005 | } |
---|
| 2006 | + } else if ((sk->sk_state != SMC_ACTIVE) && |
---|
| 2007 | + (sk->sk_state != SMC_APPCLOSEWAIT1) && |
---|
| 2008 | + (sk->sk_state != SMC_INIT)) { |
---|
| 2009 | + rc = -EPIPE; |
---|
| 2010 | + goto out; |
---|
2008 | 2011 | } |
---|
2009 | 2012 | |
---|
2010 | 2013 | if (smc->use_fallback) |
---|