Commit b391277a56b9eaaff4474339c703e574ed7fab5b

Authored by Hannes Reinecke
Committed by James Bottomley
1 parent 24add1c432

sd, sr: fix Driver 'sd' needs updating message

If a SCSI ULD driver sets blk_queue_prep_rq(), it should clean it
up itself on remove(), 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().

[jejb: fix sdkp initialisation problem due to mismerge]
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

Showing 6 changed files with 4 additions and 18 deletions Side-by-side Diff

drivers/scsi/scsi_lib.c
... ... @@ -1207,6 +1207,7 @@
1207 1207 ret = scsi_setup_blk_pc_cmnd(sdev, req);
1208 1208 return scsi_prep_return(q, req, ret);
1209 1209 }
  1210 +EXPORT_SYMBOL(scsi_prep_fn);
1210 1211  
1211 1212 /*
1212 1213 * scsi_dev_queue_ready: if we can send requests to sdev, return 1 else
drivers/scsi/scsi_priv.h
... ... @@ -87,7 +87,6 @@
87 87 extern void scsi_exit_queue(void);
88 88 struct request_queue;
89 89 struct request;
90   -extern int scsi_prep_fn(struct request_queue *, struct request *);
91 90 extern struct kmem_cache *scsi_sdb_cache;
92 91  
93 92 /* scsi_proc.c */
drivers/scsi/scsi_sysfs.c
... ... @@ -420,29 +420,12 @@
420 420 return err;
421 421 }
422 422  
423   -static int scsi_bus_remove(struct device *dev)
424   -{
425   - struct device_driver *drv = dev->driver;
426   - struct scsi_device *sdev = to_scsi_device(dev);
427   - int err = 0;
428   -
429   - /* reset the prep_fn back to the default since the
430   - * driver may have altered it and it's being removed */
431   - blk_queue_prep_rq(sdev->request_queue, scsi_prep_fn);
432   -
433   - if (drv && drv->remove)
434   - err = drv->remove(dev);
435   -
436   - return 0;
437   -}
438   -
439 423 struct bus_type scsi_bus_type = {
440 424 .name = "scsi",
441 425 .match = scsi_bus_match,
442 426 .uevent = scsi_bus_uevent,
443 427 .suspend = scsi_bus_suspend,
444 428 .resume = scsi_bus_resume,
445   - .remove = scsi_bus_remove,
446 429 };
447 430 EXPORT_SYMBOL_GPL(scsi_bus_type);
448 431  
... ... @@ -2123,6 +2123,7 @@
2123 2123  
2124 2124 async_synchronize_full();
2125 2125 sdkp = dev_get_drvdata(dev);
  2126 + blk_queue_prep_rq(sdkp->device->request_queue, scsi_prep_fn);
2126 2127 device_del(&sdkp->dev);
2127 2128 del_gendisk(sdkp->disk);
2128 2129 sd_shutdown(dev);
... ... @@ -881,6 +881,7 @@
881 881 {
882 882 struct scsi_cd *cd = dev_get_drvdata(dev);
883 883  
  884 + blk_queue_prep_rq(cd->device->request_queue, scsi_prep_fn);
884 885 del_gendisk(cd->disk);
885 886  
886 887 mutex_lock(&sr_ref_mutex);
include/scsi/scsi_driver.h
... ... @@ -32,6 +32,7 @@
32 32 int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req);
33 33 int scsi_prep_state_check(struct scsi_device *sdev, struct request *req);
34 34 int scsi_prep_return(struct request_queue *q, struct request *req, int ret);
  35 +int scsi_prep_fn(struct request_queue *, struct request *);
35 36  
36 37 #endif /* _SCSI_SCSI_DRIVER_H */