On Wed, 2008-12-31 at 13:12 -0500, Matthew Wilcox wrote: > SES had its own code to retrieve VPD from devices; convert it to use the > new scsi_get_vpd_page helper. > > Signed-off-by: Matthew Wilcox <willy@xxxxxxxxxxxxxxx> > --- > drivers/scsi/ses.c | 29 +++-------------------------- > 1 files changed, 3 insertions(+), 26 deletions(-) > > diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c > index 7f0df29..95e48ad 100644 > --- a/drivers/scsi/ses.c > +++ b/drivers/scsi/ses.c > @@ -345,44 +345,21 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev, > return 0; > } > > -#define VPD_INQUIRY_SIZE 36 > - > static void ses_match_to_enclosure(struct enclosure_device *edev, > struct scsi_device *sdev) > { > - unsigned char *buf = kmalloc(VPD_INQUIRY_SIZE, GFP_KERNEL); > + unsigned char *buf; > unsigned char *desc; > u16 vpd_len; > struct efd efd = { > .addr = 0, > }; > - unsigned char cmd[] = { > - INQUIRY, > - 1, > - 0x83, > - VPD_INQUIRY_SIZE >> 8, > - VPD_INQUIRY_SIZE & 0xff, > - 0 > - }; > > + buf = scsi_get_vpd_page(sdev, 0x83); > if (!buf) > return; > > - if (scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, > - VPD_INQUIRY_SIZE, NULL, SES_TIMEOUT, SES_RETRIES, > - NULL)) > - goto free; > - > - vpd_len = (buf[2] << 8) + buf[3]; > - kfree(buf); > - buf = kmalloc(vpd_len, GFP_KERNEL); > - if (!buf) > - return; > - cmd[3] = vpd_len >> 8; > - cmd[4] = vpd_len & 0xff; > - if (scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, > - vpd_len, NULL, SES_TIMEOUT, SES_RETRIES, NULL)) > - goto free; > + vpd_len = (buf[2] << 8) | buf[3]; This was actually wrong in the original code. It should be pd_len = (buf[2] << 8) | buf[3] + 4; to account for the header offset in the returned data length. James -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html