summaryrefslogtreecommitdiffstats
path: root/net/packet/diag.c
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2014-01-15 16:25:35 +0100
committerDavid S. Miller <davem@davemloft.net>2014-01-16 16:17:11 -0800
commit87a2fd286adf35a87cf6cb30fa80a0726eb74f76 (patch)
tree0510e7dda15901deb3f4432f41c48539f40baf8c /net/packet/diag.c
parent902fefb82ef72a50c78cb4a20cc954b037a98d1c (diff)
downloadlinux-0-day-87a2fd286adf35a87cf6cb30fa80a0726eb74f76.tar.gz
linux-0-day-87a2fd286adf35a87cf6cb30fa80a0726eb74f76.tar.xz
packet: don't unconditionally schedule() in case of MSG_DONTWAIT
In tpacket_snd(), when we've discovered a first frame that is not in status TP_STATUS_SEND_REQUEST, and return a NULL buffer, we exit the send routine in case of MSG_DONTWAIT, since we've finished traversing the mmaped send ring buffer and don't care about pending frames. While doing so, we still unconditionally call an expensive schedule() in the packet_current_frame() "error" path, which is unnecessary in this case since it's enough to just quit the function. Also, in case MSG_DONTWAIT is not set, we should rather test for need_resched() first and do schedule() only if necessary since meanwhile pending frames could already have finished processing and called skb destructor. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet/diag.c')
0 files changed, 0 insertions, 0 deletions