From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Nicholas A. Bellinger" Subject: Re: [PATCH 1/2] [block]: Fix scsi-generic breakage in find_image_format() Date: Sun, 16 May 2010 18:50:06 -0700 Message-ID: <1274061006.7348.14.camel@haakon2.linux-iscsi.org> References: <1273930252-12673-1-git-send-email-nab@linux-iscsi.org> <20100516132917.GA27075@lst.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-7MXPB43m7OrdCDJc2Fyl" Cc: Kevin Wolf , Gerd Hoffmann , Hannes Reinecke , kvm-devel , qemu-devel To: Christoph Hellwig Return-path: Received: from smtp108.sbc.mail.gq1.yahoo.com ([67.195.14.111]:22434 "HELO smtp108.sbc.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751763Ab0EQBuP (ORCPT ); Sun, 16 May 2010 21:50:15 -0400 In-Reply-To: <20100516132917.GA27075@lst.de> Sender: kvm-owner@vger.kernel.org List-ID: --=-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--