diff options
| -rw-r--r-- | net/smc/af_smc.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 0ee7721afbe5..e7de5f282722 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c | |||
| @@ -1522,12 +1522,16 @@ static int smc_ioctl(struct socket *sock, unsigned int cmd, | |||
| 1522 | 1522 | ||
| 1523 | smc = smc_sk(sock->sk); | 1523 | smc = smc_sk(sock->sk); |
| 1524 | conn = &smc->conn; | 1524 | conn = &smc->conn; |
| 1525 | lock_sock(&smc->sk); | ||
| 1525 | if (smc->use_fallback) { | 1526 | if (smc->use_fallback) { |
| 1526 | if (!smc->clcsock) | 1527 | if (!smc->clcsock) { |
| 1528 | release_sock(&smc->sk); | ||
| 1527 | return -EBADF; | 1529 | return -EBADF; |
| 1528 | return smc->clcsock->ops->ioctl(smc->clcsock, cmd, arg); | 1530 | } |
| 1531 | answ = smc->clcsock->ops->ioctl(smc->clcsock, cmd, arg); | ||
| 1532 | release_sock(&smc->sk); | ||
| 1533 | return answ; | ||
| 1529 | } | 1534 | } |
| 1530 | lock_sock(&smc->sk); | ||
| 1531 | switch (cmd) { | 1535 | switch (cmd) { |
| 1532 | case SIOCINQ: /* same as FIONREAD */ | 1536 | case SIOCINQ: /* same as FIONREAD */ |
| 1533 | if (smc->sk.sk_state == SMC_LISTEN) { | 1537 | if (smc->sk.sk_state == SMC_LISTEN) { |
