On Thu, 2012-09-27 at 13:43 -0400, Martin K. Petersen wrote:
quoted
quoted
quoted
quoted
quoted
"Li" == Li Zhong [off-list ref] writes:
quoted
@@ -845,8 +844,11 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
scsi_eh_restore_cmnd(scmd, &ses);
- if (sdrv && sdrv->eh_action)
- rtn = sdrv->eh_action(scmd, cmnd, cmnd_size, rtn);
+ if (scmd->request->cmd_type == REQ_TYPE_FS) {
+ struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
+ if (sdrv->eh_action)
+ rtn = sdrv->eh_action(scmd, cmnd, cmnd_size, rtn);
+ }
return rtn;
}
My only concern is whether our device lifetime rules guarantee that the
ULD is always attached when we service an error handling command?
Yes, they are. We can only get REQ_TYPE_FS through a filesystem, which
must be mounted on a block device, which is provided by the ULD. You
can't unmount with outstanding I/O (which people complain about when it
goes into error handling, I'll admit), so the ULD has to stay bound.
James