mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06: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:
parent
5937835ac4
commit
3578389bcf
4 changed files with 702 additions and 0 deletions
36
block/export/vhost-user-blk-server.h
Normal file
36
block/export/vhost-user-blk-server.h
Normal file
|
@ -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 */
|
Loading…
Add table
Add a link
Reference in a new issue