public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* 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