From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=38292 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OO6Kk-0008R5-Ka for qemu-devel@nongnu.org; Mon, 14 Jun 2010 05:52:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OO6D1-0007gb-Nl for qemu-devel@nongnu.org; Mon, 14 Jun 2010 05:44:00 -0400 Received: from smtp110.sbc.mail.gq1.yahoo.com ([67.195.14.95]:30352) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1OO6D1-0007gR-F4 for qemu-devel@nongnu.org; Mon, 14 Jun 2010 05:43:59 -0400 From: "Nicholas A. Bellinger" Date: Mon, 14 Jun 2010 02:44:24 -0700 Message-Id: <1276508664-3043-1-git-send-email-nab@linux-iscsi.org> Subject: [Qemu-devel] [PATCH 2/5] [block]: Add BSG qemu_open() in block/raw.c:raw_open() List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann , Kevin Wolf , FUJITA Tomonori Cc: kvm-devel , qemu-devel , Nicholas Bellinger , Hannes Reinecke , Christoph Hellwig , Paul Brook From: Nicholas Bellinger This patch adds a BSG specific qemu_open() call in block/raw.c:raw_open() that saves the opened file descriptor for BSG AIO into BlockDriverState->fd. It also adds the reverse close() call to block/raw.c:raw_close() Signed-off-by: Nicholas A. Bellinger --- block/raw.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/block/raw.c b/block/raw.c index 4406b8c..7820c78 100644 --- a/block/raw.c +++ b/block/raw.c @@ -5,7 +5,25 @@ static int raw_open(BlockDriverState *bs, int flags) { + int fd, ret; + bs->sg = bs->file->sg; + /* + * scsi-generic and other raw types do not call qemu_open() + */ + if (bs->sg != BDS_BSG) + return 0; + /* + * Obtain a file descriptor for the underlying BSG device for AIO w/ iovecs + */ + fd = qemu_open(bs->filename, flags, 0644); + if (fd < 0) { + ret = -errno; + if (ret == -EROFS) + ret = -EACCES; + return ret; + } + bs->fd = fd; return 0; } @@ -37,6 +55,8 @@ static BlockDriverAIOCB *raw_aio_writev(BlockDriverState *bs, static void raw_close(BlockDriverState *bs) { + if (bs->fd > 0) + close(bs->fd); } static void raw_flush(BlockDriverState *bs) -- 1.5.6.5