From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59011) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XrlHA-0006eA-7p for qemu-devel@nongnu.org; Fri, 21 Nov 2014 05:17:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XrlH1-000155-4N for qemu-devel@nongnu.org; Fri, 21 Nov 2014 05:17:16 -0500 Received: from e06smtp15.uk.ibm.com ([195.75.94.111]:48316) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XrlH0-00014w-S1 for qemu-devel@nongnu.org; Fri, 21 Nov 2014 05:17:07 -0500 Received: from /spool/local by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 21 Nov 2014 10:17:05 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 342822190056 for ; Fri, 21 Nov 2014 10:16:36 +0000 (GMT) Received: from d06av11.portsmouth.uk.ibm.com (d06av11.portsmouth.uk.ibm.com [9.149.37.252]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id sALAH3xd42598450 for ; Fri, 21 Nov 2014 10:17:03 GMT Received: from d06av11.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av11.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id sALAH2o2028936 for ; Fri, 21 Nov 2014 03:17:02 -0700 Message-ID: <546F111E.50808@de.ibm.com> Date: Fri, 21 Nov 2014 11:17:02 +0100 From: Christian Borntraeger MIME-Version: 1.0 References: <1416392276-10408-1-git-send-email-tumanova@linux.vnet.ibm.com> <1416392276-10408-3-git-send-email-tumanova@linux.vnet.ibm.com> In-Reply-To: <1416392276-10408-3-git-send-email-tumanova@linux.vnet.ibm.com> Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 2/6] geometry: Detect blocksize via ioctls in separate static functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Ekaterina Tumanova , Public KVM Mailing List Cc: kwolf@redhat.com, armbru@redhat.com, mihajlov@linux.vnet.ibm.com, dahi@linux.vnet.ibm.com, stefanha@redhat.com, cornelia.huck@de.ibm.com, pbonzini@redhat.com Am 19.11.2014 um 11:17 schrieb Ekaterina Tumanova: > Move the IOCTL calls that detect logical blocksize from raw_probe_alignment > into separate function (probe_logical_blocksize). > Introduce function which detect physical blocksize via IOCTL > (probe_physical_blocksize). > Both functions will be used in the next patch. > > Signed-off-by: Ekaterina Tumanova >>From what I can tell this should be a no-op for raw_probe_alignment. probe_physical_blocksize looks also good. When this patch is applied stand-alone, gcc will complain about a defined but unused function, though. So we might want to move this function into patch 3 or just add an __attribute__((unused)) here (and remove that in patch 3). Or just leave it as is. Otherwise Reviewed-by: Christian Borntraeger > --- > block/raw-posix.c | 58 +++++++++++++++++++++++++++++++++++++------------------ > 1 file changed, 39 insertions(+), 19 deletions(-) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index e100ae2..45f1d79 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -223,50 +223,70 @@ static int raw_normalize_devicepath(const char **filename) > } > #endif > > -static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp) > +static unsigned int probe_logical_blocksize(BlockDriverState *bs, int fd) > { > - BDRVRawState *s = bs->opaque; > - char *buf; > - unsigned int sector_size; > - > - /* For /dev/sg devices the alignment is not really used. > - With buffered I/O, we don't have any restrictions. */ > - if (bs->sg || !s->needs_alignment) { > - bs->request_alignment = 1; > - s->buf_align = 1; > - return; > - } > + unsigned int sector_size = 0; > > /* Try a few ioctls to get the right size */ > - bs->request_alignment = 0; > - s->buf_align = 0; > - > #ifdef BLKSSZGET > if (ioctl(fd, BLKSSZGET, §or_size) >= 0) { > - bs->request_alignment = sector_size; > + return sector_size; > } > #endif > #ifdef DKIOCGETBLOCKSIZE > if (ioctl(fd, DKIOCGETBLOCKSIZE, §or_size) >= 0) { > - bs->request_alignment = sector_size; > + return sector_size; > } > #endif > #ifdef DIOCGSECTORSIZE > if (ioctl(fd, DIOCGSECTORSIZE, §or_size) >= 0) { > - bs->request_alignment = sector_size; > + return sector_size; > } > #endif > #ifdef CONFIG_XFS > if (s->is_xfs) { > struct dioattr da; > if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) { > - bs->request_alignment = da.d_miniosz; > + sector_size = da.d_miniosz; > /* The kernel returns wrong information for d_mem */ > /* s->buf_align = da.d_mem; */ > + return sector_size; > } > } > #endif > > + return 0; > +} > + > +static unsigned int probe_physical_blocksize(BlockDriverState *bs, int fd) > +{ > + unsigned int blk_size = 0; > +#ifdef BLKPBSZGET > + if (ioctl(fd, BLKPBSZGET, &blk_size) >= 0) { > + return blk_size; > + } > +#endif > + > + return 0; > +} > + > +static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp) > +{ > + BDRVRawState *s = bs->opaque; > + char *buf; > + > + /* For /dev/sg devices the alignment is not really used. > + With buffered I/O, we don't have any restrictions. */ > + if (bs->sg || !s->needs_alignment) { > + bs->request_alignment = 1; > + s->buf_align = 1; > + return; > + } > + > + s->buf_align = 0; > + /* Let's try to use the logical blocksize for the alignment. */ > + bs->request_alignment = probe_logical_blocksize(bs, fd); > + > /* If we could not get the sizes so far, we can only guess them */ > if (!s->buf_align) { > size_t align; >