SCSI: Fix error handling when no ULD is attached
Commit 18a4d0a22e
("[SCSI] Handle disk devices which can not process
medium access commands") introduced a bug in which we would attempt to
dereference the scsi driver even when the device had no ULD attached.
Ensure that a driver is registered and make the driver accessor function
more resilient to errors during device discovery.
Reported-by: Elric Fu <elricfu1@gmail.com>
Reported-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
bfecc60d8f
Коммит
919f797a4c
|
@ -835,7 +835,7 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
|
|||
|
||||
scsi_eh_restore_cmnd(scmd, &ses);
|
||||
|
||||
if (sdrv->eh_action)
|
||||
if (sdrv && sdrv->eh_action)
|
||||
rtn = sdrv->eh_action(scmd, cmnd, cmnd_size, rtn);
|
||||
|
||||
return rtn;
|
||||
|
|
|
@ -134,6 +134,9 @@ struct scsi_cmnd {
|
|||
|
||||
static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
|
||||
{
|
||||
if (!cmd->request->rq_disk)
|
||||
return NULL;
|
||||
|
||||
return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче