Message ID | 20220125162441.2226-1-mwilck@suse.com |
---|---|
State | Superseded |
Headers | show |
Series | [RFC] scsi: make "access_state" sysfs attribute always visible | expand |
On 1/27/22 18:28, Bart Van Assche wrote: > On 1/25/22 08:24, mwilck@suse.com wrote: >> From: Martin Wilck <mwilck@suse.com> >> >> If a SCSI device handler module is loaded after some SCSI devices >> have already been probed (e.g. via request_module() by dm-multipath), >> the "access_state" and "preferred_path" sysfs attributes remain >> invisible for >> these devices, although the handler is attached and live. The reason is >> that the visibility is only checked when the sysfs attribute group is >> first created. This results in an inconsistent user experience depending >> on the load order of SCSI low-level drivers vs. device handler modules. > > Isn't this something that should be fixed in the sysfs code rather than > in the SCSI core? If this issue affects SCSI I assume that it will also > affect other sysfs users. > Urgh. Rather not. That particular code affects the visibility of sysfs attributes; they are created statically in device_add(), so it won't even be created if it's not visible. Reworking that would mean a rework of the entire drivers/base code. And not to mention a change in behaviour, as some drivers might well rely on the current behaviour. But if you feel up to it ... Cheers, Hannes
On 25.01.22 18:24, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > If a SCSI device handler module is loaded after some SCSI devices > have already been probed (e.g. via request_module() by dm-multipath), > the "access_state" and "preferred_path" sysfs attributes remain invisible for > these devices, although the handler is attached and live. The reason is > that the visibility is only checked when the sysfs attribute group is > first created. This results in an inconsistent user experience depending > on the load order of SCSI low-level drivers vs. device handler modules. > I suppose you looked at sysfs_update_group(), and it's not a good fit? > This patch changes user space API: attempting to read the "access_state" > or "preferred_path" attributes will now result in -EINVAL rather than > -ENODEV for devices that have no device handler, and tests for the existence > of these attributes will have a different result. > > Signed-off-by: Martin Wilck <mwilck@suse.com> > --- > drivers/scsi/scsi_sysfs.c | 8 -------- > 1 file changed, 8 deletions(-) > > diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c > index f1e0c131b77c..226a50944c00 100644 > --- a/drivers/scsi/scsi_sysfs.c > +++ b/drivers/scsi/scsi_sysfs.c > @@ -1228,14 +1228,6 @@ static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj, > !sdev->host->hostt->change_queue_depth) > return 0; > > -#ifdef CONFIG_SCSI_DH > - if (attr == &dev_attr_access_state.attr && > - !sdev->handler) > - return 0; > - if (attr == &dev_attr_preferred_path.attr && > - !sdev->handler) > - return 0; > -#endif > return attr->mode; > } > ]
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index f1e0c131b77c..226a50944c00 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1228,14 +1228,6 @@ static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj, !sdev->host->hostt->change_queue_depth) return 0; -#ifdef CONFIG_SCSI_DH - if (attr == &dev_attr_access_state.attr && - !sdev->handler) - return 0; - if (attr == &dev_attr_preferred_path.attr && - !sdev->handler) - return 0; -#endif return attr->mode; }