From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1OA7Jc-0003df-Vh for qemu-devel@nongnu.org; Thu, 06 May 2010 16:05:01 -0400 Received: from [140.186.70.92] (port=40837 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OA7Jb-0003aM-2W for qemu-devel@nongnu.org; Thu, 06 May 2010 16:05:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OA7JT-0008MP-Jx for qemu-devel@nongnu.org; Thu, 06 May 2010 16:04:58 -0400 Received: from verein.lst.de ([213.95.11.210]:47632) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OA7JT-0008MC-A6 for qemu-devel@nongnu.org; Thu, 06 May 2010 16:04:51 -0400 Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id o46K4oWY006902 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 6 May 2010 22:04:50 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-7.2) id o46K4oc1006901 for qemu-devel@nongnu.org; Thu, 6 May 2010 22:04:50 +0200 Date: Thu, 6 May 2010 22:04:50 +0200 From: Christoph Hellwig Message-ID: <20100506200450.GB6865@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] [PATCH 2/2] parallels: use qemu block API List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Use bdrv_pwrite to access the backing device instead of pread, and convert the driver to implementing the bdrv_open method which gives it an already opened BlockDriverState for the underlying device. Signed-off-by: Christoph Hellwig Index: qemu-kevin/block/parallels.c =================================================================== --- qemu-kevin.orig/block/parallels.c 2010-05-03 13:04:37.494261748 +0200 +++ qemu-kevin/block/parallels.c 2010-05-03 13:05:55.781255810 +0200 @@ -46,7 +46,6 @@ struct parallels_header { } __attribute__((packed)); typedef struct BDRVParallelsState { - int fd; uint32_t *catalog_bitmap; int catalog_size; @@ -68,22 +67,15 @@ static int parallels_probe(const uint8_t return 0; } -static int parallels_open(BlockDriverState *bs, const char *filename, int flags) +static int parallels_open(BlockDriverState *bs, int flags) { BDRVParallelsState *s = bs->opaque; - int fd, i; + int i; struct parallels_header ph; - fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); - if (fd < 0) { - return -1; - } - bs->read_only = 1; // no write support yet - s->fd = fd; - - if (pread(fd, &ph, sizeof(ph), 0) != sizeof(ph)) + if (bdrv_pread(bs->file, 0, &ph, sizeof(ph)) != sizeof(ph)) goto fail; if (memcmp(ph.magic, HEADER_MAGIC, 16) || @@ -97,7 +89,7 @@ static int parallels_open(BlockDriverSta s->catalog_size = le32_to_cpu(ph.catalog_entries); s->catalog_bitmap = qemu_malloc(s->catalog_size * 4); - if (pread(s->fd, s->catalog_bitmap, s->catalog_size * 4, 64) != + if (bdrv_pread(bs->file, 64, s->catalog_bitmap, s->catalog_size * 4) != s->catalog_size * 4) goto fail; for (i = 0; i < s->catalog_size; i++) @@ -107,7 +99,6 @@ static int parallels_open(BlockDriverSta fail: if (s->catalog_bitmap) qemu_free(s->catalog_bitmap); - close(fd); return -1; } @@ -128,12 +119,10 @@ static int64_t seek_to_sector(BlockDrive static int parallels_read(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, int nb_sectors) { - BDRVParallelsState *s = bs->opaque; - while (nb_sectors > 0) { int64_t position = seek_to_sector(bs, sector_num); if (position >= 0) { - if (pread(s->fd, buf, 512, position) != 512) + if (bdrv_pread(bs->file, position, buf, 512) != 512) return -1; } else { memset(buf, 0, 512); @@ -149,14 +138,13 @@ static void parallels_close(BlockDriverS { BDRVParallelsState *s = bs->opaque; qemu_free(s->catalog_bitmap); - close(s->fd); } static BlockDriver bdrv_parallels = { .format_name = "parallels", .instance_size = sizeof(BDRVParallelsState), .bdrv_probe = parallels_probe, - .bdrv_file_open = parallels_open, + .bdrv_open = parallels_open, .bdrv_read = parallels_read, .bdrv_close = parallels_close, };