On 2017/4/12 下午2:26, NeilBrown wrote: > md allows a new array device to be created by simply > opening a device file. This make it difficult to > remove the device and udev is likely to open the device file > as part of processing the REMOVE event. > > There is an alternate mechanism for creating arrays > by writing to the new_array module parameter. > When using tools that work with this parameter, it is > best to disable the old semantics. > This new module parameter allows that. > > Signed-off-by: NeilBrown <neilb@xxxxxxxx> Acked-by: Coly Li <colyli@xxxxxxx> > --- > drivers/md/md.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index c3d3bae947a1..a7ab769eacc3 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -174,6 +174,16 @@ static const struct block_device_operations md_fops; > > static int start_readonly; > > +/* > + * The original mechanism for creating an md device is to create > + * a device node in /dev and to open it. This causes races with device-close. > + * The preferred method is to write to the "new_array" module parameter. > + * This can avoid races. > + * Setting create_on_open to false disables the original mechanism > + * so all the races disappear. > + */ > +static bool create_on_open = true; > + > /* bio_clone_mddev > * like bio_clone_bioset, but with a local bio set > */ > @@ -5286,7 +5296,8 @@ static int md_alloc(dev_t dev, char *name) > > static struct kobject *md_probe(dev_t dev, int *part, void *data) > { > - md_alloc(dev, NULL); > + if (create_on_open) > + md_alloc(dev, NULL); > return NULL; > } > > @@ -9202,6 +9213,7 @@ static int set_ro(const char *val, struct kernel_param *kp) > module_param_call(start_ro, set_ro, get_ro, NULL, S_IRUSR|S_IWUSR); > module_param(start_dirty_degraded, int, S_IRUGO|S_IWUSR); > module_param_call(new_array, add_named_array, NULL, NULL, S_IWUSR); > +module_param(create_on_open, bool, S_IRUSR|S_IWUSR); > > MODULE_LICENSE("GPL"); > MODULE_DESCRIPTION("MD RAID framework"); > > -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html