From: Markus Armbruster <armbru@redhat.com>
To: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, thuth@linux.vnet.ibm.com,
borntraeger@de.ibm.com,
Public KVM Mailing List <qemu-devel@nongnu.org>,
mihajlov@linux.vnet.ibm.com, dahi@linux.vnet.ibm.com,
stefanha@redhat.com, cornelia.huck@de.ibm.com,
pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 1/5] block: add bdrv functions for geometry and blocksize
Date: Tue, 16 Dec 2014 17:43:02 +0100 [thread overview]
Message-ID: <878ui77dgp.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1418728219-40595-2-git-send-email-tumanova@linux.vnet.ibm.com> (Ekaterina Tumanova's message of "Tue, 16 Dec 2014 12:10:15 +0100")
Ekaterina Tumanova <tumanova@linux.vnet.ibm.com> writes:
> Add driver functions for geometry and blocksize detection
>
> Signed-off-by: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
> ---
> block.c | 34 ++++++++++++++++++++++++++++++++++
> include/block/block.h | 13 +++++++++++++
> include/block/block_int.h | 15 +++++++++++++++
> 3 files changed, 62 insertions(+)
>
> diff --git a/block.c b/block.c
> index 4165d42..93409f5 100644
> --- a/block.c
> +++ b/block.c
> @@ -548,6 +548,40 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
> }
> }
>
> +/**
> + * Get @bs's logical and physical block size, store them in @bsz.
> + * @bs must not be empty.
> + */
> +void bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
> +{
> + BlockDriver *drv = bs->drv;
> +
> + assert(drv != NULL);
> + if (drv->bdrv_probe_blocksizes &&
> + !drv->bdrv_probe_blocksizes(bs, bsz)) {
> + return;
> + }
> + bsz->log = BDRV_SECTOR_SIZE;
> + bsz->phys = BDRV_SECTOR_SIZE;
> +}
> +
> +/**
> + * Try to get @bs's geometry (cyls, heads, sectos)
s/sectos/sectors/
Since we're changing this comment anyway: I like my function contracts
to state restrictions prominently, and therefore prefer "@bs must not be
empty" on its own line, right here.
> + * On success, store them in @geo struct and return 0.
> + * On failure return -errno. @bs must not be empty.
> + */
> +int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
> +{
> + BlockDriver *drv = bs->drv;
> +
> + assert(drv != NULL);
> + if (drv->bdrv_probe_geometry) {
> + return drv->bdrv_probe_geometry(bs, geo);
> + }
> +
> + return -ENOTSUP;
> +}
> +
> /*
> * Create a uniquely-named empty temporary file.
> * Return 0 upon success, otherwise a negative errno value.
> diff --git a/include/block/block.h b/include/block/block.h
> index 6e7275d..14ac3b1 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
> @@ -60,6 +60,17 @@ typedef enum {
> BDRV_REQ_MAY_UNMAP = 0x4,
> } BdrvRequestFlags;
>
> +typedef struct BlockSizes {
> + uint32_t phys;
> + uint32_t log;
> +} BlockSizes;
> +
> +typedef struct HDGeometry {
> + uint32_t heads;
> + uint32_t sectors;
> + uint32_t cylinders;
> +} HDGeometry;
> +
> #define BDRV_O_RDWR 0x0002
> #define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */
> #define BDRV_O_TEMPORARY 0x0010 /* delete the file after use */
> @@ -539,6 +550,8 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs);
> * the old #AioContext is not executing.
> */
> void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context);
> +void bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz);
> +int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo);
>
> void bdrv_io_plug(BlockDriverState *bs);
> void bdrv_io_unplug(BlockDriverState *bs);
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index 06a21dd..c2c5f0e 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -273,6 +273,21 @@ struct BlockDriver {
> void (*bdrv_io_unplug)(BlockDriverState *bs);
> void (*bdrv_flush_io_queue)(BlockDriverState *bs);
>
> + /**
> + * Try to get @bs's logical and physical block size.
> + * On success, store them in @bsz and return zero.
> + * On failure, return negative errno.
> + */
> + int (*bdrv_probe_blocksizes)(BlockDriverState *bs, BlockSizes *bsz);
> + /**
> + * Try to get @bs's geometry (cyls, heads, sectos)
s/sectos/sectors/
> + * On success, store them in @geo and return 0.
> + * On failure return -errno.
> + * Only drivers that want to override guest geometry implement this
> + * callback; see hd_geometry_guess().
> + */
> + int (*bdrv_probe_geometry)(BlockDriverState *bs, HDGeometry *geo);
> +
> QLIST_ENTRY(BlockDriver) list;
> };
next prev parent reply other threads:[~2014-12-16 16:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-16 11:10 [Qemu-devel] [PATCH v4 0/5] Geometry and blocksize detection for backing devices Ekaterina Tumanova
2014-12-16 11:10 ` [Qemu-devel] [PATCH v4 1/5] block: add bdrv functions for geometry and blocksize Ekaterina Tumanova
2014-12-16 16:43 ` Markus Armbruster [this message]
2014-12-17 15:26 ` David Hildenbrand
2014-12-16 11:10 ` [Qemu-devel] [PATCH v4 2/5] raw-posix: Factor block size detection out of raw_probe_alignment() Ekaterina Tumanova
2014-12-16 16:55 ` Markus Armbruster
2014-12-16 11:10 ` [Qemu-devel] [PATCH v4 3/5] block: Add driver methods to probe blocksizes and geometry Ekaterina Tumanova
2014-12-16 17:02 ` Markus Armbruster
2014-12-16 11:10 ` [Qemu-devel] [PATCH v4 4/5] block-backend: Add wrappers for blocksizes and geometry probing Ekaterina Tumanova
2014-12-16 11:10 ` [Qemu-devel] [PATCH v4 5/5] BlockConf: Call backend functions to detect geometry and blocksizes Ekaterina Tumanova
2014-12-16 11:38 ` [Qemu-devel] [PATCH v4 0/5] Geometry and blocksize detection for backing devices Christian Borntraeger
2014-12-16 17:05 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878ui77dgp.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=dahi@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=mihajlov@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=thuth@linux.vnet.ibm.com \
--cc=tumanova@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.