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>