* [Qemu-devel] [PATCH 0/2] osdep: warn if opening a file O_DIRECT on tmpfs fails @ 2013-08-21 12:26 Stefan Hajnoczi 2013-08-21 12:26 ` [Qemu-devel] [PATCH 1/2] stubs: add error_report() Stefan Hajnoczi 2013-08-21 12:26 ` [Qemu-devel] [PATCH 2/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi 0 siblings, 2 replies; 5+ messages in thread From: Stefan Hajnoczi @ 2013-08-21 12:26 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, Deepak C Shetty, Stefan Hajnoczi Deepak C Shetty <deepakcs@linux.vnet.ibm.com> tried to open an image file O_DIRECT on tmpfs and received EINVAL. This error is too generic, making it hard to figure out that the problem is -drive ...,cache=none on tmpfs. Add a warning when opening a file O_DIRECT on tmpfs fails. Stefan Hajnoczi (2): stubs: add error_report() osdep: warn if opening a file O_DIRECT on tmpfs fails stubs/Makefile.objs | 1 + stubs/error-report.c | 12 ++++++++++++ util/osdep.c | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 stubs/error-report.c -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH 1/2] stubs: add error_report() 2013-08-21 12:26 [Qemu-devel] [PATCH 0/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi @ 2013-08-21 12:26 ` Stefan Hajnoczi 2013-08-21 13:04 ` Markus Armbruster 2013-08-21 12:26 ` [Qemu-devel] [PATCH 2/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi 1 sibling, 1 reply; 5+ messages in thread From: Stefan Hajnoczi @ 2013-08-21 12:26 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, Deepak C Shetty, Stefan Hajnoczi The error report function is preferred over fprintf(stderr, ...) since it prints to the current monitor, if any. Add a stub error_report() implementation that just prints to stderr. This is suitable in environments where there is no QEMU monitor, such as libcacard. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- stubs/Makefile.objs | 1 + stubs/error-report.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 stubs/error-report.c diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index f306cba..f84d597 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -3,6 +3,7 @@ stub-obj-y += clock-warp.o stub-obj-y += cpu-get-clock.o stub-obj-y += cpu-get-icount.o stub-obj-y += dump.o +stub-obj-y += error-report.o stub-obj-y += fdset-add-fd.o stub-obj-y += fdset-find-fd.o stub-obj-y += fdset-get-fd.o diff --git a/stubs/error-report.c b/stubs/error-report.c new file mode 100644 index 0000000..e39d0a9 --- /dev/null +++ b/stubs/error-report.c @@ -0,0 +1,12 @@ +#include <stdio.h> +#include "qemu/error-report.h" + +void error_report(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, "\n"); +} -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] stubs: add error_report() 2013-08-21 12:26 ` [Qemu-devel] [PATCH 1/2] stubs: add error_report() Stefan Hajnoczi @ 2013-08-21 13:04 ` Markus Armbruster 2013-08-21 13:15 ` Stefan Hajnoczi 0 siblings, 1 reply; 5+ messages in thread From: Markus Armbruster @ 2013-08-21 13:04 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: Kevin Wolf, Deepak C Shetty, qemu-devel Stefan Hajnoczi <stefanha@redhat.com> writes: > The error report function is preferred over fprintf(stderr, ...) since > it prints to the current monitor, if any. > > Add a stub error_report() implementation that just prints to stderr. > This is suitable in environments where there is no QEMU monitor, such as > libcacard. > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > stubs/Makefile.objs | 1 + > stubs/error-report.c | 12 ++++++++++++ > 2 files changed, 13 insertions(+) > create mode 100644 stubs/error-report.c > > diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs > index f306cba..f84d597 100644 > --- a/stubs/Makefile.objs > +++ b/stubs/Makefile.objs > @@ -3,6 +3,7 @@ stub-obj-y += clock-warp.o > stub-obj-y += cpu-get-clock.o > stub-obj-y += cpu-get-icount.o > stub-obj-y += dump.o > +stub-obj-y += error-report.o > stub-obj-y += fdset-add-fd.o > stub-obj-y += fdset-find-fd.o > stub-obj-y += fdset-get-fd.o > diff --git a/stubs/error-report.c b/stubs/error-report.c > new file mode 100644 > index 0000000..e39d0a9 > --- /dev/null > +++ b/stubs/error-report.c > @@ -0,0 +1,12 @@ > +#include <stdio.h> > +#include "qemu/error-report.h" > + > +void error_report(const char *fmt, ...) > +{ > + va_list ap; > + > + va_start(ap, fmt); > + vfprintf(stderr, fmt, ap); > + va_end(ap); > + fprintf(stderr, "\n"); > +} We already have a monitor stubs (mon-set-error.c mon-printf.c ...) so we can use error_report() in utility programs. Why doesn't that suffice here? ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] stubs: add error_report() 2013-08-21 13:04 ` Markus Armbruster @ 2013-08-21 13:15 ` Stefan Hajnoczi 0 siblings, 0 replies; 5+ messages in thread From: Stefan Hajnoczi @ 2013-08-21 13:15 UTC (permalink / raw) To: Markus Armbruster Cc: Kevin Wolf, Deepak C Shetty, qemu-devel, Stefan Hajnoczi On Wed, Aug 21, 2013 at 03:04:02PM +0200, Markus Armbruster wrote: > Stefan Hajnoczi <stefanha@redhat.com> writes: > > > The error report function is preferred over fprintf(stderr, ...) since > > it prints to the current monitor, if any. > > > > Add a stub error_report() implementation that just prints to stderr. > > This is suitable in environments where there is no QEMU monitor, such as > > libcacard. > > > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > > --- > > stubs/Makefile.objs | 1 + > > stubs/error-report.c | 12 ++++++++++++ > > 2 files changed, 13 insertions(+) > > create mode 100644 stubs/error-report.c > > > > diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs > > index f306cba..f84d597 100644 > > --- a/stubs/Makefile.objs > > +++ b/stubs/Makefile.objs > > @@ -3,6 +3,7 @@ stub-obj-y += clock-warp.o > > stub-obj-y += cpu-get-clock.o > > stub-obj-y += cpu-get-icount.o > > stub-obj-y += dump.o > > +stub-obj-y += error-report.o > > stub-obj-y += fdset-add-fd.o > > stub-obj-y += fdset-find-fd.o > > stub-obj-y += fdset-get-fd.o > > diff --git a/stubs/error-report.c b/stubs/error-report.c > > new file mode 100644 > > index 0000000..e39d0a9 > > --- /dev/null > > +++ b/stubs/error-report.c > > @@ -0,0 +1,12 @@ > > +#include <stdio.h> > > +#include "qemu/error-report.h" > > + > > +void error_report(const char *fmt, ...) > > +{ > > + va_list ap; > > + > > + va_start(ap, fmt); > > + vfprintf(stderr, fmt, ap); > > + va_end(ap); > > + fprintf(stderr, "\n"); > > +} > > We already have a monitor stubs (mon-set-error.c mon-printf.c ...) so we > can use error_report() in utility programs. Why doesn't that suffice > here? Good idea. I'll resend with util/qemu-error.o linked in. Stefan ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH 2/2] osdep: warn if opening a file O_DIRECT on tmpfs fails 2013-08-21 12:26 [Qemu-devel] [PATCH 0/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi 2013-08-21 12:26 ` [Qemu-devel] [PATCH 1/2] stubs: add error_report() Stefan Hajnoczi @ 2013-08-21 12:26 ` Stefan Hajnoczi 1 sibling, 0 replies; 5+ messages in thread From: Stefan Hajnoczi @ 2013-08-21 12:26 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, Deepak C Shetty, Stefan Hajnoczi Print a warning when opening a file O_DIRECT on tmpfs fails. This saves users a lot of time trying to figure out the EINVAL error. Daniel P. Berrange <berrange@redhat.com> 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 <deepakcs@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- 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; } -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-08-21 13:16 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-08-21 12:26 [Qemu-devel] [PATCH 0/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi 2013-08-21 12:26 ` [Qemu-devel] [PATCH 1/2] stubs: add error_report() Stefan Hajnoczi 2013-08-21 13:04 ` Markus Armbruster 2013-08-21 13:15 ` Stefan Hajnoczi 2013-08-21 12:26 ` [Qemu-devel] [PATCH 2/2] osdep: warn if opening a file O_DIRECT on tmpfs fails Stefan Hajnoczi
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).