From patchwork Fri May 14 17:10:37 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Wolf X-Patchwork-Id: 52632 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id EC059B7D68 for ; Sat, 15 May 2010 03:14:10 +1000 (EST) Received: from localhost ([127.0.0.1]:57897 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OCySc-00013a-FN for incoming@patchwork.ozlabs.org; Fri, 14 May 2010 13:14:06 -0400 Received: from [140.186.70.92] (port=41255 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OCyQH-0000Tp-Vu for qemu-devel@nongnu.org; Fri, 14 May 2010 13:11:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OCyQD-0001sP-S0 for qemu-devel@nongnu.org; Fri, 14 May 2010 13:11:40 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23899) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OCyQD-0001s6-Bk for qemu-devel@nongnu.org; Fri, 14 May 2010 13:11:37 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o4EHBNBc031242 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 14 May 2010 13:11:23 -0400 Received: from localhost.localdomain (vpn1-7-82.ams2.redhat.com [10.36.7.82]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o4EHBFWX004751; Fri, 14 May 2010 13:11:21 -0400 From: Kevin Wolf To: anthony@codemonkey.ws Date: Fri, 14 May 2010 19:10:37 +0200 Message-Id: <1273857055-26715-4-git-send-email-kwolf@redhat.com> In-Reply-To: <1273857055-26715-1-git-send-email-kwolf@redhat.com> References: <1273857055-26715-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. Cc: kwolf@redhat.com, qemu-devel@nongnu.org Subject: [Qemu-devel] [PATCH 03/21] cloop: use pread X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Christoph Hellwig Use pread instead of lseek + read in preparation of using the qemu block API. Signed-off-by: Christoph Hellwig Signed-off-by: Kevin Wolf --- block/cloop.c | 32 +++++++++++++++++--------------- 1 files changed, 17 insertions(+), 15 deletions(-) diff --git a/block/cloop.c b/block/cloop.c index e4f995b..9fe2a42 100644 --- a/block/cloop.c +++ b/block/cloop.c @@ -62,23 +62,22 @@ static int cloop_open(BlockDriverState *bs, const char *filename, int flags) bs->read_only = 1; /* read header */ - if(lseek(s->fd,128,SEEK_SET)<0) { -cloop_close: - close(s->fd); - return -1; + if (pread(s->fd, &s->block_size, 4, 128) < 4) { + goto cloop_close; } - if(read(s->fd,&s->block_size,4)<4) - goto cloop_close; - s->block_size=be32_to_cpu(s->block_size); - if(read(s->fd,&s->n_blocks,4)<4) - goto cloop_close; - s->n_blocks=be32_to_cpu(s->n_blocks); + s->block_size = be32_to_cpu(s->block_size); + + if (pread(s->fd, &s->n_blocks, 4, 128 + 4) < 4) { + goto cloop_close; + } + s->n_blocks = be32_to_cpu(s->n_blocks); /* read offsets */ - offsets_size=s->n_blocks*sizeof(uint64_t); - s->offsets=(uint64_t*)qemu_malloc(offsets_size); - if(read(s->fd,s->offsets,offsets_size)n_blocks * sizeof(uint64_t); + s->offsets = qemu_malloc(offsets_size); + if (pread(s->fd, s->offsets, offsets_size, 128 + 4 + 4) < offsets_size) { goto cloop_close; + } for(i=0;in_blocks;i++) { s->offsets[i]=be64_to_cpu(s->offsets[i]); if(i>0) { @@ -98,6 +97,10 @@ cloop_close: s->sectors_per_block = s->block_size/512; bs->total_sectors = s->n_blocks*s->sectors_per_block; return 0; + +cloop_close: + close(s->fd); + return -1; } static inline int cloop_read_block(BDRVCloopState *s,int block_num) @@ -106,8 +109,7 @@ static inline int cloop_read_block(BDRVCloopState *s,int block_num) int ret; uint32_t bytes = s->offsets[block_num+1]-s->offsets[block_num]; - lseek(s->fd, s->offsets[block_num], SEEK_SET); - ret = read(s->fd, s->compressed_block, bytes); + ret = pread(s->fd, s->compressed_block, bytes, s->offsets[block_num]); if (ret != bytes) return -1;