* [Qemu-devel] [PATCH 1/2] parallels: use pread
@ 2010-05-06 20:04 Christoph Hellwig
2010-05-07 10:12 ` Kevin Wolf
0 siblings, 1 reply; 2+ messages in thread
From: Christoph Hellwig @ 2010-05-06 20:04 UTC (permalink / raw)
To: qemu-devel
Use pread instead of lseek + read in preparation of using the qemu
block API.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: qemu-kevin/block/parallels.c
===================================================================
--- qemu-kevin.orig/block/parallels.c 2010-05-06 21:59:25.809255629 +0200
+++ qemu-kevin/block/parallels.c 2010-05-06 22:01:11.343284544 +0200
@@ -83,7 +83,7 @@ static int parallels_open(BlockDriverSta
s->fd = fd;
- if (read(fd, &ph, sizeof(ph)) != sizeof(ph))
+ if (pread(fd, &ph, sizeof(ph), 0) != sizeof(ph))
goto fail;
if (memcmp(ph.magic, HEADER_MAGIC, 16) ||
@@ -93,14 +93,11 @@ static int parallels_open(BlockDriverSta
bs->total_sectors = le32_to_cpu(ph.nb_sectors);
- if (lseek(s->fd, 64, SEEK_SET) != 64)
- goto fail;
-
s->tracks = le32_to_cpu(ph.tracks);
s->catalog_size = le32_to_cpu(ph.catalog_entries);
s->catalog_bitmap = qemu_malloc(s->catalog_size * 4);
- if (read(s->fd, s->catalog_bitmap, s->catalog_size * 4) !=
+ if (pread(s->fd, s->catalog_bitmap, s->catalog_size * 4, 64) !=
s->catalog_size * 4)
goto fail;
for (i = 0; i < s->catalog_size; i++)
@@ -114,28 +111,18 @@ fail:
return -1;
}
-static inline int seek_to_sector(BlockDriverState *bs, int64_t sector_num)
+static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num)
{
BDRVParallelsState *s = bs->opaque;
uint32_t index, offset;
- uint64_t position;
index = sector_num / s->tracks;
offset = sector_num % s->tracks;
- // not allocated
+ /* not allocated */
if ((index > s->catalog_size) || (s->catalog_bitmap[index] == 0))
return -1;
-
- position = (uint64_t)(s->catalog_bitmap[index] + offset) * 512;
-
-// fprintf(stderr, "sector: %llx index=%x offset=%x pointer=%x position=%x\n",
-// sector_num, index, offset, s->catalog_bitmap[index], position);
-
- if (lseek(s->fd, position, SEEK_SET) != position)
- return -1;
-
- return 0;
+ return (uint64_t)(s->catalog_bitmap[index] + offset) * 512;
}
static int parallels_read(BlockDriverState *bs, int64_t sector_num,
@@ -144,11 +131,13 @@ static int parallels_read(BlockDriverSta
BDRVParallelsState *s = bs->opaque;
while (nb_sectors > 0) {
- if (!seek_to_sector(bs, sector_num)) {
- if (read(s->fd, buf, 512) != 512)
- return -1;
- } else
+ int64_t position = seek_to_sector(bs, sector_num);
+ if (position >= 0) {
+ if (pread(s->fd, buf, 512, position) != 512)
+ return -1;
+ } else {
memset(buf, 0, 512);
+ }
nb_sectors--;
sector_num++;
buf += 512;
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] parallels: use pread
2010-05-06 20:04 [Qemu-devel] [PATCH 1/2] parallels: use pread Christoph Hellwig
@ 2010-05-07 10:12 ` Kevin Wolf
0 siblings, 0 replies; 2+ messages in thread
From: Kevin Wolf @ 2010-05-07 10:12 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: qemu-devel
Am 06.05.2010 22:04, schrieb Christoph Hellwig:
>
> Use pread instead of lseek + read in preparation of using the qemu
> block API.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Thanks, applied both patches to the block branch.
We'll probably have to live with the fact that we can't test changes to
the parallels driver and need to trust patch review.
Kevin
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-05-07 13:23 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-06 20:04 [Qemu-devel] [PATCH 1/2] parallels: use pread Christoph Hellwig
2010-05-07 10:12 ` Kevin Wolf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).