mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
block/export: vhost-user block device backend server
By making use of libvhost-user, block device drive can be shared to the connected vhost-user client. Only one client can connect to the server one time. Since vhost-user-server needs a block drive to be created first, delay the creation of this object. Suggested-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Coiby Xu <coiby.xu@gmail.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-id: 20200918080912.321299-6-coiby.xu@gmail.com [Shorten "vhost_user_blk_server" string to "vhost_user_blk" to avoid the following compiler warning: ../block/export/vhost-user-blk-server.c:178:50: error: ‘%s’ directive output truncated writing 21 bytes into a region of size 20 [-Werror=format-truncation=] and fix "Invalid size %ld ..." ssize_t format string arguments for 32-bit hosts. --Stefan] Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
committed by
Stefan Hajnoczi
parent
5937835ac4
commit
3578389bcf
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Sharing QEMU block devices via vhost-user protocal
|
||||
*
|
||||
* Copyright (c) Coiby Xu <coiby.xu@gmail.com>.
|
||||
* Copyright (c) 2020 Red Hat, Inc.
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
* later. See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef VHOST_USER_BLK_SERVER_H
|
||||
#define VHOST_USER_BLK_SERVER_H
|
||||
#include "util/vhost-user-server.h"
|
||||
|
||||
typedef struct VuBlockDev VuBlockDev;
|
||||
#define TYPE_VHOST_USER_BLK_SERVER "vhost-user-blk-server"
|
||||
#define VHOST_USER_BLK_SERVER(obj) \
|
||||
OBJECT_CHECK(VuBlockDev, obj, TYPE_VHOST_USER_BLK_SERVER)
|
||||
|
||||
/* vhost user block device */
|
||||
struct VuBlockDev {
|
||||
Object parent_obj;
|
||||
char *node_name;
|
||||
SocketAddress *addr;
|
||||
AioContext *ctx;
|
||||
VuServer vu_server;
|
||||
bool running;
|
||||
uint32_t blk_size;
|
||||
BlockBackend *backend;
|
||||
QIOChannelSocket *sioc;
|
||||
QTAILQ_ENTRY(VuBlockDev) next;
|
||||
struct virtio_blk_config blkcfg;
|
||||
bool writable;
|
||||
};
|
||||
|
||||
#endif /* VHOST_USER_BLK_SERVER_H */
|
||||
@@ -60,6 +60,7 @@ block_ss.add(when: 'CONFIG_WIN32', if_true: files('file-win32.c', 'win32-aio.c')
|
||||
block_ss.add(when: 'CONFIG_POSIX', if_true: [files('file-posix.c'), coref, iokit])
|
||||
block_ss.add(when: 'CONFIG_LIBISCSI', if_true: files('iscsi-opts.c'))
|
||||
block_ss.add(when: 'CONFIG_LINUX', if_true: files('nvme.c'))
|
||||
block_ss.add(when: 'CONFIG_LINUX', if_true: files('export/vhost-user-blk-server.c', '../contrib/libvhost-user/libvhost-user.c'))
|
||||
block_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
|
||||
block_ss.add(when: 'CONFIG_SHEEPDOG', if_true: files('sheepdog.c'))
|
||||
block_ss.add(when: ['CONFIG_LINUX_AIO', libaio], if_true: files('linux-aio.c'))
|
||||
|
||||
@@ -2540,6 +2540,10 @@ static bool object_create_initial(const char *type, QemuOpts *opts)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Reason: vhost-user-blk-server property "node-name" */
|
||||
if (g_str_equal(type, "vhost-user-blk-server")) {
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
* Reason: filter-* property "netdev" etc.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user