Commit 6bd0eb6d authored by Corey Minyard's avatar Corey Minyard
Browse files

ipmi:ssif: Fix a shutdown race



It was possible for the SSIF thread to stop and quit before the
kthread_stop() call because ssif->stopping was set before the
stop.  So only exit the SSIF thread is kthread_should_stop()
returns true.

There is no need to wake the thread, as the wait will be interrupted
by kthread_stop().

Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
parent 87105e07
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -481,8 +481,6 @@ static int ipmi_ssif_thread(void *data)
		/* Wait for something to do */
		result = wait_for_completion_interruptible(
						&ssif_info->wake_thread);
		if (ssif_info->stopping)
			break;
		if (result == -ERESTARTSYS)
			continue;
		init_completion(&ssif_info->wake_thread);
@@ -1270,11 +1268,9 @@ static void shutdown_ssif(void *send_info)
	ssif_info->stopping = true;
	timer_delete_sync(&ssif_info->watch_timer);
	timer_delete_sync(&ssif_info->retry_timer);
	if (ssif_info->thread) {
		complete(&ssif_info->wake_thread);
	if (ssif_info->thread)
		kthread_stop(ssif_info->thread);
}
}

static void ssif_remove(struct i2c_client *client)
{