mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 05:06:44 +07:00
drbd: fix regression 'out of mem, failed to invoke fence-peer helper'
Since linux kernel 3.13, kthread_run() internally uses wait_for_completion_killable(). We sometimes may use kthread_run() while we still have a signal pending, which we used to kick our threads out of potentially blocking network functions, causing kthread_run() to mistake that as a new fatal signal and fail. Fix: flush_signals() before kthread_run(). Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
d45b3279a5
commit
bbc1c5e8ad
@ -544,6 +544,12 @@ void conn_try_outdate_peer_async(struct drbd_connection *connection)
|
||||
struct task_struct *opa;
|
||||
|
||||
kref_get(&connection->kref);
|
||||
/* We may just have force_sig()'ed this thread
|
||||
* to get it out of some blocking network function.
|
||||
* Clear signals; otherwise kthread_run(), which internally uses
|
||||
* wait_on_completion_killable(), will mistake our pending signal
|
||||
* for a new fatal signal and fail. */
|
||||
flush_signals(current);
|
||||
opa = kthread_run(_try_outdate_peer_async, connection, "drbd_async_h");
|
||||
if (IS_ERR(opa)) {
|
||||
drbd_err(connection, "out of mem, failed to invoke fence-peer helper\n");
|
||||
|
Loading…
Reference in New Issue
Block a user