From: Mike Snitzer Date: Tue, 18 Oct 2016 18:02:04 +0000 (-0400) Subject: dm rq: clear kworker_task if kthread_run() returned an error X-Git-Tag: v4.8.7~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=056290446e8a36183b223f20269d1eecc71c425e;p=thirdparty%2Fkernel%2Fstable.git dm rq: clear kworker_task if kthread_run() returned an error commit 937fa62e8a00d0b4bc2c0a40567d7c88ab2b2e8d upstream. cleanup_mapped_device() calls kthread_stop() if kworker_task is non-NULL. Currently the assigned value could be a valid task struct or an error code (e.g -ENOMEM). Reset md->kworker_task to NULL if kthread_run() returned an erorr. Fixes: 7193a9defc ("dm rq: check kthread_run return for .request_fn request-based DM") Reported-by: Tahsin Erdogan Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c index 5da86c8b6545a..2154596eedf33 100644 --- a/drivers/md/dm-rq.c +++ b/drivers/md/dm-rq.c @@ -835,8 +835,11 @@ int dm_old_init_request_queue(struct mapped_device *md) init_kthread_worker(&md->kworker); md->kworker_task = kthread_run(kthread_worker_fn, &md->kworker, "kdmwork-%s", dm_device_name(md)); - if (IS_ERR(md->kworker_task)) - return PTR_ERR(md->kworker_task); + if (IS_ERR(md->kworker_task)) { + int error = PTR_ERR(md->kworker_task); + md->kworker_task = NULL; + return error; + } elv_register_queue(md->queue);