From: Stefan Hajnoczi <stefanha@redhat.com>
To: Sam Li <faithilikerun@gmail.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, hare@suse.de,
dmitry.fomichev@wdc.com, Kevin Wolf <kwolf@redhat.com>,
damien.lemoal@opensource.wdc.com, Eric Blake <eblake@redhat.com>,
Fam Zheng <fam@euphon.net>, Markus Armbruster <armbru@redhat.com>,
Hanna Reitz <hreitz@redhat.com>
Subject: Re: [PATCH v6 3/8] file-posix: introduce get_sysfs_str_val for device zoned model
Date: Sat, 6 Aug 2022 08:50:37 -0400 [thread overview]
Message-ID: <Yu5jnXJG3PBWcrYg@fedora> (raw)
In-Reply-To: <20220805075751.77499-4-faithilikerun@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3167 bytes --]
On Fri, Aug 05, 2022 at 03:57:46PM +0800, Sam Li wrote:
> Use sysfs attribute files to get the string value of device
> zoned model. Then get_sysfs_zoned_model can convert it to
> BlockZoneModel type in QEMU.
>
> Signed-off-by: Sam Li <faithilikerun@gmail.com>
> Reviewed-by: Hannes Reinecke <hare@suse.de>
> ---
> block/file-posix.c | 70 ++++++++++++++++++++++++++++++++
> include/block/block_int-common.h | 3 ++
> 2 files changed, 73 insertions(+)
>
> diff --git a/block/file-posix.c b/block/file-posix.c
> index a40eab64a2..4785203eea 100644
> --- a/block/file-posix.c
> +++ b/block/file-posix.c
> @@ -1264,6 +1264,68 @@ out:
> #endif
> }
>
> +/*
> + * Convert the zoned attribute file in sysfs to internal value.
> + */
> +static int get_sysfs_str_val(int fd, struct stat *st,
> + const char *attribute,
> + char **val) {
The fd argument is unused and can be dropped.
> +#ifdef CONFIG_LINUX
> + char *buf = NULL;
> + g_autofree char *sysfspath = NULL;
> + int ret;
> + size_t len;
> +
> + if (!S_ISBLK(st->st_mode)) {
> + return -ENOTSUP;
> + }
> +
> + sysfspath = g_strdup_printf("/sys/dev/block/%u:%u/queue/%s",
> + major(st->st_rdev), minor(st->st_rdev),
> + attribute);
> + ret = g_file_get_contents(sysfspath, &buf, &len, NULL);
> + if (ret == -1) {
> + ret = -errno;
g_file_get_contents() does not set errno. You can either pass in a
GError and report the message string by converting it into a QEMU Error
object (grep for g_file_get_contents() to see example), or you can
return a fixed error code like -ENOENT.
> + return ret;
> + }
> +
> + /* The file is ended with '\n' */
> + if (buf[len - 1] == '\n') {
> + buf[len - 1] = '\0';
> + }
> +
> + if (!strncpy(*val, buf, len)) {
> + ret = -errno;
> + return ret;
> + }
> + g_free(buf);
buf is not necessary. val can be passed directly to g_file_get_contents().
> + return 0;
> +#else
> + return -ENOTSUP;
> +#endif
> +}
Now get_sysfs_long_val() can be written using get_sysfs_str_val():
static long get_sysfs_long_val(struct stat *st, const char *attribute)
{
g_autofree char *str = NULL;
const char *end;
long val;
int ret;
ret = get_sysfs_str_val(st, attribute, &str);
if (ret < 0) {
return ret;
}
ret = qemu_strtol(str, &end, 10, &val);
if (ret == 0 && end && *end == '\0') {
ret = val;
}
return ret;
}
The get_sysfs_long_val() patch can be moved after the
get_sysfs_str_val() patch.
> +
> +static int get_sysfs_zoned_model(int fd, struct stat *st,
> + BlockZoneModel *zoned) {
> + g_autofree char *val = NULL;
> + val = g_malloc(32);
> + get_sysfs_str_val(fd, st, "zoned", &val);
Once get_sysfs_str_val() passes val through to g_get_file_contents() the
caller will no longer have to g_malloc() val themselves.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2022-08-08 13:54 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-05 7:57 [PATCH v6 0/8] Add support for zoned device Sam Li
2022-08-05 7:57 ` [PATCH v6 1/8] include: add zoned device structs Sam Li
2022-08-05 7:57 ` [PATCH v6 2/8] file-posix: introduce get_sysfs_long_val for the long sysfs attribute Sam Li
2022-08-06 12:29 ` Stefan Hajnoczi
2022-08-08 13:56 ` Sam Li
2022-08-05 7:57 ` [PATCH v6 3/8] file-posix: introduce get_sysfs_str_val for device zoned model Sam Li
2022-08-06 12:50 ` Stefan Hajnoczi [this message]
2022-08-08 13:59 ` Sam Li
2022-08-05 7:57 ` [PATCH v6 4/8] block: add block layer APIs resembling Linux ZonedBlockDevice ioctls Sam Li
2022-08-06 13:07 ` Stefan Hajnoczi
2022-08-07 23:52 ` Sam Li
2022-08-05 7:57 ` [PATCH v6 5/8] raw-format: add zone operations to pass through requests Sam Li
2022-08-05 7:57 ` [PATCH v6 6/8] config: add check to block layer Sam Li
2022-08-06 12:23 ` Stefan Hajnoczi
2022-08-05 7:57 ` [PATCH v6 7/8] qemu-iotests: test new zone operations Sam Li
2022-08-05 7:57 ` [PATCH v6 8/8] docs/zoned-storage: add zoned device documentation Sam Li
2022-08-06 12:26 ` Stefan Hajnoczi
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=Yu5jnXJG3PBWcrYg@fedora \
--to=stefanha@redhat.com \
--cc=armbru@redhat.com \
--cc=damien.lemoal@opensource.wdc.com \
--cc=dmitry.fomichev@wdc.com \
--cc=eblake@redhat.com \
--cc=faithilikerun@gmail.com \
--cc=fam@euphon.net \
--cc=hare@suse.de \
--cc=hreitz@redhat.com \
--cc=kwolf@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.