[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH 3/3] block: get max_transfer limit
From: |
Fam Zheng |
Subject: |
Re: [Qemu-block] [Qemu-devel] [PATCH 3/3] block: get max_transfer limit for char (scsi-generic) devices |
Date: |
Tue, 17 Jan 2017 15:04:01 +0800 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
On Mon, 01/16 22:12, Eric Farman wrote:
> Commit 6f607174 introduced a routine to get the maximum number
> of bytes for a single I/O transfer for block devices, however
> scsi generic devices are character devices, not block. Add
> a condition for this, with slightly different logic because
> the value is already in bytes, and need not be converted from
> blocks as happens for block devices.
>
> Signed-off-by: Eric Farman <address@hidden>
> ---
> block/file-posix.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/block/file-posix.c b/block/file-posix.c
> index 2115155..c0843c2 100644
> --- a/block/file-posix.c
> +++ b/block/file-posix.c
> @@ -679,6 +679,13 @@ static void raw_refresh_limits(BlockDriverState *bs,
> Error **errp)
> if (ret > 0 && ret <= BDRV_REQUEST_MAX_SECTORS) {
> bs->bl.max_transfer = pow2floor(ret << BDRV_SECTOR_BITS);
> }
> + } else if (S_ISCHR(st.st_mode)) {
> + /* sg returns transfer length in bytes already */
> + int ret = hdev_get_max_transfer_length(bs, s->fd);
> + if (ret > 0 &&
> + (ret >> BDRV_SECTOR_BITS) <= BDRV_REQUEST_MAX_SECTORS) {
> + bs->bl.max_transfer = pow2floor(ret);
> + }
Please keep the sectors/bytes quirk in hdev_get_max_transfer_length and always
return bytes from there.
Fam
> }
> }
>
> --
> 2.8.4
>
>