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