projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch develop-3.10-next
[firefly-linux-kernel-4.4.55.git]
/
net
/
ipx
/
af_ipx.c
diff --git
a/net/ipx/af_ipx.c
b/net/ipx/af_ipx.c
index e0897377b3b44bd0d7d3ebedaea9f669c6fcc2cb..2665bf4b8d052e08ccd618a0d1a249c44b13ba25 100644
(file)
--- a/
net/ipx/af_ipx.c
+++ b/
net/ipx/af_ipx.c
@@
-1778,6
+1778,7
@@
static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
struct ipxhdr *ipx = NULL;
struct sk_buff *skb;
int copied, rc;
struct ipxhdr *ipx = NULL;
struct sk_buff *skb;
int copied, rc;
+ bool locked = true;
lock_sock(sk);
/* put the autobinding in */
lock_sock(sk);
/* put the autobinding in */
@@
-1804,6
+1805,8
@@
static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
if (sock_flag(sk, SOCK_ZAPPED))
goto out;
if (sock_flag(sk, SOCK_ZAPPED))
goto out;
+ release_sock(sk);
+ locked = false;
skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
flags & MSG_DONTWAIT, &rc);
if (!skb)
skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
flags & MSG_DONTWAIT, &rc);
if (!skb)
@@
-1837,7
+1840,8
@@
static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
out_free:
skb_free_datagram(sk, skb);
out:
out_free:
skb_free_datagram(sk, skb);
out:
- release_sock(sk);
+ if (locked)
+ release_sock(sk);
return rc;
}
return rc;
}