[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/8] block/raw-posix: Linux compat-ioctl warning wor
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 3/8] block/raw-posix: Linux compat-ioctl warning workaround |
Date: |
Wed, 6 Jul 2011 16:21:24 +0200 |
From: Johannes Stezenbach <address@hidden>
On Linux x86_64 host with 32bit userspace, running
qemu or even just "qemu-img create -f qcow2 some.img 1G"
causes a kernel warning:
ioctl32(qemu-img:5296): Unknown cmd fd(3) cmd(00005326){t:'S';sz:0}
arg(7fffffff) on some.img
ioctl32(qemu-img:5296): Unknown cmd fd(3) cmd(801c0204){t:02;sz:28}
arg(fff77350) on some.img
ioctl 00005326 is CDROM_DRIVE_STATUS,
ioctl 801c0204 is FDGETPRM.
The warning appears because the Linux compat-ioctl handler for these
ioctls only applies to block devices, while qemu also uses the ioctls on
plain files. Work around by calling fstat() the ensure the ioctls are
only used on block devices.
Signed-off-by: Johannes Stezenbach <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/raw-posix.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 4cd7d7a..34b64aa 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -46,6 +46,8 @@
#include <sys/dkio.h>
#endif
#ifdef __linux__
+#include <sys/types.h>
+#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/param.h>
#include <linux/cdrom.h>
@@ -1188,6 +1190,7 @@ static int floppy_probe_device(const char *filename)
int fd, ret;
int prio = 0;
struct floppy_struct fdparam;
+ struct stat st;
if (strstart(filename, "/dev/fd", NULL))
prio = 50;
@@ -1196,12 +1199,17 @@ static int floppy_probe_device(const char *filename)
if (fd < 0) {
goto out;
}
+ ret = fstat(fd, &st);
+ if (ret == -1 || !S_ISBLK(st.st_mode)) {
+ goto outc;
+ }
/* Attempt to detect via a floppy specific ioctl */
ret = ioctl(fd, FDGETPRM, &fdparam);
if (ret >= 0)
prio = 100;
+outc:
close(fd);
out:
return prio;
@@ -1290,17 +1298,23 @@ static int cdrom_probe_device(const char *filename)
{
int fd, ret;
int prio = 0;
+ struct stat st;
fd = open(filename, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
goto out;
}
+ ret = fstat(fd, &st);
+ if (ret == -1 || !S_ISBLK(st.st_mode)) {
+ goto outc;
+ }
/* Attempt to detect via a CDROM specific ioctl */
ret = ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT);
if (ret >= 0)
prio = 100;
+outc:
close(fd);
out:
return prio;
--
1.7.6
- [Qemu-devel] [PULL 0/8] Block patches, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 1/8] Documentation: Remove outdated host_device note, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 2/8] qemu-img: Add cache command line option, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 3/8] block/raw-posix: Linux compat-ioctl warning workaround,
Kevin Wolf <=
- [Qemu-devel] [PATCH 4/8] virtio-blk: Turn drive serial into a qdev property, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 5/8] block: drive_init(): Simplify interface type setting, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 6/8] block: drive_init(): Improve CHS setting error message, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 7/8] ide: Ignore reads during PIO in and writes during PIO out, Kevin Wolf, 2011/07/06
- [Qemu-devel] [PATCH 8/8] ide: Initialise buffers with zeros, Kevin Wolf, 2011/07/06
- Re: [Qemu-devel] [PULL 0/8] Block patches, Kevin Wolf, 2011/07/12
- Re: [Qemu-devel] [PULL 0/8] Block patches, Anthony Liguori, 2011/07/12