osdep: warn if open(O_DIRECT) on fails with EINVAL

Print a warning when opening a file O_DIRECT fails with EINVAL.  This
saves users a lot of time trying to figure out the EINVAL error, which
is typical when attempting to open a file O_DIRECT on Linux tmpfs.

Reported-by: Deepak C Shetty <deepakcs@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2013-08-22 11:29:03 +02:00
parent 975a0015ee
commit a5813077aa
1 changed files with 7 additions and 0 deletions

View File

@ -207,6 +207,13 @@ int qemu_open(const char *name, int flags, ...)
}
#endif
#ifdef O_DIRECT
if (ret == -1 && errno == EINVAL && (flags & O_DIRECT)) {
error_report("file system may not support O_DIRECT");
errno = EINVAL; /* in case it was clobbered */
}
#endif /* O_DIRECT */
return ret;
}