diff options
author | David S. Miller <davem@davemloft.net> | 2005-07-28 15:12:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-07-28 15:12:58 -0400 |
commit | 6192b54b845ed05cb838f86ca588cc625c703a09 (patch) | |
tree | b78a56cb70fe36f145821ac3c699abf3dc627256 /net/core/dev.c | |
parent | 2ac6608c41f8c45371ea9dddae7f99bc2c15d5cf (diff) |
[NET]: Fix busy waiting in dev_close().
If the current task has signal_pending(), the loop we have
to wait for the __LINK_STATE_RX_SCHED bit to clear becomes
a pure busy-loop.
Fixed by using msleep() instead of the hand-crafted version.
Noticed by Andrew Morton.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index ff9dc029233a..52a3bf7ae177 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -901,8 +901,7 @@ int dev_close(struct net_device *dev) | |||
901 | smp_mb__after_clear_bit(); /* Commit netif_running(). */ | 901 | smp_mb__after_clear_bit(); /* Commit netif_running(). */ |
902 | while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) { | 902 | while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) { |
903 | /* No hurry. */ | 903 | /* No hurry. */ |
904 | current->state = TASK_INTERRUPTIBLE; | 904 | msleep(1); |
905 | schedule_timeout(1); | ||
906 | } | 905 | } |
907 | 906 | ||
908 | /* | 907 | /* |