|
From: | Doug Goldstein |
Subject: | Re: [Qemu-devel] [PATCH v2 2/2] osdep: warn if opening a file O_DIRECT on tmpfs fails |
Date: | Wed, 21 Aug 2013 14:48:08 -0500 |
Stefan Hajnoczi <address@hidden> writes:Only when it fails with EINVAL, actually. Suggest "on tmpfs fails with
> Print a warning when opening a file O_DIRECT on tmpfs fails. This saves
EINVAL."
In theory, the warning could be misleading, because we can get EINVAL
> users a lot of time trying to figure out the EINVAL error.
>
> Daniel P. Berrange <address@hidden> suggested opening the file
> without O_DIRECT as a portable way to check whether the file system
> supports O_DIRECT. That gets messy when flags contains O_CREAT since
> we'd create a file but return an error - or a race condition if we try
> to unlink the file. It's simpler to check the file system type.
>
> Reported-by: Deepak C Shetty <address@hidden>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> util/osdep.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/util/osdep.c b/util/osdep.c
> index 685c8ae..446a1dc 100644
> --- a/util/osdep.c
> +++ b/util/osdep.c
> @@ -30,6 +30,11 @@
> #include <unistd.h>
> #include <fcntl.h>
>
> +#ifdef __linux__
> +#include <sys/vfs.h>
> +#include <linux/magic.h>
> +#endif
> +
> /* Needed early for CONFIG_BSD etc. */
> #include "config-host.h"
>
> @@ -207,6 +212,20 @@ int qemu_open(const char *name, int flags, ...)
> }
> #endif
>
> +#ifdef __linux__
> + /* It is not possible to open files O_DIRECT on tmpfs. Provide a hint that
> + * this may be the case (of course it could change in future kernel
> + * versions).
> + */
> + if (ret == -1 && errno == EINVAL && (flags & O_DIRECT)) {
> + struct statfs st;
> + if (statfs(name, &st) == 0 && st.f_type == TMPFS_MAGIC) {
> + error_report("tmpfs file systems may not support O_DIRECT");
> + }
> + errno = EINVAL; /* in case it was clobbered */
> + }
> +#endif /* __linux__ */
> +
> return ret;
> }
for reasons not related to flags & O_DIRECT. In practice, the warning
probably does much more good than harm.
[Prev in Thread] | Current Thread | [Next in Thread] |