[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 3/5] block: Add driver methods to probe block
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v4 3/5] block: Add driver methods to probe blocksizes and geometry |
Date: |
Tue, 16 Dec 2014 18:02:15 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Ekaterina Tumanova <address@hidden> writes:
> Introduce driver methods of defining disk blocksizes (physical and
> logical) and hard drive geometry.
> Methods are only implemented for "host_device". For "raw" devices
> driver calls child's method.
>
> For now geometry detection will only work for DASD devices. To check
> that a local check_for_dasd function was introduced. It calls BIODASDINFO2
> ioctl and returns its rc.
>
> Blocksizes detection function will probe sizes for DASD devices and
> set default for other devices.
>
> Signed-off-by: Ekaterina Tumanova <address@hidden>
> ---
> block/raw-posix.c | 97
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> block/raw_bsd.c | 14 ++++++++
> 2 files changed, 111 insertions(+)
>
> diff --git a/block/raw-posix.c b/block/raw-posix.c
> index 38172ca..e1e7b29 100644
> --- a/block/raw-posix.c
> +++ b/block/raw-posix.c
> @@ -56,6 +56,7 @@
> #include <linux/cdrom.h>
> #include <linux/fd.h>
> #include <linux/fs.h>
> +#include <linux/hdreg.h>
> #ifndef FS_NOCOW_FL
> #define FS_NOCOW_FL 0x00800000 /* Do not cow file */
> #endif
> @@ -90,6 +91,10 @@
> #include <xfs/xfs.h>
> #endif
>
> +#ifdef __s390__
> +#include <asm/dasd.h>
> +#endif
> +
> //#define DEBUG_FLOPPY
>
> //#define DEBUG_BLOCK
> @@ -238,6 +243,23 @@ static int probe_logical_blocksize(int fd, unsigned int
> *sector_size)
> #undef SECTOR_SIZE
> }
>
> +/**
> + * Get physical block size of @fd.
> + * On success, store it in @blk_size and return 0.
> + * On failure, return -errno.
> + */
> +static int probe_physical_blocksize(int fd, unsigned int *blk_size)
> +{
> +#ifdef BLKPBSZGET
> + if (ioctl(fd, BLKPBSZGET, blk_size) < 0) {
> + return -errno;
> + }
> + return 0;
> +#else
> + return -ENOTSUP;
> +#endif
> +}
> +
> static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
> {
> BDRVRawState *s = bs->opaque;
> @@ -660,6 +682,79 @@ static void raw_refresh_limits(BlockDriverState *bs,
> Error **errp)
> bs->bl.opt_mem_alignment = s->buf_align;
> }
>
> +static int check_for_dasd(int fd)
> +{
> +#ifdef BIODASDINFO2
> + struct dasd_information2_t info = {0};
> +
> + return ioctl(fd, BIODASDINFO2, &info);
> +#else
> + return -ENOTSUP;
> +#endif
> +}
This function is confused about its return value: 0/-1 vs. 0/-errno.
Please return -1 instead of -ENOTSUP, or replace it by an is_dasd()
returning bool.
[...]
- [Qemu-devel] [PATCH v4 0/5] Geometry and blocksize detection for backing devices., Ekaterina Tumanova, 2014/12/16
- [Qemu-devel] [PATCH v4 1/5] block: add bdrv functions for geometry and blocksize, Ekaterina Tumanova, 2014/12/16
- [Qemu-devel] [PATCH v4 2/5] raw-posix: Factor block size detection out of raw_probe_alignment(), Ekaterina Tumanova, 2014/12/16
- [Qemu-devel] [PATCH v4 3/5] block: Add driver methods to probe blocksizes and geometry, Ekaterina Tumanova, 2014/12/16
- Re: [Qemu-devel] [PATCH v4 3/5] block: Add driver methods to probe blocksizes and geometry,
Markus Armbruster <=
- [Qemu-devel] [PATCH v4 5/5] BlockConf: Call backend functions to detect geometry and blocksizes, Ekaterina Tumanova, 2014/12/16
- [Qemu-devel] [PATCH v4 4/5] block-backend: Add wrappers for blocksizes and geometry probing, Ekaterina Tumanova, 2014/12/16
- Re: [Qemu-devel] [PATCH v4 0/5] Geometry and blocksize detection for backing devices., Christian Borntraeger, 2014/12/16
- Re: [Qemu-devel] [PATCH v4 0/5] Geometry and blocksize detection for backing devices., Markus Armbruster, 2014/12/16