On Wed, Nov 23, 2022 at 12:09:49PM -0700, Logan Gunthorpe wrote: > All .getinfo_super() call sets the info.safe_mode_delay variables > to a constant value, so no matter what the current state is > that function will always set it to the same value. > > Create() calls .getinfo_super() multiple times while creating the array. > The value is stored in a local variable for every disk in the loop > to add disks (so the last disc call takes precedence). The local > variable is then used in the call to sysfs_set_safemode(). > > This can be simplified by using info.safe_mode_delay directly. The info > variable had .getinfo_super() called on it early in the function so, by the > reasoning above, it will have the same value as the local variable which > can thus be removed. > > Doing this allows for factoring out code from Create() in a subsequent > patch. > > Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx> > Acked-by: Kinga Tanska <kinga.tanska@xxxxxxxxxxxxxxx> Acked-by: Coly Li <colyli@xxxxxxx> Thanks. > --- > Create.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/Create.c b/Create.c > index 2e8203ecdccd..8ded81dc265d 100644 > --- a/Create.c > +++ b/Create.c > @@ -137,7 +137,6 @@ int Create(struct supertype *st, char *mddev, > int did_default = 0; > int do_default_layout = 0; > int do_default_chunk = 0; > - unsigned long safe_mode_delay = 0; > char chosen_name[1024]; > struct map_ent *map = NULL; > unsigned long long newsize; > @@ -952,7 +951,6 @@ int Create(struct supertype *st, char *mddev, > goto abort_locked; > } > st->ss->getinfo_super(st, inf, NULL); > - safe_mode_delay = inf->safe_mode_delay; > > if (have_container && c->verbose > 0) > pr_err("Using %s for device %d\n", > @@ -1065,7 +1063,7 @@ int Create(struct supertype *st, char *mddev, > "readonly"); > break; > } > - sysfs_set_safemode(&info, safe_mode_delay); > + sysfs_set_safemode(&info, info.safe_mode_delay); > if (err) { > pr_err("failed to activate array.\n"); > ioctl(mdfd, STOP_ARRAY, NULL); > -- > 2.30.2 > -- Coly Li