diff mbox series

[RFC] multipath-tools: add Generic SCSI in hwtable

Message ID 20250317173352.14387-1-xose.vazquez@gmail.com (mailing list archive)
State New
Headers show
Series [RFC] multipath-tools: add Generic SCSI in hwtable | expand

Commit Message

Xose Vazquez Perez March 17, 2025, 5:33 p.m. UTC
Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM-DEVEL ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
---
 libmultipath/hwtable.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Benjamin Marzinski March 17, 2025, 8 p.m. UTC | #1
On Mon, Mar 17, 2025 at 06:33:51PM +0100, Xose Vazquez Perez wrote:
> Cc: Martin Wilck <mwilck@suse.com>
> Cc: Benjamin Marzinski <bmarzins@redhat.com>
> Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
> Cc: DM-DEVEL ML <dm-devel@lists.linux.dev>
> Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
> ---
>  libmultipath/hwtable.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
> index f8cf3fa9..34b1fd2f 100644
> --- a/libmultipath/hwtable.c
> +++ b/libmultipath/hwtable.c
> @@ -79,6 +79,17 @@
>  #endif
>  

If we wanted to make these changes, we could just change
DEFAULT_PGPOLICY, DEFAULT_FAILBACK, and DEFAULT_NO_PATH_RETRY. But I
still think that for completely unknown devices, we should stick with
our current defaults. They're safe and I haven't heard any complaints
about them.

-Ben

