From: Greg Kurz <groug@kaod.org>
To: keno@juliacomputing.com
Cc: qemu-devel@nongnu.org, Keno Fischer <keno@alumni.harvard.edu>
Subject: Re: [Qemu-devel] [PATCH 03/13] 9p: Move a couple xattr functions to 9p-util
Date: Tue, 29 May 2018 20:34:26 +0200 [thread overview]
Message-ID: <20180529203426.3aa6305a@bahia.lan> (raw)
In-Reply-To: <033ba6f2e3f0daccb31e1930a1c65cf7a18ae66c.1527310210.git.keno@alumni.harvard.edu>
On Sat, 26 May 2018 01:23:05 -0400
keno@juliacomputing.com wrote:
> From: Keno Fischer <keno@alumni.harvard.edu>
>
> These functions will need custom implementations on Darwin. Since the
> implementation is very similar among all of them, and 9p-util already
> has the _nofollow version of fgetxattrat, let's move them all there.
>
I'm ok with this move, but if the functions need to have distinct
implementations, and they really do according to patch 10, then
I'd rather have distinct files and rely on conditional building in
the makefile. Maybe rename the current file to 9p-util-linux.c
and introduce a 9p-util-darwin.c later.
> Additionally, introduce a _follow version of fgetxattr and use it.
> On darwin, fgetxattr has a more general interface, so we'll need to factor
> it out anyway.
>
No need for the _follow version in this case.
> Signed-off-by: Keno Fischer <keno@juliacomputing.com>
> ---
> hw/9pfs/9p-local.c | 11 +++++++----
> hw/9pfs/9p-util.c | 39 +++++++++++++++++++++++++++++++++++++++
> hw/9pfs/9p-util.h | 6 ++++++
> hw/9pfs/9p-xattr.c | 33 ---------------------------------
> 4 files changed, 52 insertions(+), 37 deletions(-)
>
> diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
> index 7592f8d..fd65d04 100644
> --- a/hw/9pfs/9p-local.c
> +++ b/hw/9pfs/9p-local.c
> @@ -776,16 +776,19 @@ static int local_fstat(FsContext *fs_ctx, int fid_type,
> mode_t tmp_mode;
> dev_t tmp_dev;
>
> - if (fgetxattr(fd, "user.virtfs.uid", &tmp_uid, sizeof(uid_t)) > 0) {
> + if (fgetxattr_follow(fd, "user.virtfs.uid", &tmp_uid, sizeof(uid_t)) > 0) {
> stbuf->st_uid = le32_to_cpu(tmp_uid);
> }
> - if (fgetxattr(fd, "user.virtfs.gid", &tmp_gid, sizeof(gid_t)) > 0) {
> + if (fgetxattr_follow(fd, "user.virtfs.gid", &tmp_gid, sizeof(gid_t)) > 0)
> + {
> stbuf->st_gid = le32_to_cpu(tmp_gid);
> }
> - if (fgetxattr(fd, "user.virtfs.mode", &tmp_mode, sizeof(mode_t)) > 0) {
> + if (fgetxattr_follow(fd, "user.virtfs.mode", &tmp_mode, sizeof(mode_t)) > 0)
> + {
> stbuf->st_mode = le32_to_cpu(tmp_mode);
> }
> - if (fgetxattr(fd, "user.virtfs.rdev", &tmp_dev, sizeof(dev_t)) > 0) {
> + if (fgetxattr_follow(fd, "user.virtfs.rdev", &tmp_dev, sizeof(dev_t)) > 0)
> + {
> stbuf->st_rdev = le64_to_cpu(tmp_dev);
> }
> } else if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE) {
> diff --git a/hw/9pfs/9p-util.c b/hw/9pfs/9p-util.c
> index f709c27..8cf5554 100644
> --- a/hw/9pfs/9p-util.c
> +++ b/hw/9pfs/9p-util.c
> @@ -24,3 +24,42 @@ ssize_t fgetxattrat_nofollow(int dirfd, const char *filename, const char *name,
> g_free(proc_path);
> return ret;
> }
> +
> +ssize_t fgetxattr_follow(int fd, const char *name,
> + void *value, size_t size)
> +{
> + return fgetxattr(fd, name, value, size);
> +}
> +
> +ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
> + char *list, size_t size)
> +{
> + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> + int ret;
> +
> + ret = llistxattr(proc_path, list, size);
> + g_free(proc_path);
> + return ret;
> +}
> +
> +ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
> + const char *name)
> +{
> + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> + int ret;
> +
> + ret = lremovexattr(proc_path, name);
> + g_free(proc_path);
> + return ret;
> +}
> +
> +int fsetxattrat_nofollow(int dirfd, const char *filename, const char *name,
> + void *value, size_t size, int flags)
> +{
> + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> + int ret;
> +
> + ret = lsetxattr(proc_path, name, value, size, flags);
> + g_free(proc_path);
> + return ret;
> +}
> diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
> index dc0d2e2..cb26343 100644
> --- a/hw/9pfs/9p-util.h
> +++ b/hw/9pfs/9p-util.h
> @@ -58,7 +58,13 @@ static inline int openat_file(int dirfd, const char *name, int flags,
>
> ssize_t fgetxattrat_nofollow(int dirfd, const char *path, const char *name,
> void *value, size_t size);
> +ssize_t fgetxattr_follow(int fd, const char *name,
> + void *value, size_t size);
> int fsetxattrat_nofollow(int dirfd, const char *path, const char *name,
> void *value, size_t size, int flags);
> +ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
> + char *list, size_t size);
> +ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
> + const char *name);
>
> #endif
> diff --git a/hw/9pfs/9p-xattr.c b/hw/9pfs/9p-xattr.c
> index d05c1a1..c696d8f 100644
> --- a/hw/9pfs/9p-xattr.c
> +++ b/hw/9pfs/9p-xattr.c
> @@ -60,17 +60,6 @@ ssize_t pt_listxattr(FsContext *ctx, const char *path,
> return name_size;
> }
>
> -static ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
> - char *list, size_t size)
> -{
> - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> - int ret;
> -
> - ret = llistxattr(proc_path, list, size);
> - g_free(proc_path);
> - return ret;
> -}
> -
> /*
> * Get the list and pass to each layer to find out whether
> * to send the data or not
> @@ -196,17 +185,6 @@ ssize_t pt_getxattr(FsContext *ctx, const char *path, const char *name,
> return local_getxattr_nofollow(ctx, path, name, value, size);
> }
>
> -int fsetxattrat_nofollow(int dirfd, const char *filename, const char *name,
> - void *value, size_t size, int flags)
> -{
> - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> - int ret;
> -
> - ret = lsetxattr(proc_path, name, value, size, flags);
> - g_free(proc_path);
> - return ret;
> -}
> -
> ssize_t local_setxattr_nofollow(FsContext *ctx, const char *path,
> const char *name, void *value, size_t size,
> int flags)
> @@ -235,17 +213,6 @@ int pt_setxattr(FsContext *ctx, const char *path, const char *name, void *value,
> return local_setxattr_nofollow(ctx, path, name, value, size, flags);
> }
>
> -static ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
> - const char *name)
> -{
> - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename);
> - int ret;
> -
> - ret = lremovexattr(proc_path, name);
> - g_free(proc_path);
> - return ret;
> -}
> -
> ssize_t local_removexattr_nofollow(FsContext *ctx, const char *path,
> const char *name)
> {
next prev parent reply other threads:[~2018-05-29 18:34 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-26 5:23 [Qemu-devel] [PATCH 00/13] 9p: Add support for Darwin keno
2018-05-26 5:23 ` [Qemu-devel] [PATCH 01/13] 9p: linux: Fix a couple Linux assumptions keno
2018-05-26 6:30 ` Philippe Mathieu-Daudé
2018-05-26 13:30 ` Peter Maydell
2018-05-26 16:17 ` Keno Fischer
2018-05-28 12:31 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 02/13] 9p: Avoid warning if FS_IOC_GETVERSION is not defined keno
2018-05-28 13:52 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 03/13] 9p: Move a couple xattr functions to 9p-util keno
2018-05-29 18:34 ` Greg Kurz [this message]
2018-05-31 16:14 ` Keno Fischer
2018-05-31 17:26 ` Greg Kurz
2018-05-31 17:39 ` Keno Fischer
2018-05-26 5:23 ` [Qemu-devel] [PATCH 04/13] 9p: darwin: Handle struct stat(fs) differences keno
2018-05-26 5:23 ` [Qemu-devel] [PATCH 05/13] 9p: darwin: Handle struct dirent differences keno
2018-05-29 20:25 ` Greg Kurz
2018-05-31 16:20 ` Keno Fischer
2018-05-31 19:16 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 06/13] 9p: darwin: Address minor differences keno
2018-05-29 21:09 ` Greg Kurz
2018-05-31 16:27 ` Keno Fischer
2018-05-31 19:22 ` Greg Kurz
2018-05-31 19:23 ` Keno Fischer
2018-05-31 19:49 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 07/13] 9p: darwin: Properly translate AT_REMOVEDIR flag keno
2018-05-29 20:43 ` Greg Kurz
2018-05-31 16:25 ` Keno Fischer
2018-05-31 19:44 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 08/13] 9p: darwin: Ignore O_{NOATIME, DIRECT} keno
2018-05-29 21:32 ` Greg Kurz
2018-05-31 16:35 ` Keno Fischer
2018-05-26 5:23 ` [Qemu-devel] [PATCH 09/13] 9p: darwin: Provide a compatibility definition for XATTR_SIZE_MAX keno
2018-05-26 13:34 ` Peter Maydell
2018-05-26 16:00 ` Keno Fischer
2018-05-26 5:23 ` [Qemu-devel] [PATCH 10/13] 9p: darwin: *xattr_nofollow implementations keno
2018-05-30 12:13 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 11/13] 9p: darwin: Mark mknod as unsupported keno
2018-05-30 12:20 ` Greg Kurz
2018-05-31 16:37 ` Keno Fischer
2018-05-31 19:56 ` Greg Kurz
2018-05-31 22:56 ` Keno Fischer
2018-05-31 23:06 ` Keno Fischer
2018-05-31 23:21 ` Keno Fischer
2018-05-26 5:23 ` [Qemu-devel] [PATCH 12/13] 9p: darwin: Provide a fallback implementation for utimensat keno
2018-05-30 12:14 ` Greg Kurz
2018-05-26 5:23 ` [Qemu-devel] [PATCH 13/13] 9p: darwin: configure: Allow VirtFS on Darwin keno
2018-05-28 12:59 ` Greg Kurz
2018-05-31 17:46 ` Keno Fischer
2018-05-31 19:57 ` Greg Kurz
2018-05-26 5:37 ` [Qemu-devel] [PATCH 00/13] 9p: Add support for Darwin no-reply
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=20180529203426.3aa6305a@bahia.lan \
--to=groug@kaod.org \
--cc=keno@alumni.harvard.edu \
--cc=keno@juliacomputing.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).