* What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
@ 2008-03-24 14:00 Eric Piel
2008-03-24 15:24 ` James Bottomley
0 siblings, 1 reply; 6+ messages in thread
From: Eric Piel @ 2008-03-24 14:00 UTC (permalink / raw)
To: linux-scsi, Russell King; +Cc: James.Bottomley, Tilman Schmidt
Hello,
Since commit 751bf4d7865e4ced406be93b04c7436d866d3684 (scsi_sysfs:
restore prep_fn when ULD is removed), the warning "Driver '%s' needs
updating - please use bus_type methods." is generated for several scsi
drivers (sr, sg, st and osst). It does so because it thinks that the
driver remove() functions will not be called (cf
__device_release_driver()). Actually, they are called by scsi_bus_remove().
This has been noted already a couple of times [1] [2] [3], but it seems
absolutely nothing conclusive came out of the reports.
What should be done? Delete the warning? Change it so it doesn't get
triggered if drv->bus->remove == scsi_bus_remove? Merge
scsi_bus_remove() into the driver remove() functions? Disregard the
monthly warming reports?
Eric
[1] http://lkml.org/lkml/2008/1/10/47
[2] http://lkml.org/lkml/2008/2/20/547
[3] http://lkml.org/lkml/2008/3/22/198
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
2008-03-24 14:00 What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst? Eric Piel
@ 2008-03-24 15:24 ` James Bottomley
2008-03-24 17:59 ` Greg KH
0 siblings, 1 reply; 6+ messages in thread
From: James Bottomley @ 2008-03-24 15:24 UTC (permalink / raw)
To: Eric Piel; +Cc: linux-scsi, Russell King, Tilman Schmidt, Greg KH, Kay Sievers
On Mon, 2008-03-24 at 15:00 +0100, Eric Piel wrote:
> Since commit 751bf4d7865e4ced406be93b04c7436d866d3684 (scsi_sysfs:
> restore prep_fn when ULD is removed), the warning "Driver '%s' needs
> updating - please use bus_type methods." is generated for several scsi
> drivers (sr, sg, st and osst). It does so because it thinks that the
> driver remove() functions will not be called (cf
> __device_release_driver()). Actually, they are called by scsi_bus_remove().
>
> This has been noted already a couple of times [1] [2] [3], but it seems
> absolutely nothing conclusive came out of the reports.
>
> What should be done? Delete the warning? Change it so it doesn't get
> triggered if drv->bus->remove == scsi_bus_remove? Merge
> scsi_bus_remove() into the driver remove() functions? Disregard the
> monthly warming reports?
At least for SCSI, the warning is wrong .. the drivers are properly
converted. The issue that triggers the warning is that we use the
bus_type power management methods to receive the notifies in the
mid-layer (where we do mid-layer specific stuff) then we notify the
drivers through the driver power management methods.
A solution would be to duplicate the power management methods in the
scsi_driver structure, but this is a complete waste of space since the
generic driver ones aren't going away (at least according to Kay and
Greg). I still think the best thing to do is just to turn off this
spurious warning.
James
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
2008-03-24 15:24 ` James Bottomley
@ 2008-03-24 17:59 ` Greg KH
2008-03-24 18:16 ` James Bottomley
0 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2008-03-24 17:59 UTC (permalink / raw)
To: James Bottomley
Cc: Eric Piel, linux-scsi, Russell King, Tilman Schmidt, Kay Sievers
On Mon, Mar 24, 2008 at 10:24:07AM -0500, James Bottomley wrote:
>
> On Mon, 2008-03-24 at 15:00 +0100, Eric Piel wrote:
> > Since commit 751bf4d7865e4ced406be93b04c7436d866d3684 (scsi_sysfs:
> > restore prep_fn when ULD is removed), the warning "Driver '%s' needs
> > updating - please use bus_type methods." is generated for several scsi
> > drivers (sr, sg, st and osst). It does so because it thinks that the
> > driver remove() functions will not be called (cf
> > __device_release_driver()). Actually, they are called by scsi_bus_remove().
> >
> > This has been noted already a couple of times [1] [2] [3], but it seems
> > absolutely nothing conclusive came out of the reports.
> >
> > What should be done? Delete the warning? Change it so it doesn't get
> > triggered if drv->bus->remove == scsi_bus_remove? Merge
> > scsi_bus_remove() into the driver remove() functions? Disregard the
> > monthly warming reports?
>
> At least for SCSI, the warning is wrong .. the drivers are properly
> converted. The issue that triggers the warning is that we use the
> bus_type power management methods to receive the notifies in the
> mid-layer (where we do mid-layer specific stuff) then we notify the
> drivers through the driver power management methods.
>
> A solution would be to duplicate the power management methods in the
> scsi_driver structure, but this is a complete waste of space since the
> generic driver ones aren't going away (at least according to Kay and
> Greg). I still think the best thing to do is just to turn off this
> spurious warning.
Do you have a patch that can detect the usage that you currently have so
that I can change the warning message to not trigger if things are set
up that way instead?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
2008-03-24 17:59 ` Greg KH
@ 2008-03-24 18:16 ` James Bottomley
2008-03-25 22:20 ` Éric Piel
0 siblings, 1 reply; 6+ messages in thread
From: James Bottomley @ 2008-03-24 18:16 UTC (permalink / raw)
To: Greg KH; +Cc: Eric Piel, linux-scsi, Russell King, Tilman Schmidt, Kay Sievers
On Mon, 2008-03-24 at 10:59 -0700, Greg KH wrote:
> On Mon, Mar 24, 2008 at 10:24:07AM -0500, James Bottomley wrote:
> >
> > On Mon, 2008-03-24 at 15:00 +0100, Eric Piel wrote:
> > > Since commit 751bf4d7865e4ced406be93b04c7436d866d3684 (scsi_sysfs:
> > > restore prep_fn when ULD is removed), the warning "Driver '%s' needs
> > > updating - please use bus_type methods." is generated for several scsi
> > > drivers (sr, sg, st and osst). It does so because it thinks that the
> > > driver remove() functions will not be called (cf
> > > __device_release_driver()). Actually, they are called by scsi_bus_remove().
> > >
> > > This has been noted already a couple of times [1] [2] [3], but it seems
> > > absolutely nothing conclusive came out of the reports.
> > >
> > > What should be done? Delete the warning? Change it so it doesn't get
> > > triggered if drv->bus->remove == scsi_bus_remove? Merge
> > > scsi_bus_remove() into the driver remove() functions? Disregard the
> > > monthly warming reports?
> >
> > At least for SCSI, the warning is wrong .. the drivers are properly
> > converted. The issue that triggers the warning is that we use the
> > bus_type power management methods to receive the notifies in the
> > mid-layer (where we do mid-layer specific stuff) then we notify the
> > drivers through the driver power management methods.
> >
> > A solution would be to duplicate the power management methods in the
> > scsi_driver structure, but this is a complete waste of space since the
> > generic driver ones aren't going away (at least according to Kay and
> > Greg). I still think the best thing to do is just to turn off this
> > spurious warning.
>
> Do you have a patch that can detect the usage that you currently have so
> that I can change the warning message to not trigger if things are set
> up that way instead?
Well, my suggested fix would be the attached one since you and Kay seem
to be telling me that converting to bus_type X methods still leaves us
free to reuse the driver X methods. If you're planning on deprecating
the driver X methods, then sure, it makes sense for me to duplicate them
in the scsi driver.
James
---
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index bf31a01..bc9f76d 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -215,11 +215,6 @@ int driver_register(struct device_driver *drv)
{
int ret;
- if ((drv->bus->probe && drv->probe) ||
- (drv->bus->remove && drv->remove) ||
- (drv->bus->shutdown && drv->shutdown))
- printk(KERN_WARNING "Driver '%s' needs updating - please use "
- "bus_type methods\n", drv->name);
ret = bus_add_driver(drv);
if (ret)
return ret;
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
2008-03-24 18:16 ` James Bottomley
@ 2008-03-25 22:20 ` Éric Piel
2008-03-25 22:34 ` James Bottomley
0 siblings, 1 reply; 6+ messages in thread
From: Éric Piel @ 2008-03-25 22:20 UTC (permalink / raw)
To: James Bottomley
Cc: Greg KH, linux-scsi, Russell King, Tilman Schmidt, Kay Sievers
24/03/08 19:16, James Bottomley wrote/a écrit:
> On Mon, 2008-03-24 at 10:59 -0700, Greg KH wrote:
>> On Mon, Mar 24, 2008 at 10:24:07AM -0500, James Bottomley wrote:
>>> A solution would be to duplicate the power management methods in the
>>> scsi_driver structure, but this is a complete waste of space since the
>>> generic driver ones aren't going away (at least according to Kay and
>>> Greg). I still think the best thing to do is just to turn off this
>>> spurious warning.
>> Do you have a patch that can detect the usage that you currently have so
>> that I can change the warning message to not trigger if things are set
>> up that way instead?
>
> Well, my suggested fix would be the attached one since you and Kay seem
> to be telling me that converting to bus_type X methods still leaves us
> free to reuse the driver X methods. If you're planning on deprecating
> the driver X methods, then sure, it makes sense for me to duplicate them
> in the scsi driver.
I guess the problem with removing the warning is that in some other
cases it could really be useful (searching on the web seems to show a
couple of true positives). I think Greg was more suggesting like adding
a flag ".i_know_what_i_am_doing" somewhere and putting it to 1 to
disable the warning.
Anyway, if the driver X methods are meaning something else, it makes
sense to duplicate them specifically in the scsi driver structure. We are
basically talking about 8 bytes per scsi device, which can be considered
a fair trade-off if it allows to detect bugs in other places of the
kernel. Following is an example of patch.
Eric
PS: Probably I'm an idiot, for the patch I didn't understand how to
move ".remove" to scsi_driver, so I moved it to scsi_device... anyway it's
just an example in order to be sure that everyone is talking about the
same thing.
---
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index b9b09a7..7d29099 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -384,8 +384,8 @@ static int scsi_bus_remove(struct device *dev)
* driver may have altered it and it's being removed */
blk_queue_prep_rq(sdev->request_queue, scsi_prep_fn);
- if (drv && drv->remove)
- err = drv->remove(dev);
+ if (sdev->remove)
+ err = sdev->remove(dev);
return 0;
}
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 7ee86d4..da6adfd 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -83,7 +83,6 @@ static struct scsi_driver sr_template = {
.gendrv = {
.name = "sr",
.probe = sr_probe,
- .remove = sr_remove,
},
.done = sr_done,
};
@@ -635,6 +634,7 @@ static int sr_probe(struct device *dev)
sprintf(cd->cdi.name, "sr%d", minor);
sdev->sector_size = 2048; /* A guess, just in case */
+ sdev->remove = sr_remove;
/* FIXME: need to handle a get_capabilities failure properly ?? */
get_capabilities(cd);
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index ab7acbe..0809a0b 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -158,6 +158,7 @@ struct scsi_device {
struct device sdev_gendev;
struct class_device sdev_classdev;
+ int (*remove) (struct device *);
struct execute_work ew; /* used to get process context on put */
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst?
2008-03-25 22:20 ` Éric Piel
@ 2008-03-25 22:34 ` James Bottomley
0 siblings, 0 replies; 6+ messages in thread
From: James Bottomley @ 2008-03-25 22:34 UTC (permalink / raw)
To: Éric Piel
Cc: Greg KH, linux-scsi, Russell King, Tilman Schmidt, Kay Sievers
On Tue, 2008-03-25 at 23:20 +0100, Éric Piel wrote:
> 24/03/08 19:16, James Bottomley wrote/a écrit:
> > On Mon, 2008-03-24 at 10:59 -0700, Greg KH wrote:
> >> On Mon, Mar 24, 2008 at 10:24:07AM -0500, James Bottomley wrote:
> >>> A solution would be to duplicate the power management methods in the
> >>> scsi_driver structure, but this is a complete waste of space since the
> >>> generic driver ones aren't going away (at least according to Kay and
> >>> Greg). I still think the best thing to do is just to turn off this
> >>> spurious warning.
> >> Do you have a patch that can detect the usage that you currently have so
> >> that I can change the warning message to not trigger if things are set
> >> up that way instead?
> >
> > Well, my suggested fix would be the attached one since you and Kay seem
> > to be telling me that converting to bus_type X methods still leaves us
> > free to reuse the driver X methods. If you're planning on deprecating
> > the driver X methods, then sure, it makes sense for me to duplicate them
> > in the scsi driver.
>
> I guess the problem with removing the warning is that in some other
> cases it could really be useful (searching on the web seems to show a
> couple of true positives). I think Greg was more suggesting like adding
> a flag ".i_know_what_i_am_doing" somewhere and putting it to 1 to
> disable the warning.
Sure, but I just see all the fallout from the false positive on SCSI
(Like about one email a week suggesting that I fix it), so I'm
complaining about my particular piece of this.
> Anyway, if the driver X methods are meaning something else, it makes
> sense to duplicate them specifically in the scsi driver structure. We are
> basically talking about 8 bytes per scsi device, which can be considered
> a fair trade-off if it allows to detect bugs in other places of the
> kernel. Following is an example of patch.
Well, what I'd like is to establish whether this usage is correct. I do
think that if the probe and remove methods aren't going away, then it
is,
> PS: Probably I'm an idiot, for the patch I didn't understand how to
> move ".remove" to scsi_driver, so I moved it to scsi_device... anyway it's
> just an example in order to be sure that everyone is talking about the
> same thing.
No ... it's a reasonable approach. The struct scsi_device isn't quite
the right place to do it ... we have one struct scsi_driver for each ULD
(that's sd, sr, st etc,) We have one struct scsi_device for every
device you have in the system (which can be thousands in an enterprise
system), so putting the method in struct scsi_device is a bit of
duplication overkill, but moving it to struct scsi_driver is very
feasible.
James
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-03-25 22:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-24 14:00 What should be done with wrong warning "please use bus_type methods." on sd, sr, st and osst? Eric Piel
2008-03-24 15:24 ` James Bottomley
2008-03-24 17:59 ` Greg KH
2008-03-24 18:16 ` James Bottomley
2008-03-25 22:20 ` Éric Piel
2008-03-25 22:34 ` James Bottomley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox