Re: [PATCH 6/7] multipathd: Add auto_resize config option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 08, 2023 at 06:07:35PM +0000, Martin Wilck wrote:
> On Thu, 2023-11-02 at 18:15 -0400, Benjamin Marzinski wrote:
> > This option gives multipathd the ability to automatically resize a
> > device when it detects that all of the path devices have changed. By
> > default it is set to never, and multipathd will continue to work like
> > it
> > always has, where a users must manually resize a multipath device.
> > 
> > Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
> > ---
> >  libmultipath/config.c         |  2 ++
> >  libmultipath/config.h         |  3 +++
> >  libmultipath/configure.c      |  1 +
> >  libmultipath/defaults.h       |  1 +
> >  libmultipath/dict.c           | 48
> > +++++++++++++++++++++++++++++++++++
> >  libmultipath/dict.h           |  1 +
> >  libmultipath/hwtable.c        |  1 +
> >  libmultipath/propsel.c        | 17 +++++++++++++
> >  libmultipath/propsel.h        |  1 +
> >  libmultipath/structs.h        |  8 ++++++
> >  multipath/multipath.conf.5.in | 16 ++++++++++++
> >  multipathd/main.c             | 24 +++++++++++++++++-
> >  12 files changed, 122 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libmultipath/config.c b/libmultipath/config.c
> > index 9d90f512..e6024955 100644
> > --- a/libmultipath/config.c
> > +++ b/libmultipath/config.c
> > @@ -464,6 +464,7 @@ merge_hwe (struct hwentry * dst, struct hwentry *
> > src)
> >  	merge_num(ghost_delay);
> >  	merge_num(all_tg_pt);
> >  	merge_num(recheck_wwid);
> > +	merge_num(auto_resize);
> 
> Why make this a hardware-specific option? Isn't it sufficient to just
> set this in the defaults section? I can hardly imagine users wanting
> auto-resize for one array and not for another.
> 
> Other than that, looks good to me (one nit below).

Sure. I'll fix all these up.

-Ben
 
> Martin
> 
> 
> > diff --git a/multipath/multipath.conf.5.in
> > b/multipath/multipath.conf.5.in
> > index 41f3927e..c90383cf 100644
> > --- a/multipath/multipath.conf.5.in
> > +++ b/multipath/multipath.conf.5.in
> > @@ -1333,6 +1333,22 @@ The default is: \fBno\fR
> >  .
> >  .
> >  .TP
> > +.B auto_resize
> > +Controls when multipathd will automatically resize a multipath
> > device.  If set
> > +to \fInever\fR, multipath devices must always be manually resized by
> > either
> > +running \fBmultipathd resize map <name>\fR or \fRmultipath -r
> > <name>\fR.  If
> 
> I suggest not mentioning "multipath -r" here.
> 
> > +set to \fIgrow_only\fR, when multipathd detects that all of a
> > multipath
> > +device's paths have increased in size, it will automatically grow
> > the multipath
> > +device to the new size. If set to \fIgrow_shrink\fR, multipathd will
> > also
> > +automatically shrink the device once it detects all of its paths
> > have decreased
> > +in size.
> > +.RS
> > +.TP
> > +The default is: \fBnever\fR
> > +.RE
> > +.
> > +.
> > +.TP
> >  .B enable_foreign
> >  Enables or disables foreign libraries (see section
> >  .I FOREIGN MULTIPATH SUPPORT
> > diff --git a/multipathd/main.c b/multipathd/main.c
> > index 3b4c5b09..ac733491 100644
> > --- a/multipathd/main.c
> > +++ b/multipathd/main.c
> > @@ -1633,7 +1633,6 @@ uev_update_path (struct uevent *uev, struct
> > vectors * vecs)
> >  		ro = uevent_get_disk_ro(uev);
> >  		if (needs_ro_update(mpp, ro)) {
> >  			condlog(2, "%s: update path write_protect to
> > '%d' (uevent)", uev->kernel, ro);
> > -
> >  			if (mpp->wait_for_udev)
> >  				mpp->wait_for_udev = 2;
> >  			else {
> > @@ -1648,6 +1647,29 @@ uev_update_path (struct uevent *uev, struct
> > vectors * vecs)
> >  				}
> >  			}
> >  		}
> > +		if (mpp->auto_resize != AUTO_RESIZE_NEVER &&
> > +		    !mpp->wait_for_udev) {
> > +			struct pathgroup *pgp;
> > +			struct path *pp2;
> > +			unsigned int i, j;
> > +			unsigned long long orig_size = mpp->size;
> > +
> > +			if (!pp->size || pp->size == mpp->size ||
> > +                            (pp->size < mpp->size &&
> 
> There's a whitespace issue here (space indentation).
> 
> > +			     mpp->auto_resize ==
> > AUTO_RESIZE_GROW_ONLY))
> > +				goto out;
> > +
> > +			vector_foreach_slot(mpp->pg, pgp, i)
> > +				vector_foreach_slot (pgp->paths,
> > pp2, j)
> > +					if (pp2->size && pp2->size
> > != pp->size)
> > +						goto out;
> > +			retval = resize_map(mpp, pp->size, vecs);
> > +			if (retval == 2)
> > +				condlog(2, "%s: map removed during
> > resize", pp->dev);
> > +			else if (retval == 0)
> > +				condlog(2, "%s: resized map from
> > %llu to %llu",
> > +					mpp->alias, orig_size, pp-
> > >size);
> > +		}
> >  	}
> >  out:
> >  	lock_cleanup_pop(vecs->lock);





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux