Re: [PATCH 02/14] scsi: core: Query VPD size before getting full page

Martin K. Petersen
2022-03-04T03:28:31Z

Bart,

>> + vpd_len = min(vpd_len, buf_len);
>> - found:
>> - result = scsi_vpd_inquiry(sdev, buf, page, buf_len);
>> +retry_pg:
>> + /*
>> + * Fetch the actual page. Since the appropriate size was reported
>> + * by the device it is now safe to ask for something bigger.
>> + */
>> + memset(buf, 0, buf_len);
>> + result = scsi_vpd_inquiry(sdev, buf, page, vpd_len);
>> if (result < 0)
>> - goto fail;
>> + return -EINVAL;
>> + else if (result > vpd_len) {
>> + dev_warn_once(&sdev->sdev_gendev,
>> + "%s: VPD page 0x%02x result %d > %d bytes\n",
>> + __func__, page, result, vpd_len);
>> + vpd_len = min(result, buf_len);
>> + goto retry_pg;
>> + }
>
> Will an endless loop be triggered if the VPD page length is larger
> than 'buf_len'?

Ah, transplant thinko from scsi_get_vpd_buf() which reallocates the
buffer on mismatch. Will fix.

Thanks!

--
Martin K. Petersen Oracle Linux Engineering