diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-01-02 12:14:30 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-01-02 14:08:00 -0500 |
commit | 751bf4d7865e4ced406be93b04c7436d866d3684 (patch) | |
tree | bb5d45ec9af0dc3cf22d3a21364c13f6ae2e5358 /drivers/scsi/scsi_lib.c | |
parent | dc512814b5f8b7b80c74d6170b93a606ae4f36c5 (diff) |
[SCSI] scsi_sysfs: restore prep_fn when ULD is removed
A recent bug report:
http://bugzilla.kernel.org/show_bug.cgi?id=9674
Was caused because the ULDs now set their own prep functions, but
don't necessarily reset the prep function back to the SCSI default
when they are removed. This leads to panics if commands are sent to
the device after the module is removed because the prep_fn is still
pointing to the old module code. The fix for this is to implement a
bus remove method that resets the prep_fn pointer correctly before
calling the ULD specific driver remove method.
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 0e81e4cf8876..a9ac5b1b1667 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -1332,7 +1332,7 @@ int scsi_prep_return(struct request_queue *q, struct request *req, int ret) | |||
1332 | } | 1332 | } |
1333 | EXPORT_SYMBOL(scsi_prep_return); | 1333 | EXPORT_SYMBOL(scsi_prep_return); |
1334 | 1334 | ||
1335 | static int scsi_prep_fn(struct request_queue *q, struct request *req) | 1335 | int scsi_prep_fn(struct request_queue *q, struct request *req) |
1336 | { | 1336 | { |
1337 | struct scsi_device *sdev = q->queuedata; | 1337 | struct scsi_device *sdev = q->queuedata; |
1338 | int ret = BLKPREP_KILL; | 1338 | int ret = BLKPREP_KILL; |