From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=55108 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ODpTH-0002MG-Ma for qemu-devel@nongnu.org; Sun, 16 May 2010 21:50:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1ODpTG-0003QE-3z for qemu-devel@nongnu.org; Sun, 16 May 2010 21:50:19 -0400 Received: from smtp108.sbc.mail.gq1.yahoo.com ([67.195.14.111]:22438) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1ODpTF-0003Py-SM for qemu-devel@nongnu.org; Sun, 16 May 2010 21:50:18 -0400 From: "Nicholas A. Bellinger" In-Reply-To: <20100516132917.GA27075@lst.de> References: <1273930252-12673-1-git-send-email-nab@linux-iscsi.org> <20100516132917.GA27075@lst.de> Content-Type: multipart/mixed; boundary="=-7MXPB43m7OrdCDJc2Fyl" Date: Sun, 16 May 2010 18:50:06 -0700 Message-Id: <1274061006.7348.14.camel@haakon2.linux-iscsi.org> Mime-Version: 1.0 Subject: [Qemu-devel] Re: [PATCH 1/2] [block]: Fix scsi-generic breakage in find_image_format() List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Christoph Hellwig Cc: Kevin Wolf , qemu-devel , Gerd Hoffmann , kvm-devel , Hannes Reinecke --=-7MXPB43m7OrdCDJc2Fyl Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sun, 2010-05-16 at 15:29 +0200, Christoph Hellwig wrote: > On Sat, May 15, 2010 at 06:30:52AM -0700, Nicholas A. Bellinger wrote: > > From: Nicholas Bellinger > > > > This patch adds a special BlockDriverState->sg check in block.c:find_image_format() > > after bdrv_file_open() -> block/raw-posix.c:hdev_open() has been called to determine > > if we are dealing with a Linux host scsi-generic device or not. > > > > The patch then returns the BlockDriver * from find_protocol(), skipping the subsequent > > bdrv_read() and rest of find_image_format(). > > That's not quite correct as we don't want to expose formats directly. > Returning > > bdrv_find_format("raw"); > > should fix it for now, Ahh, that makes more sense.. Attached is updated patch #1: [PATCH 1/2] [block]: Make find_image_format() return 'raw' BlockDriver for SG_IO devices > although I really hate having these special > cases in block.c. Indeed having BlockDriverState->sg kinda feels kinda like a hack to begin with, but it appears this is currently QEMU's way of telling block code to disable internal SCSI CDB emulation for devices. Best, --nab --=-7MXPB43m7OrdCDJc2Fyl Content-Disposition: attachment; filename=0001--block-Make-find_image_format-return-raw-Block.patch Content-Type: application/mbox; name=0001--block-Make-find_image_format-return-raw-Block.patch Content-Transfer-Encoding: 7bit >>From 3d858cb1070e746b58608d91da6dc3d48a568e06 Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger Date: Sun, 16 May 2010 18:24:34 -0700 Subject: [PATCH 1/2] [block]: Make find_image_format() return 'raw' BlockDriver for SG_IO devices This patch adds a special BlockDriverState->sg check in block.c:find_image_format() after bdrv_file_open() -> block/raw-posix.c:hdev_open() has been called to determine if we are dealing with a Linux host scsi-generic device. The patch then returns the BlockDriver * from bdrv_find_format("raw"), skipping the subsequent bdrv_read() and rest of find_image_format(). Signed-off-by: Nicholas A. Bellinger --- block.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index 48305b7..f419ee6 100644 --- a/block.c +++ b/block.c @@ -332,6 +332,11 @@ static BlockDriver *find_image_format(const char *filename) ret = bdrv_file_open(&bs, filename, 0); if (ret < 0) return NULL; + + /* Return the raw BlockDriver * to scsi-generic devices */ + if (bs->sg) + return bdrv_find_format("raw"); + ret = bdrv_pread(bs, 0, buf, sizeof(buf)); bdrv_delete(bs); if (ret < 0) { -- 1.5.6.5 --=-7MXPB43m7OrdCDJc2Fyl--