Driver 'sd' needs updating - please use bus_type methods
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|[email protected] |scsi_drivers-other@kernel- | |bugs.osdl.org
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|scsi_drivers-other@kernel- |[email protected] |bugs.osdl.org |
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
James Bottomley
maintainerQuoted 1 line · On Sat, 2008-05-03 at 17:22 -0700, [email protected] wrote:
This isn't a bug. There have been numerous discussions about fixing it.
The warning comes out of here in drivers/base/driver.c:
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);
The problem is that SCSI drivers have both: SCSI uses the bus methods to trigger the probe and remove (as it must having a bus method) but it also uses the individual struct driver probe and remove methods to rethrow the events to the ULDs.
According to Kay and Greg, this is a legitimate way of operating, and they're not going to remove the driver methods (otherwise we'd just take them into struct scsi_driver), so we're stuck trying to find a way to prevent the base warning about this.
James
http://bugzilla.kernel.org/show_bug.cgi?id=9872
------- Comment #1 from [email protected] 2008-05-04 07:34 -------
Reply-To: [email protected]
Quoted 1 line · On Sat, 2008-05-03 at 17:22 -0700, [email protected] wrote:
This isn't a bug. There have been numerous discussions about fixing it.
The warning comes out of here in drivers/base/driver.c:
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);The problem is that SCSI drivers have both: SCSI uses the bus methods to trigger the probe and remove (as it must having a bus method) but it also uses the individual struct driver probe and remove methods to rethrow the events to the ULDs.
According to Kay and Greg, this is a legitimate way of operating, and they're not going to remove the driver methods (otherwise we'd just take them into struct scsi_driver), so we're stuck trying to find a way to prevent the base warning about this.
James
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
Quoted 5 lines · James Bottomley
Quoted 1 line · On Sat, 2008-05-03 at 17:22 -0700, [email protected] wrote:
This isn't a bug. There have been numerous discussions about fixing it.
It is a kind of a "bug". The core does not call driver functions, if bus_type is provided. So the warning is fine according to the current logic of the core, telling you it will ignore things a driver asked for.
Quoted 8 lines
The warning comes out of here in
drivers/base/driver.c: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);
Quoted 4 lines
The problem is that SCSI drivers have both: SCSI uses the bus methods to trigger the probe and remove (as it must having a bus method) but it also uses the individual struct driver probe and remove methods to rethrow the events to the ULDs.
Looks like it does not use probe() on the bus. Now lets get rid of remove(). :)
Quoted 4 lines
According to Kay and Greg, this is a legitimate way of operating, and they're not going to remove the driver methods (otherwise we'd just take them into struct
scsi_driver), so we're stuck trying to find a way to prevent the base warning about this.
Right, I guess, they are not going away, but you still should only use one of them, and not both at the same time.
How about the following patch? Which does not use driver core pointers, which are ignored by the core, to do private SCSI stuff.
Thanks,
Kay
From: Hannes Reinecke <[email protected]>
Subject: SCSI: do not use bus_type->remove() and driver->remove() at the same time
If a driver sets blk_queue_prep_rq(), it should clean it up itself, and not from the bus callbacks. This removes the need to hook into bus->remove(), which should not be used at the same time as driver->remove().
---
drivers/scsi/scsi_lib.c | 1 + drivers/scsi/scsi_priv.h | 1 - drivers/scsi/scsi_sysfs.c | 17 ----------------- drivers/scsi/sd.c | 2 ++ drivers/scsi/sr.c | 1 + include/scsi/scsi_driver.h | 1 + 6 files changed, 5 insertions(+), 18 deletions(-)
drivers/scsi/scsi_lib.c +1 -0
@@ -1267,6 +1267,7 @@ int scsi_prep_fn(struct request_queue *q, struct request *req) ret =scsi_setup_blk_pc_cmnd (sdev, req);return scsi_prep_return (q, req, ret); } +EXPORT_SYMBOL (scsi_prep_fn);/* * scsi_dev_queue_ready: if we can send requests to sdev, return 1 else
drivers/scsi/scsi_priv.h +0 -1
@@ -76,7 +76,6 @@ extern int scsi_init_queue(void);extern void scsi_exit_queue (void );struct request_queue ;struct request ; -extern int scsi_prep_fn (struct request_queue *,struct request *);/* scsi_proc.c */ #ifdef CONFIG_SCSI_PROC_FS
drivers/scsi/scsi_sysfs.c +0 -17
@@ -410,29 +410,12 @@ static int scsi_bus_resume(struct device * dev)return err; } -static int scsi_bus_remove (struct device *dev) -{ -struct device_driver *drv = dev->driver; -struct scsi_device *sdev =to_scsi_device (dev); -int err =0 ; - -/* reset the prep_fn back to the default since the -* 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); - -return 0 ; -} -struct bus_type scsi_bus_type = { .name ="scsi" , .match = scsi_bus_match, .uevent = scsi_bus_uevent, .suspend = scsi_bus_suspend, .resume = scsi_bus_resume, - .remove = scsi_bus_remove, };int scsi_sysfs_register (void )
drivers/scsi/sd.c +2 -0
@@ -1743,6 +1743,8 @@ static int sd_remove(struct device *dev) {struct scsi_disk *sdkp =dev_get_drvdata (dev); +blk_queue_prep_rq (sdkp->device->request_queue, scsi_prep_fn); +device_del (&sdkp->dev);del_gendisk (sdkp->disk);sd_shutdown (dev);
drivers/scsi/sr.c +1 -0
@@ -901,6 +901,7 @@ static int sr_remove(struct device *dev) {struct scsi_cd *cd =dev_get_drvdata (dev); +blk_queue_prep_rq (cd->device->request_queue, scsi_prep_fn);del_gendisk (cd->disk);mutex_lock (&sr_ref_mutex);
include/scsi/scsi_driver.h +1 -0
@@ -32,5 +32,6 @@ int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req);int scsi_setup_fs_cmnd (struct scsi_device *sdev,struct request *req);int scsi_prep_state_check (struct scsi_device *sdev,struct request *req);int scsi_prep_return (struct request_queue *q,struct request *req,int ret); +int scsi_prep_fn (struct request_queue *,struct request *);#endif /* _SCSI_SCSI_DRIVER_H */
http://bugzilla.kernel.org/show_bug.cgi?id=9872
------- Comment #2 from [email protected] 2008-05-05 09:24 -------
Quoted 5 lines · James Bottomley
Quoted 1 line · On Sat, 2008-05-03 at 17:22 -0700, [email protected] wrote:
This isn't a bug. There have been numerous discussions about fixing it.
It is a kind of a "bug". The core does not call driver functions, if bus_type is provided. So the warning is fine according to the current logic of the core, telling you it will ignore things a driver asked for.
Quoted 8 lines
The warning comes out of here in
drivers/base/driver.c: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);
Quoted 4 lines
The problem is that SCSI drivers have both: SCSI uses the bus methods to trigger the probe and remove (as it must having a bus method) but it also uses the individual struct driver probe and remove methods to rethrow the events to the ULDs.
Looks like it does not use probe() on the bus. Now lets get rid of remove(). :)
Quoted 4 lines
According to Kay and Greg, this is a legitimate way of operating, and they're not going to remove the driver methods (otherwise we'd just take them into struct
scsi_driver), so we're stuck trying to find a way to prevent the base warning about this.
Right, I guess, they are not going away, but you still should only use one of them, and not both at the same time.
How about the following patch? Which does not use driver core pointers, which are ignored by the core, to do private SCSI stuff.
Thanks,
Kay
From: Hannes Reinecke <[email protected]>
Subject: SCSI: do not use bus_type->remove() and driver->remove() at the same time
If a driver sets blk_queue_prep_rq(), it should clean it up itself, and not from the bus callbacks. This removes the need to hook into bus->remove(), which should not be used at the same time as driver->remove().
---
drivers/scsi/scsi_lib.c | 1 + drivers/scsi/scsi_priv.h | 1 - drivers/scsi/scsi_sysfs.c | 17 ----------------- drivers/scsi/sd.c | 2 ++ drivers/scsi/sr.c | 1 + include/scsi/scsi_driver.h | 1 + 6 files changed, 5 insertions(+), 18 deletions(-)
drivers/scsi/scsi_lib.c +0 -0
@@ -1267,6 +1267,7 @@ int scsi_prep_fn(struct request_queue *q, struct request
*req)
ret = scsi_setup_blk_pc_cmnd(sdev, req);
return scsi_prep_return(q, req, ret); }
+EXPORT_SYMBOL(scsi_prep_fn);
/*
* scsi_dev_queue_ready: if we can send requests to sdev, return 1 else
drivers/scsi/scsi_priv.h +0 -1
@@ -76,7 +76,6 @@ extern int scsi_init_queue(void);extern void scsi_exit_queue (void );struct request_queue ;struct request ; -extern int scsi_prep_fn (struct request_queue *,struct request *);/* scsi_proc.c */ #ifdef CONFIG_SCSI_PROC_FS
drivers/scsi/scsi_sysfs.c +0 -17
@@ -410,29 +410,12 @@ static int scsi_bus_resume(struct device * dev)return err; } -static int scsi_bus_remove (struct device *dev) -{ -struct device_driver *drv = dev->driver; -struct scsi_device *sdev =to_scsi_device (dev); -int err =0 ; - -/* reset the prep_fn back to the default since the -* 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); - -return 0 ; -} -struct bus_type scsi_bus_type = { .name ="scsi" , .match = scsi_bus_match, .uevent = scsi_bus_uevent, .suspend = scsi_bus_suspend, .resume = scsi_bus_resume, - .remove = scsi_bus_remove, };int scsi_sysfs_register (void )
drivers/scsi/sd.c +2 -0
@@ -1743,6 +1743,8 @@ static int sd_remove(struct device *dev) {struct scsi_disk *sdkp =dev_get_drvdata (dev); +blk_queue_prep_rq (sdkp->device->request_queue, scsi_prep_fn); +device_del (&sdkp->dev);del_gendisk (sdkp->disk);sd_shutdown (dev);
drivers/scsi/sr.c +1 -0
@@ -901,6 +901,7 @@ static int sr_remove(struct device *dev) {struct scsi_cd *cd =dev_get_drvdata (dev); +blk_queue_prep_rq (cd->device->request_queue, scsi_prep_fn);del_gendisk (cd->disk);mutex_lock (&sr_ref_mutex);
include/scsi/scsi_driver.h +0 -0
@@ -32,5 +32,6 @@ int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct
request *req);
int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req); int scsi_prep_state_check(struct scsi_device *sdev, struct request *req); int scsi_prep_return(struct request_queue *q, struct request *req, int ret);
+int scsi_prep_fn(struct request_queue *, struct request *);
#endif /* _SCSI_SCSI_DRIVER_H */
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |[email protected]
------- Comment #3 from [email protected] 2008-06-01 23:46 ------- Russel, did you get chance to test Kay's patch in #2?
Are there plans to submit the patch?
Thanks.
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
------- Comment #4 from [email protected] 2008-06-05 16:52 ------- (In reply to comment #3)
Quoted 1 line
Russel, did you get chance to test Kay's patch in #2?
I did. It worked. I had to patch the files by hand because
of some difference in version, I guess.
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|CLOSED |REOPENED
Resolution|CODE_FIX |------- Comment #5 from [email protected] 2009-03-24 04:24 ------- Oops didn't mean to close this
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
KernelVersion|2.6.27 |2.6.29
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
[email protected] changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |CLOSED
KernelVersion|2.6.24 |2.6.27
Resolution| |CODE_FIXSignature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
Pacho Ramos <[email protected]> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |[email protected] | |ovi.es
--- Comment #6 from Pacho Ramos <[email protected]> 2009-07-18 12:34:56 --- I still get this with kernel-2.6.30 :-/
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug.
http://bugzilla.kernel.org/show_bug.cgi?id=9872
Alan <[email protected]> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |[email protected] Kernel Version|2.6.29 |2.6.30 Regression|--- |No
Signature · 3 lines
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug.