From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:52252) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R22N0-0000Hq-AO for qemu-devel@nongnu.org; Fri, 09 Sep 2011 10:47:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R22My-0004sQ-DH for qemu-devel@nongnu.org; Fri, 09 Sep 2011 10:47:54 -0400 Received: from mail-vx0-f173.google.com ([209.85.220.173]:47525) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R22My-0004qX-7z for qemu-devel@nongnu.org; Fri, 09 Sep 2011 10:47:52 -0400 Received: by mail-vx0-f173.google.com with SMTP id 15so849328vxj.4 for ; Fri, 09 Sep 2011 07:47:51 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Fri, 9 Sep 2011 16:47:45 +0200 Message-Id: <1315579665-6935-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH] scsi-generic: fix get_stream_blocksize List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org The computation of the block size is completely broken; mode page 0 is vendor specific. Use the right SCSI command instead. Signed-off-by: Paolo Bonzini --- hw/scsi-generic.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index cb5d4f1..3202e5a 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -343,7 +343,7 @@ static int get_blocksize(BlockDriverState *bdrv) if (ret < 0) return -1; - return (buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7]; + return ldl_be_p(&buf[4]); } static int get_stream_blocksize(BlockDriverState *bdrv) @@ -356,8 +356,7 @@ static int get_stream_blocksize(BlockDriverState *bdrv) memset(cmd, 0, sizeof(cmd)); memset(buf, 0, sizeof(buf)); - cmd[0] = MODE_SENSE; - cmd[4] = sizeof(buf); + cmd[0] = READ_BLOCK_LIMITS; memset(&io_header, 0, sizeof(io_header)); io_header.interface_id = 'S'; @@ -374,7 +373,7 @@ static int get_stream_blocksize(BlockDriverState *bdrv) if (ret < 0) return -1; - return (buf[9] << 16) | (buf[10] << 8) | buf[11]; + return ldl_be_p(&buf[0]) & 0xffffff; } static void scsi_generic_reset(DeviceState *dev) -- 1.7.6