aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2009-05-25 10:29:13 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-05-27 09:45:54 -0500
commit4099df586a0f16522383c4e4a9613e7c2dcd2491 (patch)
tree4ca7408b950130cebfcfcf75708e4b16e56f0f19
parent94c6d6d815c0295b101b45a101007fcf22c5171a (diff)
raw-posix: fix hdev_create
We do need hdev_create unconditionally on all platforms so that qemu-img create support for host device works on all platforms. Also relax the check to allow character devices in addition to block devices. On many Unix platforms block devices have buffered block nodes and unbuffered character device nodes, and on FreeBSD the block nodes don't even exist anymore. Also on Linux we do support the /dev/sgN scsi passthrough devices through the host device driver, and probably the old-style /dev/raw/rawN raw devices although I haven't tested that. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--block/raw-posix.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 57da1df649..93ed675b9b 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1376,7 +1376,6 @@ static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
}
#endif /* !linux && !FreeBSD */
-#if defined(__linux__) || defined(__FreeBSD__)
static int hdev_create(const char *filename, QEMUOptionParameter *options)
{
int fd;
@@ -1398,7 +1397,7 @@ static int hdev_create(const char *filename, QEMUOptionParameter *options)
if (fstat(fd, &stat_buf) < 0)
ret = -EIO;
- else if (!S_ISBLK(stat_buf.st_mode))
+ else if (!S_ISBLK(stat_buf.st_mode) && !S_ISCHR(stat_buf.st_mode))
ret = -EIO;
else if (lseek(fd, 0, SEEK_END) < total_size * 512)
ret = -ENOSPC;
@@ -1407,14 +1406,6 @@ static int hdev_create(const char *filename, QEMUOptionParameter *options)
return ret;
}
-#else /* !(linux || freebsd) */
-
-static int hdev_create(const char *filename, QEMUOptionParameter *options)
-{
- return -ENOTSUP;
-}
-#endif
-
static BlockDriver bdrv_host_device = {
.format_name = "host_device",
.instance_size = sizeof(BDRVRawState),