Re: module: Ensure a module's state is set accordingly during module coming cleanup code

From: Jessica Yu
Date: Wed Nov 09 2016 - 05:12:11 EST


+++ Rusty Russell [26/10/16 11:24 +1030]:
Aaron Tomlin <atomlin@xxxxxxxxxx> writes:
In load_module() in the event of an error, for e.g. unknown module
parameter(s) specified we go to perform some module coming clean up
operations. At this point the module is still in a "formed" state
when it is actually going away.

This patch updates the module's state accordingly to ensure anyone on the
module_notify_list waiting for a module going away notification will be
notified accordingly.

I recall a similar proposal before.

I've audited all the subscribers to check they didn't look at
mod->state; they seem OK.

We actually do this in the init-failed path, so this should be OK.

We did discuss a similar proposal before:

https://lkml.kernel.org/r/87a8m7ko6j.fsf@xxxxxxxxxxxxxxx

The complaint back then was that we need to be in the COMING state for
strong_try_module_get() to fail. But it will also correctly fail for GOING
modules in the module_is_live() check in the subsequent call to
try_module_get(), so I believe we are still OK here.

Jessica