summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2016-08-25 18:42:35 +0200
committerTrond Myklebust <trond.myklebust@primarydata.com>2016-09-03 10:00:49 -0400
commita41bd25ae67d3e4052c7f00ee9f2b4ba9219309e (patch)
treeb2778087d05d75f9f08f9ea1edd103e1b1864d33 /net/sunrpc/xprtsock.c
parent98b0f80c2396224bbbed81792b526e6c72ba9efa (diff)
downloadlinux-a41bd25ae67d3e4052c7f00ee9f2b4ba9219309e.tar.gz
linux-a41bd25ae67d3e4052c7f00ee9f2b4ba9219309e.tar.bz2
linux-a41bd25ae67d3e4052c7f00ee9f2b4ba9219309e.zip
sunrpc: fix UDP memory accounting
The commit f9b2ee714c5c ("SUNRPC: Move UDP receive data path into a workqueue context"), as a side effect, moved the skb_free_datagram() call outside the scope of the related socket lock, but UDP sockets require such lock to be held for proper memory accounting. Fix it by replacing skb_free_datagram() with skb_free_datagram_locked(). Fixes: f9b2ee714c5c ("SUNRPC: Move UDP receive data path into a workqueue context") Reported-and-tested-by: Jan Stancek <jstancek@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Cc: stable@vger.kernel.org # 4.4+ Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 8ede3bc52481..bf168838a029 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1074,7 +1074,7 @@ static void xs_udp_data_receive(struct sock_xprt *transport)
skb = skb_recv_datagram(sk, 0, 1, &err);
if (skb != NULL) {
xs_udp_data_read_skb(&transport->xprt, sk, skb);
- skb_free_datagram(sk, skb);
+ skb_free_datagram_locked(sk, skb);
continue;
}
if (!test_and_clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))