mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull two networking fixes from David S. Miller: 1) Thanks to Willy Tarreau and Eric Dumazet, we've unlocked a bug that's been present in do_tcp_sendpages() since that function was written in 2002. When we block to wait for memory we have to unconditionally try and push out pending TCP data, otherwise we can block for an unreasonably long amount of time. 2) Fix deadlock in e1000, fixes kernel bugzilla 43132 From Tushar Dave. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: e1000: Prevent reset task killing itself. tcp: do_tcp_sendpages() must try to push data out on oom conditions
This commit is contained in:
commit
39c2028531
@ -493,7 +493,11 @@ out:
|
|||||||
static void e1000_down_and_stop(struct e1000_adapter *adapter)
|
static void e1000_down_and_stop(struct e1000_adapter *adapter)
|
||||||
{
|
{
|
||||||
set_bit(__E1000_DOWN, &adapter->flags);
|
set_bit(__E1000_DOWN, &adapter->flags);
|
||||||
cancel_work_sync(&adapter->reset_task);
|
|
||||||
|
/* Only kill reset task if adapter is not resetting */
|
||||||
|
if (!test_bit(__E1000_RESETTING, &adapter->flags))
|
||||||
|
cancel_work_sync(&adapter->reset_task);
|
||||||
|
|
||||||
cancel_delayed_work_sync(&adapter->watchdog_task);
|
cancel_delayed_work_sync(&adapter->watchdog_task);
|
||||||
cancel_delayed_work_sync(&adapter->phy_info_task);
|
cancel_delayed_work_sync(&adapter->phy_info_task);
|
||||||
cancel_delayed_work_sync(&adapter->fifo_stall_task);
|
cancel_delayed_work_sync(&adapter->fifo_stall_task);
|
||||||
|
@ -851,8 +851,7 @@ new_segment:
|
|||||||
wait_for_sndbuf:
|
wait_for_sndbuf:
|
||||||
set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
|
set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
|
||||||
wait_for_memory:
|
wait_for_memory:
|
||||||
if (copied)
|
tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
|
||||||
tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
|
|
||||||
|
|
||||||
if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)
|
if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)
|
||||||
goto do_error;
|
goto do_error;
|
||||||
|
Loading…
Reference in New Issue
Block a user