[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] block: char devices on FreeBSD are not behind a pag
From: |
Roger Pau Monne |
Subject: |
[Qemu-devel] [PATCH] block: char devices on FreeBSD are not behind a pager |
Date: |
Mon, 20 Oct 2014 18:39:27 +0200 |
Acknowledge this and forcefully set BDRV_O_NOCACHE and O_DIRECT in order to
force QEMU to use aligned buffers.
Signed-off-by: Roger Pau Monné <address@hidden>
Cc: Kevin Wolf <address@hidden>
Cc: Stefan Hajnoczi <address@hidden>
---
block/raw-posix.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 86ce4f2..63841dd 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -472,6 +472,18 @@ static int raw_open_common(BlockDriverState *bs, QDict
*options,
}
#endif
}
+#ifdef __FreeBSD__
+ if (S_ISCHR(st.st_mode)) {
+ /*
+ * The file is a char device (disk), which on FreeBSD isn't behind
+ * a pager, so set BDRV_O_NOCACHE unconditionally. This is needed
+ * so Qemu makes sure all IO operations on the device are aligned
+ * to sector size, or else FreeBSD will reject them with EINVAL.
+ */
+ bs->open_flags |= BDRV_O_NOCACHE;
+ s->open_flags |= O_DIRECT;
+ }
+#endif
#ifdef CONFIG_XFS
if (platform_test_xfs_fd(s->fd)) {
--
1.9.3 (Apple Git-50)
- [Qemu-devel] [PATCH] block: char devices on FreeBSD are not behind a pager,
Roger Pau Monne <=