On Wed, 2019-02-27 at 22:57 -0500, Martin K. Petersen wrote: +AD4 No point in allocating separate memory for the VPD pages we're +AD4 querying. Use the buffer we already allocated. +AD4 +AD4 Signed-off-by: Martin K. Petersen +ADw-martin.petersen+AEA-oracle.com+AD4 +AD4 --- +AD4 drivers/scsi/scsi.c +AHw 1 +- +AD4 drivers/scsi/sd.c +AHw 48 +-+-+-+-+-+-+-+-+-+-+-+-+-+-------------------------------- +AD4 2 files changed, 16 insertions(+-), 33 deletions(-) +AD4 +AD4 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c +AD4 index 7675ff0ca2ea..1d58e466722f 100644 +AD4 --- a/drivers/scsi/scsi.c +AD4 +-+-+- b/drivers/scsi/scsi.c +AD4 +AEAAQA -341,6 +-341,7 +AEAAQA static int scsi+AF8-vpd+AF8-inquiry(struct scsi+AF8-device +ACo-sdev, unsigned char +ACo-buffer, +AD4 cmd+AFs-3+AF0 +AD0 len +AD4APg 8+ADs +AD4 cmd+AFs-4+AF0 +AD0 len +ACY 0xff+ADs +AD4 cmd+AFs-5+AF0 +AD0 0+ADs /+ACo Control byte +ACo-/ +AD4 +- memset(buffer, 0x0, len)+ADs Why has this memset() call been added? Please explain this change in the patch description if you want to keep this change. +AD4 /+ACo +AD4 +ACo I'm not convinced we need to try quite this hard to get VPD, but +AD4 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c +AD4 index cc175b78b366..df9538e57dcb 100644 +AD4 --- a/drivers/scsi/sd.c +AD4 +-+-+- b/drivers/scsi/sd.c +AD4 +AEAAQA -2879,16 +-2879,14 +AEAAQA static void sd+AF8-read+AF8-app+AF8-tag+AF8-own(struct scsi+AF8-disk +ACo-sdkp, unsigned char +ACo-buffer) +AD4 +ACo sd+AF8-read+AF8-block+AF8-limits - Query disk device for preferred I/O sizes. +AD4 +ACo +AEA-sdkp: disk to query +AD4 +ACo-/ +AD4 -static void sd+AF8-read+AF8-block+AF8-limits(struct scsi+AF8-disk +ACo-sdkp) +AD4 +-static void sd+AF8-read+AF8-block+AF8-limits(struct scsi+AF8-disk +ACo-sdkp, unsigned char +ACo-buffer) +AD4 +AHs +AD4 unsigned int sector+AF8-sz +AD0 sdkp-+AD4-device-+AD4-sector+AF8-size+ADs +AD4 const int vpd+AF8-len +AD0 64+ADs +AD4 - unsigned char +ACo-buffer +AD0 kmalloc(vpd+AF8-len, GFP+AF8-KERNEL)+ADs +AD4 +AD4 - if (+ACE-buffer +AHwAfA +AD4 - /+ACo Block Limits VPD +ACo-/ +AD4 - scsi+AF8-get+AF8-vpd+AF8-page(sdkp-+AD4-device, 0xb0, buffer, vpd+AF8-len)) +AD4 - goto out+ADs +AD4 +- /+ACo Block Limits VPD +ACo-/ +AD4 +- if (scsi+AF8-get+AF8-vpd+AF8-page(sdkp-+AD4-device, 0xb0, buffer, vpd+AF8-len)) +AD4 +- return+ADs +AD4 +AD4 blk+AF8-queue+AF8-io+AF8-min(sdkp-+AD4-disk-+AD4-queue, +AD4 get+AF8-unaligned+AF8-be16(+ACY-buffer+AFs-6+AF0) +ACo sector+AF8-sz)+ADs +AD4 +AEAAQA -2902,7 +-2900,7 +AEAAQA static void sd+AF8-read+AF8-block+AF8-limits(struct scsi+AF8-disk +ACo-sdkp) +AD4 sdkp-+AD4-max+AF8-ws+AF8-blocks +AD0 (u32)get+AF8-unaligned+AF8-be64(+ACY-buffer+AFs-36+AF0)+ADs +AD4 +AD4 if (+ACE-sdkp-+AD4-lbpme) +AD4 - goto out+ADs +AD4 +- return+ADs +AD4 +AD4 lba+AF8-count +AD0 get+AF8-unaligned+AF8-be32(+ACY-buffer+AFs-20+AF0)+ADs +AD4 desc+AF8-count +AD0 get+AF8-unaligned+AF8-be32(+ACY-buffer+AFs-24+AF0)+ADs +AD4 +AEAAQA -2934,28 +-2932,21 +AEAAQA static void sd+AF8-read+AF8-block+AF8-limits(struct scsi+AF8-disk +ACo-sdkp) +AD4 sd+AF8-config+AF8-discard(sdkp, SD+AF8-LBP+AF8-DISABLE)+ADs +AD4 +AH0 +AD4 +AH0 +AD4 - +AD4 - out: +AD4 - kfree(buffer)+ADs +AD4 +AH0 I would appreciate it if the buffer length would be passed as an argument. That would make it easier to verify sd+AF8-read+AF8-block+AF8-limits() and its callers. Thanks, Bart.