[PATCH] Let LLD specify INQUIRY length
That sounds like a good suggestion. Even better, instead of adding a new field we can simply use the existing inquiry_length. This patch changes scsi_probe_lun() to use the value in sdev->inquiry_length for the first INQUIRY attempt, if that value is nonzero. Subsequent attempts are based, as before, on the blacklist flags and the Additional Length field in the INQUIRY data. The patch also contains a fairly extensive reorganization of the subroutine. All the code that was duplicated for sending the INQUIRY command twice has been consolidated. The routine now makes up to three passes: In the first pass, the transfer length is the value initially found in sdev->inquiry_length if that has been set, otherwise it is the current conservative 36 bytes. If the first pass succeeds, the routine retrieves the blist flags for the device and checks the Additional Length field. The blist flags take precedence over sdev->inquiry_length, which in turn takes precedence over the Additional Length. If it turns out there is more data available than we transferred the first time, a second pass tries to get it. If the second pass succeeds the INQUIRY data may have changed, so the blist flags are looked up again and the Additional Length is checked again. If not, a third pass tries to get the data back, using the same transfer length as the first pass. Finally, the value stored in sdev->inquiry_length is set to the amount actually transferred or the size computed from the Additional Length, whichever is smaller. Although the net change in the source file size is small, the new routine has more comments and less code. Overall I think it's an improvement. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Showing
Please register or sign in to comment