-----BEGIN PGP SIGNATURE-----
iQIcBAABAgAGBQJX15GWAAoJEL2+eyfA3jBX7M4QALZlqygFJ9qzyURdVwnGFx89 zlFSwX39W4osJZVSZKKEk/60twyZpPnpcbghh6/HhaARB/erK3WNnk8KmY701BEP fus3/2aMyH1Sg7RjCxIWmYItsBOmmJFYJLFFNMNHvvFVDhVpSyc2G746TtcZMMIk gsaWkxxlAfdUJRv2AuWXsclu2yaWR/MSc4q6kYbzd/Y3LF97KrNu+XbAzJuIFO4N tDgxpFIaMqfpEu1UbrLrUWjVC0PWjt+6KzkxYJKC4g8UmeFidlKx3clzANvzh+dy LombZ7vuYAHRZiz2BhVX+A6HpuQG3OLumo/xjw7KC3IN8+iEhOQTzC7vVq6kzGYk /BUrQ2SVwQKiOrnKwLnJcgWZgZcp1h8gNkqLPI4p4APdN8qLrtGKLIpdLiZPkYBU DVcPeXq+SpdIen4c0yZEwPJkS+5hZPyd1CYBYp2dYZ/sVIrXMQ54LeIzDU4LzlUO MKGZslDiJiTMOveFS0DWKcbN11uXNUwbFlMTyvEFKgKRwWFKdRuqjqY8iC6pNV74 gnYvLpVCOzQlIQtufnW+O7lAsJH7rFHckP3Ffh5rhPhgbmvZLxnil/mhculpP1yn Ze0OPTzMjT7f1m9k8ptKOZbs8QO81ueIWQVEmpXeL7F0GK7qSbrK/LTbgzqDjK9m 2ofD/lRB3A68kz+dUDBa =0HpW -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging # gpg: Signature made Tue 13 Sep 2016 06:41:42 BST # gpg: using RSA key 0xBDBE7B27C0DE3057 # gpg: Good signature from "Jeffrey Cody <jcody@redhat.com>" # gpg: aka "Jeffrey Cody <jeff@codyprime.org>" # gpg: aka "Jeffrey Cody <codyprime@gmail.com>" # Primary key fingerprint: 9957 4B4D 3474 90E7 9D98 D624 BDBE 7B27 C0DE 3057 * remotes/cody/tags/block-pull-request: qapi/block-core: add doc describing GlusterServer vs. SocketAddress block/gluster: add support to choose libgfapi logfile Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
8ede883cfa
|
@ -30,6 +30,8 @@
|
|||
#define GLUSTER_DEFAULT_PORT 24007
|
||||
#define GLUSTER_DEBUG_DEFAULT 4
|
||||
#define GLUSTER_DEBUG_MAX 9
|
||||
#define GLUSTER_OPT_LOGFILE "logfile"
|
||||
#define GLUSTER_LOGFILE_DEFAULT "-" /* handled in libgfapi as /dev/stderr */
|
||||
|
||||
#define GERR_INDEX_HINT "hint: check in 'server' array index '%d'\n"
|
||||
|
||||
|
@ -44,6 +46,7 @@ typedef struct GlusterAIOCB {
|
|||
typedef struct BDRVGlusterState {
|
||||
struct glfs *glfs;
|
||||
struct glfs_fd *fd;
|
||||
char *logfile;
|
||||
bool supports_seek_data;
|
||||
int debug_level;
|
||||
} BDRVGlusterState;
|
||||
|
@ -73,6 +76,11 @@ static QemuOptsList qemu_gluster_create_opts = {
|
|||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "Gluster log level, valid range is 0-9",
|
||||
},
|
||||
{
|
||||
.name = GLUSTER_OPT_LOGFILE,
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Logfile path of libgfapi",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
}
|
||||
};
|
||||
|
@ -91,6 +99,11 @@ static QemuOptsList runtime_opts = {
|
|||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "Gluster log level, valid range is 0-9",
|
||||
},
|
||||
{
|
||||
.name = GLUSTER_OPT_LOGFILE,
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Logfile path of libgfapi",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
@ -341,7 +354,7 @@ static struct glfs *qemu_gluster_glfs_init(BlockdevOptionsGluster *gconf,
|
|||
}
|
||||
}
|
||||
|
||||
ret = glfs_set_logging(glfs, "-", gconf->debug_level);
|
||||
ret = glfs_set_logging(glfs, gconf->logfile, gconf->debug_level);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -576,7 +589,9 @@ static struct glfs *qemu_gluster_init(BlockdevOptionsGluster *gconf,
|
|||
if (ret < 0) {
|
||||
error_setg(errp, "invalid URI");
|
||||
error_append_hint(errp, "Usage: file=gluster[+transport]://"
|
||||
"[host[:port]]/volume/path[?socket=...]\n");
|
||||
"[host[:port]]volume/path[?socket=...]"
|
||||
"[,file.debug=N]"
|
||||
"[,file.logfile=/path/filename.log]\n");
|
||||
errno = -ret;
|
||||
return NULL;
|
||||
}
|
||||
|
@ -586,7 +601,9 @@ static struct glfs *qemu_gluster_init(BlockdevOptionsGluster *gconf,
|
|||
error_append_hint(errp, "Usage: "
|
||||
"-drive driver=qcow2,file.driver=gluster,"
|
||||
"file.volume=testvol,file.path=/path/a.qcow2"
|
||||
"[,file.debug=9],file.server.0.type=tcp,"
|
||||
"[,file.debug=9]"
|
||||
"[,file.logfile=/path/filename.log],"
|
||||
"file.server.0.type=tcp,"
|
||||
"file.server.0.host=1.2.3.4,"
|
||||
"file.server.0.port=24007,"
|
||||
"file.server.1.transport=unix,"
|
||||
|
@ -677,7 +694,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
|
|||
BlockdevOptionsGluster *gconf = NULL;
|
||||
QemuOpts *opts;
|
||||
Error *local_err = NULL;
|
||||
const char *filename;
|
||||
const char *filename, *logfile;
|
||||
|
||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||
|
@ -700,6 +717,13 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
|
|||
gconf = g_new0(BlockdevOptionsGluster, 1);
|
||||
gconf->debug_level = s->debug_level;
|
||||
gconf->has_debug_level = true;
|
||||
|
||||
logfile = qemu_opt_get(opts, GLUSTER_OPT_LOGFILE);
|
||||
s->logfile = g_strdup(logfile ? logfile : GLUSTER_LOGFILE_DEFAULT);
|
||||
|
||||
gconf->logfile = g_strdup(s->logfile);
|
||||
gconf->has_logfile = true;
|
||||
|
||||
s->glfs = qemu_gluster_init(gconf, filename, options, errp);
|
||||
if (!s->glfs) {
|
||||
ret = -errno;
|
||||
|
@ -738,6 +762,7 @@ out:
|
|||
if (!ret) {
|
||||
return ret;
|
||||
}
|
||||
g_free(s->logfile);
|
||||
if (s->fd) {
|
||||
glfs_close(s->fd);
|
||||
}
|
||||
|
@ -769,6 +794,8 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
|
|||
gconf = g_new0(BlockdevOptionsGluster, 1);
|
||||
gconf->debug_level = s->debug_level;
|
||||
gconf->has_debug_level = true;
|
||||
gconf->logfile = g_strdup(s->logfile);
|
||||
gconf->has_logfile = true;
|
||||
reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, NULL, errp);
|
||||
if (reop_s->glfs == NULL) {
|
||||
ret = -errno;
|
||||
|
@ -914,6 +941,12 @@ static int qemu_gluster_create(const char *filename,
|
|||
}
|
||||
gconf->has_debug_level = true;
|
||||
|
||||
gconf->logfile = qemu_opt_get_del(opts, GLUSTER_OPT_LOGFILE);
|
||||
if (!gconf->logfile) {
|
||||
gconf->logfile = g_strdup(GLUSTER_LOGFILE_DEFAULT);
|
||||
}
|
||||
gconf->has_logfile = true;
|
||||
|
||||
glfs = qemu_gluster_init(gconf, filename, NULL, errp);
|
||||
if (!glfs) {
|
||||
ret = -errno;
|
||||
|
@ -1025,6 +1058,7 @@ static void qemu_gluster_close(BlockDriverState *bs)
|
|||
{
|
||||
BDRVGlusterState *s = bs->opaque;
|
||||
|
||||
g_free(s->logfile);
|
||||
if (s->fd) {
|
||||
glfs_close(s->fd);
|
||||
s->fd = NULL;
|
||||
|
|
|
@ -2133,6 +2133,18 @@
|
|||
#
|
||||
# @tcp: host address and port number
|
||||
#
|
||||
# This is similar to SocketAddress, only distinction:
|
||||
#
|
||||
# 1. GlusterServer is a flat union, SocketAddress is a simple union.
|
||||
# A flat union is nicer than simple because it avoids nesting
|
||||
# (i.e. more {}) on the wire.
|
||||
#
|
||||
# 2. GlusterServer lacks case 'fd', since gluster doesn't let you
|
||||
# pass in a file descriptor.
|
||||
#
|
||||
# GlusterServer is actually not Gluster-specific, its a
|
||||
# compatibility evolved into an alternate for SocketAddress.
|
||||
#
|
||||
# Since: 2.7
|
||||
##
|
||||
{ 'union': 'GlusterServer',
|
||||
|
@ -2154,13 +2166,16 @@
|
|||
#
|
||||
# @debug-level: #optional libgfapi log level (default '4' which is Error)
|
||||
#
|
||||
# @logfile: #optional libgfapi log file (default /dev/stderr)
|
||||
#
|
||||
# Since: 2.7
|
||||
##
|
||||
{ 'struct': 'BlockdevOptionsGluster',
|
||||
'data': { 'volume': 'str',
|
||||
'path': 'str',
|
||||
'server': ['GlusterServer'],
|
||||
'*debug-level': 'int' } }
|
||||
'*debug-level': 'int',
|
||||
'*logfile': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptions
|
||||
|
|
Loading…
Reference in a new issue