diff options
-rw-r--r-- | drivers/block/drbd/drbd_nl.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 1b35c45c92b7..3f2e16738080 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c | |||
@@ -544,6 +544,12 @@ void conn_try_outdate_peer_async(struct drbd_connection *connection) | |||
544 | struct task_struct *opa; | 544 | struct task_struct *opa; |
545 | 545 | ||
546 | kref_get(&connection->kref); | 546 | kref_get(&connection->kref); |
547 | /* We may just have force_sig()'ed this thread | ||
548 | * to get it out of some blocking network function. | ||
549 | * Clear signals; otherwise kthread_run(), which internally uses | ||
550 | * wait_on_completion_killable(), will mistake our pending signal | ||
551 | * for a new fatal signal and fail. */ | ||
552 | flush_signals(current); | ||
547 | opa = kthread_run(_try_outdate_peer_async, connection, "drbd_async_h"); | 553 | opa = kthread_run(_try_outdate_peer_async, connection, "drbd_async_h"); |
548 | if (IS_ERR(opa)) { | 554 | if (IS_ERR(opa)) { |
549 | drbd_err(connection, "out of mem, failed to invoke fence-peer helper\n"); | 555 | drbd_err(connection, "out of mem, failed to invoke fence-peer helper\n"); |