[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 11/27] raw-posix: Implement .bdrv_lockf
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v5 11/27] raw-posix: Implement .bdrv_lockf |
Date: |
Tue, 17 May 2016 15:35:20 +0800 |
virtlockd in libvirt locks the first byte, we lock byte 1 to avoid
the intervene.
Both file and host device protocols are covered.
Suggested-by: "Daniel P. Berrange" <address@hidden>
Signed-off-by: Fam Zheng <address@hidden>
---
block/raw-posix.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index bb8669f..acd3be2 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -35,6 +35,7 @@
#include "raw-aio.h"
#include "qapi/util.h"
#include "qapi/qmp/qstring.h"
+#include "glib.h"
#if defined(__APPLE__) && (__MACH__)
#include <paths.h>
@@ -397,6 +398,23 @@ static void raw_attach_aio_context(BlockDriverState *bs,
#endif
}
+static int raw_lockf(BlockDriverState *bs, BdrvLockfCmd cmd)
+{
+
+ BDRVRawState *s = bs->opaque;
+
+ switch (cmd) {
+ case BDRV_LOCKF_EXCLUSIVE:
+ return qemu_lock_fd(s->fd, 1, 1, true);
+ case BDRV_LOCKF_SHARED:
+ return qemu_lock_fd(s->fd, 1, 1, false);
+ case BDRV_LOCKF_UNLOCK:
+ return qemu_unlock_fd(s->fd, 1, 1);
+ default:
+ abort();
+ }
+}
+
#ifdef CONFIG_LINUX_AIO
static int raw_set_aio(LinuxAioState **aio_ctx, int *use_aio, int bdrv_flags)
{
@@ -1942,6 +1960,8 @@ BlockDriver bdrv_file = {
.bdrv_detach_aio_context = raw_detach_aio_context,
.bdrv_attach_aio_context = raw_attach_aio_context,
+ .bdrv_lockf = raw_lockf,
+
.create_opts = &raw_create_opts,
};
@@ -2396,6 +2416,8 @@ static BlockDriver bdrv_host_device = {
#ifdef __linux__
.bdrv_aio_ioctl = hdev_aio_ioctl,
#endif
+
+ .bdrv_lockf = raw_lockf,
};
#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
--
2.8.2
- [Qemu-devel] [PATCH v5 05/27] block: Add bdrv_image_locked, (continued)
- [Qemu-devel] [PATCH v5 05/27] block: Add bdrv_image_locked, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 06/27] block: Make bdrv_reopen_{commit, abort} private functions, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 12/27] gluster: Implement .bdrv_lockf, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 09/27] osdep: Introduce qemu_dup, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 11/27] raw-posix: Implement .bdrv_lockf,
Fam Zheng <=
- [Qemu-devel] [PATCH v5 10/27] raw-posix: Use qemu_dup, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 16/27] qemu-nbd: Add "--no-lock/-L" option, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 15/27] qemu-img: Update documentation of "-L" option, Fam Zheng, 2016/05/17
- [Qemu-devel] [PATCH v5 14/27] qemu-img: Add "-L" option to sub commands, Fam Zheng, 2016/05/17