From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org, kwolf@redhat.com, mreitz@redhat.com
Cc: qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/2] raw-posix: Fetch max sectors for host block device from sysfs
Date: Thu, 2 Jun 2016 14:52:34 +0800 [thread overview]
Message-ID: <20160602065234.GC7864@ad.usersys.redhat.com> (raw)
In-Reply-To: <1464243305-10661-2-git-send-email-famz@redhat.com>
On Thu, 05/26 14:15, Fam Zheng wrote:
> This is sometimes a useful value we should count in.
Kevin, Max, could you review this please?
Fam
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
> block/raw-posix.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/block/raw-posix.c b/block/raw-posix.c
> index a4f5a1b..d3796ad 100644
> --- a/block/raw-posix.c
> +++ b/block/raw-posix.c
> @@ -729,9 +729,56 @@ static void raw_reopen_abort(BDRVReopenState *state)
> state->opaque = NULL;
> }
>
> +static int hdev_get_max_transfer_length(dev_t dev)
> +{
> + int ret;
> + int fd;
> + char *path;
> + const char *end;
> + char buf[32];
> + long len;
> +
> + path = g_strdup_printf("/sys/dev/block/%u:%u/queue/max_sectors_kb",
> + major(dev), minor(dev));
> + fd = open(path, O_RDONLY);
> + if (fd < 0) {
> + ret = -errno;
> + goto out;
> + }
> + ret = read(fd, buf, sizeof(buf));
> + if (ret < 0) {
> + ret = -errno;
> + goto out;
> + } else if (ret == 0) {
> + ret = -EIO;
> + goto out;
> + }
> + buf[ret] = 0;
> + /* The file is ended with '\n', pass 'end' to accept that. */
> + ret = qemu_strtol(buf, &end, 10, &len);
> + if (ret == 0 && end && *end == '\n') {
> + ret = len * 1024 / BDRV_SECTOR_SIZE;
> + }
> +
> + close(fd);
> +out:
> + g_free(path);
> + return ret;
> +}
> +
> static void raw_refresh_limits(BlockDriverState *bs, Error **errp)
> {
> BDRVRawState *s = bs->opaque;
> + struct stat st;
> +
> + if (!fstat(s->fd, &st)) {
> + if (S_ISBLK(st.st_mode)) {
> + int ret = hdev_get_max_transfer_length(st.st_rdev);
> + if (ret >= 0) {
> + bs->bl.max_transfer_length = ret;
> + }
> + }
> + }
>
> raw_probe_alignment(bs, s->fd, errp);
> bs->bl.min_mem_alignment = s->buf_align;
> --
> 2.8.2
>
>
next prev parent reply other threads:[~2016-06-02 6:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-26 6:15 [Qemu-devel] [PATCH 0/2] block: Expose host block dev I/O size limit in scsi-block/scsi-generic Fam Zheng
2016-05-26 6:15 ` [Qemu-devel] [PATCH 1/2] raw-posix: Fetch max sectors for host block device from sysfs Fam Zheng
2016-06-02 6:52 ` Fam Zheng [this message]
2016-06-02 12:30 ` Max Reitz
2016-06-02 12:54 ` Kevin Wolf
2016-06-03 1:46 ` Fam Zheng
2016-05-26 6:15 ` [Qemu-devel] [PATCH 2/2] scsi-generic: Merge block max xfer len in INQUIRY response Fam Zheng
2016-05-26 7:59 ` Paolo Bonzini
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=20160602065234.GC7864@ad.usersys.redhat.com \
--to=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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.