>  static struct hwentry default_hw[] = {
> +	/*
> +	 * Generic SCSI devices
> +	 */
> +	{
> +		/* Generic SCSI */
> +		.vendor        = ".*",
> +		.product       = ".*",
> +		.pgpolicy      = GROUP_BY_PRIO,
> +		.pgfailback    = -FAILBACK_IMMEDIATE,
> +		.no_path_retry = 30,
> +	},
>  	/*
>  	 * Generic NVMe devices
>  	 *
> -- 
> 2.48.1
Martin Wilck March 18, 2025, 11:08 a.m. UTC | #2
On Mon, 2025-03-17 at 16:00 -0400, Benjamin Marzinski wrote:
> On Mon, Mar 17, 2025 at 06:33:51PM +0100, Xose Vazquez Perez wrote:
> > Cc: Martin Wilck <mwilck@suse.com>
> > Cc: Benjamin Marzinski <bmarzins@redhat.com>
> > Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
> > Cc: DM-DEVEL ML <dm-devel@lists.linux.dev>
> > Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
> > ---
> >  libmultipath/hwtable.c | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
> > index f8cf3fa9..34b1fd2f 100644
> > --- a/libmultipath/hwtable.c
> > +++ b/libmultipath/hwtable.c
> > @@ -79,6 +79,17 @@
> >  #endif
> >  
> 
> If we wanted to make these changes, we could just change
> DEFAULT_PGPOLICY, DEFAULT_FAILBACK, and DEFAULT_NO_PATH_RETRY. But I
> still think that for completely unknown devices, we should stick with
> our current defaults. They're safe and I haven't heard any complaints
> about them.

I agree. The point of the hwtable is to change the defaults for
specific devices. Using "vendor = .*" and "product = ".*" is against
the spirit of the hwtable. 

Unless I am mistaken, this  change would override user settings in the
"defaults" section of multipath.conf. This happens a lot already for
those systems that do have a specific hwtable entry, and I am sure that
that comes as a surprise for users (it has confused myself a
significant couple of times). By adding these catch-all entries, we'd
make the "defaults" section ineffective for any setting that's
available in the "devices" section, too.

Thinking about it, that might actually be a good thing, as it would
eliminate the uncertainty whether or not a given "defaults" setting
would take effect for a given storage device. Maybe we should
officially stop supporting settings in "defaults" that can be
overridden by device-spefic settings, just to reduce confusion in this
area, and recommend using a catch-all device setting (in
multipath.conf, not in the built-in hwtable) instead.

Anyway, that would be a possible cause for major breakage, as user
settings in the field would suddenly stop being effective. We can't
possibly just let it slip in with a minor hwtable patch like this.

Regards
Martin

> -Ben
> 
> >  static struct hwentry default_hw[] = {
> > +	/*
> > +	 * Generic SCSI devices
> > +	 */
> > +	{
> > +		/* Generic SCSI */
> > +		.vendor        = ".*",
> > +		.product       = ".*",
> > +		.pgpolicy      = GROUP_BY_PRIO,
> > +		.pgfailback    = -FAILBACK_IMMEDIATE,
> > +		.no_path_retry = 30,
> > +	},
> >  	/*
> >  	 * Generic NVMe devices
> >  	 *
> > -- 
> > 2.48.1
>
Benjamin Marzinski March 18, 2025, 11:32 p.m. UTC | #3
On Tue, Mar 18, 2025 at 12:08:32PM +0100, Martin Wilck wrote:
> On Mon, 2025-03-17 at 16:00 -0400, Benjamin Marzinski wrote:
> > On Mon, Mar 17, 2025 at 06:33:51PM +0100, Xose Vazquez Perez wrote:
> > > Cc: Martin Wilck <mwilck@suse.com>
> > > Cc: Benjamin Marzinski <bmarzins@redhat.com>
> > > Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
> > > Cc: DM-DEVEL ML <dm-devel@lists.linux.dev>
> > > Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
> > > ---
> > >  libmultipath/hwtable.c | 11 +++++++++++
> > >  1 file changed, 11 insertions(+)
> > > 
> > > diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
> > > index f8cf3fa9..34b1fd2f 100644
> > > --- a/libmultipath/hwtable.c
> > > +++ b/libmultipath/hwtable.c
> > > @@ -79,6 +79,17 @@
> > >  #endif
> > >  
> > 
> > If we wanted to make these changes, we could just change
> > DEFAULT_PGPOLICY, DEFAULT_FAILBACK, and DEFAULT_NO_PATH_RETRY. But I
> > still think that for completely unknown devices, we should stick with
> > our current defaults. They're safe and I haven't heard any complaints
> > about them.
> 
> I agree. The point of the hwtable is to change the defaults for
> specific devices. Using "vendor = .*" and "product = ".*" is against
> the spirit of the hwtable. 
> 
> Unless I am mistaken, this  change would override user settings in the
> "defaults" section of multipath.conf. This happens a lot already for
> those systems that do have a specific hwtable entry, and I am sure that
> that comes as a surprise for users (it has confused myself a
> significant couple of times). By adding these catch-all entries, we'd
> make the "defaults" section ineffective for any setting that's
> available in the "devices" section, too.
> 
> Thinking about it, that might actually be a good thing, as it would
> eliminate the uncertainty whether or not a given "defaults" setting
> would take effect for a given storage device. Maybe we should
> officially stop supporting settings in "defaults" that can be
> overridden by device-spefic settings, just to reduce confusion in this
> area, and recommend using a catch-all device setting (in
> multipath.conf, not in the built-in hwtable) instead.

The device configs from /etc/multipath.conf will override values in the
built-in hwtable. So a catch-all device config in /etc/multipath.conf is
the same as putting options in the overrides section, not the defaults
section.

Now that we changed how hwentry configs work, we could probably
deprecate the overrides section, but I don't think we can replace the
defaults section.

right?

-Ben
 
> Anyway, that would be a possible cause for major breakage, as user
> settings in the field would suddenly stop being effective. We can't
> possibly just let it slip in with a minor hwtable patch like this.
> 
> Regards
> Martin
> 
> > -Ben
> > 
> > >  static struct hwentry default_hw[] = {
> > > +	/*
> > > +	 * Generic SCSI devices
> > > +	 */
> > > +	{
> > > +		/* Generic SCSI */
> > > +		.vendor        = ".*",
> > > +		.product       = ".*",
> > > +		.pgpolicy      = GROUP_BY_PRIO,
> > > +		.pgfailback    = -FAILBACK_IMMEDIATE,
> > > +		.no_path_retry = 30,
> > > +	},
> > >  	/*
> > >  	 * Generic NVMe devices
> > >  	 *
> > > -- 
> > > 2.48.1
> >
Martin Wilck March 19, 2025, 10:06 a.m. UTC | #4
On Tue, 2025-03-18 at 19:32 -0400, Benjamin Marzinski wrote:
> On Tue, Mar 18, 2025 at 12:08:32PM +0100, Martin Wilck wrote:
> > On Mon, 2025-03-17 at 16:00 -0400, Benjamin Marzinski wrote:
> > > On Mon, Mar 17, 2025 at 06:33:51PM +0100, Xose Vazquez Perez
> > > wrote:
> > > > Cc: Martin Wilck <mwilck@suse.com>
> > > > Cc: Benjamin Marzinski <bmarzins@redhat.com>
> > > > Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
> > > > Cc: DM-DEVEL ML <dm-devel@lists.linux.dev>
> > > > Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
> > > > ---
> > > >  libmultipath/hwtable.c | 11 +++++++++++
> > > >  1 file changed, 11 insertions(+)
> > > > 
> > > > diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
> > > > index f8cf3fa9..34b1fd2f 100644
> > > > --- a/libmultipath/hwtable.c
> > > > +++ b/libmultipath/hwtable.c
> > > > @@ -79,6 +79,17 @@
> > > >  #endif
> > > >  
> > > 
> > > If we wanted to make these changes, we could just change
> > > DEFAULT_PGPOLICY, DEFAULT_FAILBACK, and DEFAULT_NO_PATH_RETRY.
> > > But I
> > > still think that for completely unknown devices, we should stick
> > > with
> > > our current defaults. They're safe and I haven't heard any
> > > complaints
> > > about them.
> > 
> > I agree. The point of the hwtable is to change the defaults for
> > specific devices. Using "vendor = .*" and "product = ".*" is
> > against
> > the spirit of the hwtable. 
> > 
> > Unless I am mistaken, this  change would override user settings in
> > the
> > "defaults" section of multipath.conf. This happens a lot already
> > for
> > those systems that do have a specific hwtable entry, and I am sure
> > that
> > that comes as a surprise for users (it has confused myself a
> > significant couple of times). By adding these catch-all entries,
> > we'd
> > make the "defaults" section ineffective for any setting that's
> > available in the "devices" section, too.
> > 
> > Thinking about it, that might actually be a good thing, as it would
> > eliminate the uncertainty whether or not a given "defaults" setting
> > would take effect for a given storage device. Maybe we should
> > officially stop supporting settings in "defaults" that can be
> > overridden by device-spefic settings, just to reduce confusion in
> > this
> > area, and recommend using a catch-all device setting (in
> > multipath.conf, not in the built-in hwtable) instead.
> 
> The device configs from /etc/multipath.conf will override values in
> the
> built-in hwtable. So a catch-all device config in /etc/multipath.conf
> is
> the same as putting options in the overrides section, not the
> defaults
> section.

Yes. I'd realized that meanwhile, too. Thanks for clarifying it, and
sorry for the confusion.

The "proble"m that I see with our configuration logic is that some
settings simply don't take effect.

- hwtable settings take precedence over defaults
- detect_prio etc. take precedence over explicit settings

While this logic does make general sense, I am sure that many users
have pulled their hair about it, even though it's documented.
But this is how it has been for a decade. User have got used to it. I
don't think it makes sense to put lots of energy into changing it.

> Now that we changed how hwentry configs work, we could probably
> deprecate the overrides section, but I don't think we can replace the
> defaults section.

No, we can't. And we should keep overrides, too. I find it quite
convenient. Unlike the other sections, you can be certain that what you
set there will take effect :-) Also, we need it for the protocol
subsection.

Martin



> 
> right?
> 
> -Ben
>  
> > Anyway, that would be a possible cause for major breakage, as user
> > settings in the field would suddenly stop being effective. We can't
> > possibly just let it slip in with a minor hwtable patch like this.
> > 
> > Regards
> > Martin
> > 
> > > -Ben
> > > 
> > > >  static struct hwentry default_hw[] = {
> > > > +	/*
> > > > +	 * Generic SCSI devices
> > > > +	 */
> > > > +	{
> > > > +		/* Generic SCSI */
> > > > +		.vendor        = ".*",
> > > > +		.product       = ".*",
> > > > +		.pgpolicy      = GROUP_BY_PRIO,
> > > > +		.pgfailback    = -FAILBACK_IMMEDIATE,
> > > > +		.no_path_retry = 30,
> > > > +	},
> > > >  	/*
> > > >  	 * Generic NVMe devices
> > > >  	 *
> > > > -- 
> > > > 2.48.1
> > > 
>
diff mbox series

Patch

diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
index f8cf3fa9..34b1fd2f 100644
--- a/libmultipath/hwtable.c
+++ b/libmultipath/hwtable.c
@@ -79,6 +79,17 @@ 
 #endif
 
 static struct hwentry default_hw[] = {
+	/*
+	 * Generic SCSI devices
+	 */
+	{
+		/* Generic SCSI */
+		.vendor        = ".*",
+		.product       = ".*",
+		.pgpolicy      = GROUP_BY_PRIO,
+		.pgfailback    = -FAILBACK_IMMEDIATE,
+		.no_path_retry = 30,
+	},
 	/*
 	 * Generic NVMe devices
 	 *