block/ssh: Convert from DPRINTF() macro to trace events
Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Richard W.M. Jones <rjones@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20181213162727.17438-2-lvivier@redhat.com [mreitz: Fixed type of ssh_{read,write}_return's parameter to be ssize_t instead of size_t] Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
dc2b651a0b
commit
023908a24d
46
block/ssh.c
46
block/ssh.c
|
@ -41,27 +41,17 @@
|
||||||
#include "qapi/qmp/qstring.h"
|
#include "qapi/qmp/qstring.h"
|
||||||
#include "qapi/qobject-input-visitor.h"
|
#include "qapi/qobject-input-visitor.h"
|
||||||
#include "qapi/qobject-output-visitor.h"
|
#include "qapi/qobject-output-visitor.h"
|
||||||
|
#include "trace.h"
|
||||||
|
|
||||||
/* DEBUG_SSH=1 enables the DPRINTF (debugging printf) statements in
|
/*
|
||||||
* this block driver code.
|
|
||||||
*
|
|
||||||
* TRACE_LIBSSH2=<bitmask> enables tracing in libssh2 itself. Note
|
* TRACE_LIBSSH2=<bitmask> enables tracing in libssh2 itself. Note
|
||||||
* that this requires that libssh2 was specially compiled with the
|
* that this requires that libssh2 was specially compiled with the
|
||||||
* `./configure --enable-debug' option, so most likely you will have
|
* `./configure --enable-debug' option, so most likely you will have
|
||||||
* to compile it yourself. The meaning of <bitmask> is described
|
* to compile it yourself. The meaning of <bitmask> is described
|
||||||
* here: http://www.libssh2.org/libssh2_trace.html
|
* here: http://www.libssh2.org/libssh2_trace.html
|
||||||
*/
|
*/
|
||||||
#define DEBUG_SSH 0
|
|
||||||
#define TRACE_LIBSSH2 0 /* or try: LIBSSH2_TRACE_SFTP */
|
#define TRACE_LIBSSH2 0 /* or try: LIBSSH2_TRACE_SFTP */
|
||||||
|
|
||||||
#define DPRINTF(fmt, ...) \
|
|
||||||
do { \
|
|
||||||
if (DEBUG_SSH) { \
|
|
||||||
fprintf(stderr, "ssh: %-15s " fmt "\n", \
|
|
||||||
__func__, ##__VA_ARGS__); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
typedef struct BDRVSSHState {
|
typedef struct BDRVSSHState {
|
||||||
/* Coroutine. */
|
/* Coroutine. */
|
||||||
CoMutex lock;
|
CoMutex lock;
|
||||||
|
@ -336,7 +326,7 @@ static int check_host_key_knownhosts(BDRVSSHState *s,
|
||||||
switch (r) {
|
switch (r) {
|
||||||
case LIBSSH2_KNOWNHOST_CHECK_MATCH:
|
case LIBSSH2_KNOWNHOST_CHECK_MATCH:
|
||||||
/* OK */
|
/* OK */
|
||||||
DPRINTF("host key OK: %s", found->key);
|
trace_ssh_check_host_key_knownhosts(found->key);
|
||||||
break;
|
break;
|
||||||
case LIBSSH2_KNOWNHOST_CHECK_MISMATCH:
|
case LIBSSH2_KNOWNHOST_CHECK_MISMATCH:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -721,8 +711,7 @@ static int connect_to_ssh(BDRVSSHState *s, BlockdevOptionsSsh *opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open the remote file. */
|
/* Open the remote file. */
|
||||||
DPRINTF("opening file %s flags=0x%x creat_mode=0%o",
|
trace_ssh_connect_to_ssh(opts->path, ssh_flags, creat_mode);
|
||||||
opts->path, ssh_flags, creat_mode);
|
|
||||||
s->sftp_handle = libssh2_sftp_open(s->sftp, opts->path, ssh_flags,
|
s->sftp_handle = libssh2_sftp_open(s->sftp, opts->path, ssh_flags,
|
||||||
creat_mode);
|
creat_mode);
|
||||||
if (!s->sftp_handle) {
|
if (!s->sftp_handle) {
|
||||||
|
@ -890,7 +879,7 @@ static int coroutine_fn ssh_co_create_opts(const char *filename, QemuOpts *opts,
|
||||||
/* Get desired file size. */
|
/* Get desired file size. */
|
||||||
ssh_opts->size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
|
ssh_opts->size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
|
||||||
BDRV_SECTOR_SIZE);
|
BDRV_SECTOR_SIZE);
|
||||||
DPRINTF("total_size=%" PRIi64, ssh_opts->size);
|
trace_ssh_co_create_opts(ssh_opts->size);
|
||||||
|
|
||||||
uri_options = qdict_new();
|
uri_options = qdict_new();
|
||||||
ret = parse_uri(filename, uri_options, errp);
|
ret = parse_uri(filename, uri_options, errp);
|
||||||
|
@ -946,7 +935,7 @@ static void restart_coroutine(void *opaque)
|
||||||
BDRVSSHState *s = bs->opaque;
|
BDRVSSHState *s = bs->opaque;
|
||||||
AioContext *ctx = bdrv_get_aio_context(bs);
|
AioContext *ctx = bdrv_get_aio_context(bs);
|
||||||
|
|
||||||
DPRINTF("co=%p", restart->co);
|
trace_ssh_restart_coroutine(restart->co);
|
||||||
aio_set_fd_handler(ctx, s->sock, false, NULL, NULL, NULL, NULL);
|
aio_set_fd_handler(ctx, s->sock, false, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
aio_co_wake(restart->co);
|
aio_co_wake(restart->co);
|
||||||
|
@ -974,13 +963,12 @@ static coroutine_fn void co_yield(BDRVSSHState *s, BlockDriverState *bs)
|
||||||
wr_handler = restart_coroutine;
|
wr_handler = restart_coroutine;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTF("s->sock=%d rd_handler=%p wr_handler=%p", s->sock,
|
trace_ssh_co_yield(s->sock, rd_handler, wr_handler);
|
||||||
rd_handler, wr_handler);
|
|
||||||
|
|
||||||
aio_set_fd_handler(bdrv_get_aio_context(bs), s->sock,
|
aio_set_fd_handler(bdrv_get_aio_context(bs), s->sock,
|
||||||
false, rd_handler, wr_handler, NULL, &restart);
|
false, rd_handler, wr_handler, NULL, &restart);
|
||||||
qemu_coroutine_yield();
|
qemu_coroutine_yield();
|
||||||
DPRINTF("s->sock=%d - back", s->sock);
|
trace_ssh_co_yield_back(s->sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SFTP has a function `libssh2_sftp_seek64' which seeks to a position
|
/* SFTP has a function `libssh2_sftp_seek64' which seeks to a position
|
||||||
|
@ -1003,7 +991,7 @@ static void ssh_seek(BDRVSSHState *s, int64_t offset, int flags)
|
||||||
bool force = (flags & SSH_SEEK_FORCE) != 0;
|
bool force = (flags & SSH_SEEK_FORCE) != 0;
|
||||||
|
|
||||||
if (force || op_read != s->offset_op_read || offset != s->offset) {
|
if (force || op_read != s->offset_op_read || offset != s->offset) {
|
||||||
DPRINTF("seeking to offset=%" PRIi64, offset);
|
trace_ssh_seek(offset);
|
||||||
libssh2_sftp_seek64(s->sftp_handle, offset);
|
libssh2_sftp_seek64(s->sftp_handle, offset);
|
||||||
s->offset = offset;
|
s->offset = offset;
|
||||||
s->offset_op_read = op_read;
|
s->offset_op_read = op_read;
|
||||||
|
@ -1019,7 +1007,7 @@ static coroutine_fn int ssh_read(BDRVSSHState *s, BlockDriverState *bs,
|
||||||
char *buf, *end_of_vec;
|
char *buf, *end_of_vec;
|
||||||
struct iovec *i;
|
struct iovec *i;
|
||||||
|
|
||||||
DPRINTF("offset=%" PRIi64 " size=%zu", offset, size);
|
trace_ssh_read(offset, size);
|
||||||
|
|
||||||
ssh_seek(s, offset, SSH_SEEK_READ);
|
ssh_seek(s, offset, SSH_SEEK_READ);
|
||||||
|
|
||||||
|
@ -1038,9 +1026,9 @@ static coroutine_fn int ssh_read(BDRVSSHState *s, BlockDriverState *bs,
|
||||||
*/
|
*/
|
||||||
for (got = 0; got < size; ) {
|
for (got = 0; got < size; ) {
|
||||||
again:
|
again:
|
||||||
DPRINTF("sftp_read buf=%p size=%zu", buf, end_of_vec - buf);
|
trace_ssh_read_buf(buf, end_of_vec - buf);
|
||||||
r = libssh2_sftp_read(s->sftp_handle, buf, end_of_vec - buf);
|
r = libssh2_sftp_read(s->sftp_handle, buf, end_of_vec - buf);
|
||||||
DPRINTF("sftp_read returned %zd", r);
|
trace_ssh_read_return(r);
|
||||||
|
|
||||||
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
||||||
co_yield(s, bs);
|
co_yield(s, bs);
|
||||||
|
@ -1094,7 +1082,7 @@ static int ssh_write(BDRVSSHState *s, BlockDriverState *bs,
|
||||||
char *buf, *end_of_vec;
|
char *buf, *end_of_vec;
|
||||||
struct iovec *i;
|
struct iovec *i;
|
||||||
|
|
||||||
DPRINTF("offset=%" PRIi64 " size=%zu", offset, size);
|
trace_ssh_write(offset, size);
|
||||||
|
|
||||||
ssh_seek(s, offset, SSH_SEEK_WRITE);
|
ssh_seek(s, offset, SSH_SEEK_WRITE);
|
||||||
|
|
||||||
|
@ -1108,9 +1096,9 @@ static int ssh_write(BDRVSSHState *s, BlockDriverState *bs,
|
||||||
|
|
||||||
for (written = 0; written < size; ) {
|
for (written = 0; written < size; ) {
|
||||||
again:
|
again:
|
||||||
DPRINTF("sftp_write buf=%p size=%zu", buf, end_of_vec - buf);
|
trace_ssh_write_buf(buf, end_of_vec - buf);
|
||||||
r = libssh2_sftp_write(s->sftp_handle, buf, end_of_vec - buf);
|
r = libssh2_sftp_write(s->sftp_handle, buf, end_of_vec - buf);
|
||||||
DPRINTF("sftp_write returned %zd", r);
|
trace_ssh_write_return(r);
|
||||||
|
|
||||||
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
||||||
co_yield(s, bs);
|
co_yield(s, bs);
|
||||||
|
@ -1187,7 +1175,7 @@ static coroutine_fn int ssh_flush(BDRVSSHState *s, BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
DPRINTF("fsync");
|
trace_ssh_flush();
|
||||||
again:
|
again:
|
||||||
r = libssh2_sftp_fsync(s->sftp_handle);
|
r = libssh2_sftp_fsync(s->sftp_handle);
|
||||||
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
if (r == LIBSSH2_ERROR_EAGAIN || r == LIBSSH2_ERROR_TIMEOUT) {
|
||||||
|
@ -1238,7 +1226,7 @@ static int64_t ssh_getlength(BlockDriverState *bs)
|
||||||
|
|
||||||
/* Note we cannot make a libssh2 call here. */
|
/* Note we cannot make a libssh2 call here. */
|
||||||
length = (int64_t) s->attrs.filesize;
|
length = (int64_t) s->attrs.filesize;
|
||||||
DPRINTF("length=%" PRIi64, length);
|
trace_ssh_getlength(length);
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,3 +160,20 @@ iscsi_xcopy(void *src_lun, uint64_t src_off, void *dst_lun, uint64_t dst_off, ui
|
||||||
# block/nbd-client.c
|
# block/nbd-client.c
|
||||||
nbd_read_reply_entry_fail(int ret, const char *err) "ret = %d, err: %s"
|
nbd_read_reply_entry_fail(int ret, const char *err) "ret = %d, err: %s"
|
||||||
nbd_co_request_fail(uint64_t from, uint32_t len, uint64_t handle, uint16_t flags, uint16_t type, const char *name, int ret, const char *err) "Request failed { .from = %" PRIu64", .len = %" PRIu32 ", .handle = %" PRIu64 ", .flags = 0x%" PRIx16 ", .type = %" PRIu16 " (%s) } ret = %d, err: %s"
|
nbd_co_request_fail(uint64_t from, uint32_t len, uint64_t handle, uint16_t flags, uint16_t type, const char *name, int ret, const char *err) "Request failed { .from = %" PRIu64", .len = %" PRIu32 ", .handle = %" PRIu64 ", .flags = 0x%" PRIx16 ", .type = %" PRIu16 " (%s) } ret = %d, err: %s"
|
||||||
|
|
||||||
|
# block/ssh.c
|
||||||
|
ssh_restart_coroutine(void *co) "co=%p"
|
||||||
|
ssh_flush(void) "fsync"
|
||||||
|
ssh_check_host_key_knownhosts(const char *key) "host key OK: %s"
|
||||||
|
ssh_connect_to_ssh(char *path, int flags, int mode) "opening file %s flags=0x%x creat_mode=0%o"
|
||||||
|
ssh_co_yield(int sock, void *rd_handler, void *wr_handler) "s->sock=%d rd_handler=%p wr_handler=%p"
|
||||||
|
ssh_co_yield_back(int sock) "s->sock=%d - back"
|
||||||
|
ssh_getlength(int64_t length) "length=%" PRIi64
|
||||||
|
ssh_co_create_opts(uint64_t size) "total_size=%" PRIu64
|
||||||
|
ssh_read(int64_t offset, size_t size) "offset=%" PRIi64 " size=%zu"
|
||||||
|
ssh_read_buf(void *buf, size_t size) "sftp_read buf=%p size=%zu"
|
||||||
|
ssh_read_return(ssize_t ret) "sftp_read returned %zd"
|
||||||
|
ssh_write(int64_t offset, size_t size) "offset=%" PRIi64 " size=%zu"
|
||||||
|
ssh_write_buf(void *buf, size_t size) "sftp_write buf=%p size=%zu"
|
||||||
|
ssh_write_return(ssize_t ret) "sftp_write returned %zd"
|
||||||
|
ssh_seek(int64_t offset) "seeking to offset=%" PRIi64
|
||||||
|
|
Loading…
Reference in a new issue