mirror of
https://github.com/qemu/qemu.git
synced 2024-12-15 15:33:29 +08:00
7838c67f22
QEMU block drivers are supposed to support aio_poll() from I/O completion callback functions. This means completion processing must be re-entrant. The standard approach is to schedule a BH during completion processing and cancel it at the end of processing. If aio_poll() is invoked by a callback function then the BH will run. The BH continues the suspended completion processing. All of this means that request A's cb() can synchronously wait for request B to complete. Previously the nvme block driver would hang because it didn't process completions from nested aio_poll(). Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Sergio Lopez <slp@redhat.com> Message-id: 20200617132201.1832152-8-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
242 lines
17 KiB
Plaintext
242 lines
17 KiB
Plaintext
# See docs/devel/tracing.txt for syntax documentation.
|
|
|
|
# ../block.c
|
|
bdrv_open_common(void *bs, const char *filename, int flags, const char *format_name) "bs %p filename \"%s\" flags 0x%x format_name \"%s\""
|
|
bdrv_lock_medium(void *bs, bool locked) "bs %p locked %d"
|
|
|
|
# block-backend.c
|
|
blk_co_preadv(void *blk, void *bs, int64_t offset, unsigned int bytes, int flags) "blk %p bs %p offset %"PRId64" bytes %u flags 0x%x"
|
|
blk_co_pwritev(void *blk, void *bs, int64_t offset, unsigned int bytes, int flags) "blk %p bs %p offset %"PRId64" bytes %u flags 0x%x"
|
|
blk_root_attach(void *child, void *blk, void *bs) "child %p blk %p bs %p"
|
|
blk_root_detach(void *child, void *blk, void *bs) "child %p blk %p bs %p"
|
|
|
|
# io.c
|
|
bdrv_co_preadv(void *bs, int64_t offset, int64_t nbytes, unsigned int flags) "bs %p offset %"PRId64" nbytes %"PRId64" flags 0x%x"
|
|
bdrv_co_pwritev(void *bs, int64_t offset, int64_t nbytes, unsigned int flags) "bs %p offset %"PRId64" nbytes %"PRId64" flags 0x%x"
|
|
bdrv_co_pwrite_zeroes(void *bs, int64_t offset, int count, int flags) "bs %p offset %"PRId64" count %d flags 0x%x"
|
|
bdrv_co_do_copy_on_readv(void *bs, int64_t offset, unsigned int bytes, int64_t cluster_offset, int64_t cluster_bytes) "bs %p offset %"PRId64" bytes %u cluster_offset %"PRId64" cluster_bytes %"PRId64
|
|
bdrv_co_copy_range_from(void *src, uint64_t src_offset, void *dst, uint64_t dst_offset, uint64_t bytes, int read_flags, int write_flags) "src %p offset %"PRIu64" dst %p offset %"PRIu64" bytes %"PRIu64" rw flags 0x%x 0x%x"
|
|
bdrv_co_copy_range_to(void *src, uint64_t src_offset, void *dst, uint64_t dst_offset, uint64_t bytes, int read_flags, int write_flags) "src %p offset %"PRIu64" dst %p offset %"PRIu64" bytes %"PRIu64" rw flags 0x%x 0x%x"
|
|
|
|
# stream.c
|
|
stream_one_iteration(void *s, int64_t offset, uint64_t bytes, int is_allocated) "s %p offset %" PRId64 " bytes %" PRIu64 " is_allocated %d"
|
|
stream_start(void *bs, void *base, void *s) "bs %p base %p s %p"
|
|
|
|
# commit.c
|
|
commit_one_iteration(void *s, int64_t offset, uint64_t bytes, int is_allocated) "s %p offset %" PRId64 " bytes %" PRIu64 " is_allocated %d"
|
|
commit_start(void *bs, void *base, void *top, void *s) "bs %p base %p top %p s %p"
|
|
|
|
# mirror.c
|
|
mirror_start(void *bs, void *s, void *opaque) "bs %p s %p opaque %p"
|
|
mirror_restart_iter(void *s, int64_t cnt) "s %p dirty count %"PRId64
|
|
mirror_before_flush(void *s) "s %p"
|
|
mirror_before_drain(void *s, int64_t cnt) "s %p dirty count %"PRId64
|
|
mirror_before_sleep(void *s, int64_t cnt, int synced, uint64_t delay_ns) "s %p dirty count %"PRId64" synced %d delay %"PRIu64"ns"
|
|
mirror_one_iteration(void *s, int64_t offset, uint64_t bytes) "s %p offset %" PRId64 " bytes %" PRIu64
|
|
mirror_iteration_done(void *s, int64_t offset, uint64_t bytes, int ret) "s %p offset %" PRId64 " bytes %" PRIu64 " ret %d"
|
|
mirror_yield(void *s, int64_t cnt, int buf_free_count, int in_flight) "s %p dirty count %"PRId64" free buffers %d in_flight %d"
|
|
mirror_yield_in_flight(void *s, int64_t offset, int in_flight) "s %p offset %" PRId64 " in_flight %d"
|
|
|
|
# backup.c
|
|
backup_do_cow_enter(void *job, int64_t start, int64_t offset, uint64_t bytes) "job %p start %" PRId64 " offset %" PRId64 " bytes %" PRIu64
|
|
backup_do_cow_return(void *job, int64_t offset, uint64_t bytes, int ret) "job %p offset %" PRId64 " bytes %" PRIu64 " ret %d"
|
|
|
|
# block-copy.c
|
|
block_copy_skip(void *bcs, int64_t start) "bcs %p start %"PRId64
|
|
block_copy_skip_range(void *bcs, int64_t start, uint64_t bytes) "bcs %p start %"PRId64" bytes %"PRId64
|
|
block_copy_process(void *bcs, int64_t start) "bcs %p start %"PRId64
|
|
block_copy_copy_range_fail(void *bcs, int64_t start, int ret) "bcs %p start %"PRId64" ret %d"
|
|
block_copy_read_fail(void *bcs, int64_t start, int ret) "bcs %p start %"PRId64" ret %d"
|
|
block_copy_write_fail(void *bcs, int64_t start, int ret) "bcs %p start %"PRId64" ret %d"
|
|
block_copy_write_zeroes_fail(void *bcs, int64_t start, int ret) "bcs %p start %"PRId64" ret %d"
|
|
|
|
# ../blockdev.c
|
|
qmp_block_job_cancel(void *job) "job %p"
|
|
qmp_block_job_pause(void *job) "job %p"
|
|
qmp_block_job_resume(void *job) "job %p"
|
|
qmp_block_job_complete(void *job) "job %p"
|
|
qmp_block_job_finalize(void *job) "job %p"
|
|
qmp_block_job_dismiss(void *job) "job %p"
|
|
qmp_block_stream(void *bs) "bs %p"
|
|
|
|
# file-posix.c
|
|
# file-win32.c
|
|
file_paio_submit(void *acb, void *opaque, int64_t offset, int count, int type) "acb %p opaque %p offset %"PRId64" count %d type %d"
|
|
file_copy_file_range(void *bs, int src, int64_t src_off, int dst, int64_t dst_off, int64_t bytes, int flags, int64_t ret) "bs %p src_fd %d offset %"PRIu64" dst_fd %d offset %"PRIu64" bytes %"PRIu64" flags %d ret %"PRId64
|
|
|
|
#io_uring.c
|
|
luring_init_state(void *s, size_t size) "s %p size %zu"
|
|
luring_cleanup_state(void *s) "%p freed"
|
|
luring_io_plug(void *s) "LuringState %p plug"
|
|
luring_io_unplug(void *s, int blocked, int plugged, int queued, int inflight) "LuringState %p blocked %d plugged %d queued %d inflight %d"
|
|
luring_do_submit(void *s, int blocked, int plugged, int queued, int inflight) "LuringState %p blocked %d plugged %d queued %d inflight %d"
|
|
luring_do_submit_done(void *s, int ret) "LuringState %p submitted to kernel %d"
|
|
luring_co_submit(void *bs, void *s, void *luringcb, int fd, uint64_t offset, size_t nbytes, int type) "bs %p s %p luringcb %p fd %d offset %" PRId64 " nbytes %zd type %d"
|
|
luring_process_completion(void *s, void *aiocb, int ret) "LuringState %p luringcb %p ret %d"
|
|
luring_io_uring_submit(void *s, int ret) "LuringState %p ret %d"
|
|
luring_resubmit_short_read(void *s, void *luringcb, int nread) "LuringState %p luringcb %p nread %d"
|
|
|
|
# qcow2.c
|
|
qcow2_add_task(void *co, void *bs, void *pool, const char *action, int cluster_type, uint64_t file_cluster_offset, uint64_t offset, uint64_t bytes, void *qiov, size_t qiov_offset) "co %p bs %p pool %p: %s: cluster_type %d file_cluster_offset %" PRIu64 " offset %" PRIu64 " bytes %" PRIu64 " qiov %p qiov_offset %zu"
|
|
qcow2_writev_start_req(void *co, int64_t offset, int bytes) "co %p offset 0x%" PRIx64 " bytes %d"
|
|
qcow2_writev_done_req(void *co, int ret) "co %p ret %d"
|
|
qcow2_writev_start_part(void *co) "co %p"
|
|
qcow2_writev_done_part(void *co, int cur_bytes) "co %p cur_bytes %d"
|
|
qcow2_writev_data(void *co, uint64_t offset) "co %p offset 0x%" PRIx64
|
|
qcow2_pwrite_zeroes_start_req(void *co, int64_t offset, int count) "co %p offset 0x%" PRIx64 " count %d"
|
|
qcow2_pwrite_zeroes(void *co, int64_t offset, int count) "co %p offset 0x%" PRIx64 " count %d"
|
|
qcow2_skip_cow(void *co, uint64_t offset, int nb_clusters) "co %p offset 0x%" PRIx64 " nb_clusters %d"
|
|
|
|
# qcow2-cluster.c
|
|
qcow2_alloc_clusters_offset(void *co, uint64_t offset, int bytes) "co %p offset 0x%" PRIx64 " bytes %d"
|
|
qcow2_handle_copied(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offset 0x%" PRIx64 " host_offset 0x%" PRIx64 " bytes 0x%" PRIx64
|
|
qcow2_handle_alloc(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offset 0x%" PRIx64 " host_offset 0x%" PRIx64 " bytes 0x%" PRIx64
|
|
qcow2_do_alloc_clusters_offset(void *co, uint64_t guest_offset, uint64_t host_offset, int nb_clusters) "co %p guest_offset 0x%" PRIx64 " host_offset 0x%" PRIx64 " nb_clusters %d"
|
|
qcow2_cluster_alloc_phys(void *co) "co %p"
|
|
qcow2_cluster_link_l2(void *co, int nb_clusters) "co %p nb_clusters %d"
|
|
|
|
qcow2_l2_allocate(void *bs, int l1_index) "bs %p l1_index %d"
|
|
qcow2_l2_allocate_get_empty(void *bs, int l1_index) "bs %p l1_index %d"
|
|
qcow2_l2_allocate_write_l2(void *bs, int l1_index) "bs %p l1_index %d"
|
|
qcow2_l2_allocate_write_l1(void *bs, int l1_index) "bs %p l1_index %d"
|
|
qcow2_l2_allocate_done(void *bs, int l1_index, int ret) "bs %p l1_index %d ret %d"
|
|
|
|
# qcow2-cache.c
|
|
qcow2_cache_get(void *co, int c, uint64_t offset, bool read_from_disk) "co %p is_l2_cache %d offset 0x%" PRIx64 " read_from_disk %d"
|
|
qcow2_cache_get_replace_entry(void *co, int c, int i) "co %p is_l2_cache %d index %d"
|
|
qcow2_cache_get_read(void *co, int c, int i) "co %p is_l2_cache %d index %d"
|
|
qcow2_cache_get_done(void *co, int c, int i) "co %p is_l2_cache %d index %d"
|
|
qcow2_cache_flush(void *co, int c) "co %p is_l2_cache %d"
|
|
qcow2_cache_entry_flush(void *co, int c, int i) "co %p is_l2_cache %d index %d"
|
|
|
|
# qcow2-refcount.c
|
|
qcow2_process_discards_failed_region(uint64_t offset, uint64_t bytes, int ret) "offset 0x%" PRIx64 " bytes 0x%" PRIx64 " ret %d"
|
|
|
|
# qed-l2-cache.c
|
|
qed_alloc_l2_cache_entry(void *l2_cache, void *entry) "l2_cache %p entry %p"
|
|
qed_unref_l2_cache_entry(void *entry, int ref) "entry %p ref %d"
|
|
qed_find_l2_cache_entry(void *l2_cache, void *entry, uint64_t offset, int ref) "l2_cache %p entry %p offset %"PRIu64" ref %d"
|
|
|
|
# qed-table.c
|
|
qed_read_table(void *s, uint64_t offset, void *table) "s %p offset %"PRIu64" table %p"
|
|
qed_read_table_cb(void *s, void *table, int ret) "s %p table %p ret %d"
|
|
qed_write_table(void *s, uint64_t offset, void *table, unsigned int index, unsigned int n) "s %p offset %"PRIu64" table %p index %u n %u"
|
|
qed_write_table_cb(void *s, void *table, int flush, int ret) "s %p table %p flush %d ret %d"
|
|
|
|
# qed.c
|
|
qed_need_check_timer_cb(void *s) "s %p"
|
|
qed_start_need_check_timer(void *s) "s %p"
|
|
qed_cancel_need_check_timer(void *s) "s %p"
|
|
qed_aio_complete(void *s, void *acb, int ret) "s %p acb %p ret %d"
|
|
qed_aio_setup(void *s, void *acb, int64_t sector_num, int nb_sectors, void *opaque, int flags) "s %p acb %p sector_num %"PRId64" nb_sectors %d opaque %p flags 0x%x"
|
|
qed_aio_next_io(void *s, void *acb, int ret, uint64_t cur_pos) "s %p acb %p ret %d cur_pos %"PRIu64
|
|
qed_aio_read_data(void *s, void *acb, int ret, uint64_t offset, size_t len) "s %p acb %p ret %d offset %"PRIu64" len %zu"
|
|
qed_aio_write_data(void *s, void *acb, int ret, uint64_t offset, size_t len) "s %p acb %p ret %d offset %"PRIu64" len %zu"
|
|
qed_aio_write_prefill(void *s, void *acb, uint64_t start, size_t len, uint64_t offset) "s %p acb %p start %"PRIu64" len %zu offset %"PRIu64
|
|
qed_aio_write_postfill(void *s, void *acb, uint64_t start, size_t len, uint64_t offset) "s %p acb %p start %"PRIu64" len %zu offset %"PRIu64
|
|
qed_aio_write_main(void *s, void *acb, int ret, uint64_t offset, size_t len) "s %p acb %p ret %d offset %"PRIu64" len %zu"
|
|
|
|
# vxhs.c
|
|
vxhs_iio_callback(int error) "ctx is NULL: error %d"
|
|
vxhs_iio_callback_chnfail(int err, int error) "QNIO channel failed, no i/o %d, %d"
|
|
vxhs_iio_callback_unknwn(int opcode, int err) "unexpected opcode %d, errno %d"
|
|
vxhs_aio_rw_invalid(int req) "Invalid I/O request iodir %d"
|
|
vxhs_aio_rw_ioerr(char *guid, int iodir, uint64_t size, uint64_t off, void *acb, int ret, int err) "IO ERROR (vDisk %s) FOR : Read/Write = %d size = %"PRIu64" offset = %"PRIu64" ACB = %p. Error = %d, errno = %d"
|
|
vxhs_get_vdisk_stat_err(char *guid, int ret, int err) "vDisk (%s) stat ioctl failed, ret = %d, errno = %d"
|
|
vxhs_get_vdisk_stat(char *vdisk_guid, uint64_t vdisk_size) "vDisk %s stat ioctl returned size %"PRIu64
|
|
vxhs_complete_aio(void *acb, uint64_t ret) "aio failed acb %p ret %"PRIu64
|
|
vxhs_parse_uri_filename(const char *filename) "URI passed via bdrv_parse_filename %s"
|
|
vxhs_open_vdiskid(const char *vdisk_id) "Opening vdisk-id %s"
|
|
vxhs_open_hostinfo(char *of_vsa_addr, int port) "Adding host %s:%d to BDRVVXHSState"
|
|
vxhs_open_iio_open(const char *host) "Failed to connect to storage agent on host %s"
|
|
vxhs_parse_uri_hostinfo(char *host, int port) "Host: IP %s, Port %d"
|
|
vxhs_close(char *vdisk_guid) "Closing vdisk %s"
|
|
vxhs_get_creds(const char *cacert, const char *client_key, const char *client_cert) "cacert %s, client_key %s, client_cert %s"
|
|
|
|
# nvme.c
|
|
nvme_kick(void *s, int queue) "s %p queue %d"
|
|
nvme_dma_flush_queue_wait(void *s) "s %p"
|
|
nvme_error(int cmd_specific, int sq_head, int sqid, int cid, int status) "cmd_specific %d sq_head %d sqid %d cid %d status 0x%x"
|
|
nvme_process_completion(void *s, int index, int inflight) "s %p queue %d inflight %d"
|
|
nvme_process_completion_queue_plugged(void *s, int index) "s %p queue %d"
|
|
nvme_complete_command(void *s, int index, int cid) "s %p queue %d cid %d"
|
|
nvme_submit_command(void *s, int index, int cid) "s %p queue %d cid %d"
|
|
nvme_submit_command_raw(int c0, int c1, int c2, int c3, int c4, int c5, int c6, int c7) "%02x %02x %02x %02x %02x %02x %02x %02x"
|
|
nvme_handle_event(void *s) "s %p"
|
|
nvme_poll_cb(void *s) "s %p"
|
|
nvme_prw_aligned(void *s, int is_write, uint64_t offset, uint64_t bytes, int flags, int niov) "s %p is_write %d offset %"PRId64" bytes %"PRId64" flags %d niov %d"
|
|
nvme_write_zeroes(void *s, uint64_t offset, uint64_t bytes, int flags) "s %p offset %"PRId64" bytes %"PRId64" flags %d"
|
|
nvme_qiov_unaligned(const void *qiov, int n, void *base, size_t size, int align) "qiov %p n %d base %p size 0x%zx align 0x%x"
|
|
nvme_prw_buffered(void *s, uint64_t offset, uint64_t bytes, int niov, int is_write) "s %p offset %"PRId64" bytes %"PRId64" niov %d is_write %d"
|
|
nvme_rw_done(void *s, int is_write, uint64_t offset, uint64_t bytes, int ret) "s %p is_write %d offset %"PRId64" bytes %"PRId64" ret %d"
|
|
nvme_dsm(void *s, uint64_t offset, uint64_t bytes) "s %p offset %"PRId64" bytes %"PRId64""
|
|
nvme_dsm_done(void *s, uint64_t offset, uint64_t bytes, int ret) "s %p offset %"PRId64" bytes %"PRId64" ret %d"
|
|
nvme_dma_map_flush(void *s) "s %p"
|
|
nvme_free_req_queue_wait(void *q) "q %p"
|
|
nvme_cmd_map_qiov(void *s, void *cmd, void *req, void *qiov, int entries) "s %p cmd %p req %p qiov %p entries %d"
|
|
nvme_cmd_map_qiov_pages(void *s, int i, uint64_t page) "s %p page[%d] 0x%"PRIx64
|
|
nvme_cmd_map_qiov_iov(void *s, int i, void *page, int pages) "s %p iov[%d] %p pages %d"
|
|
|
|
# iscsi.c
|
|
iscsi_xcopy(void *src_lun, uint64_t src_off, void *dst_lun, uint64_t dst_off, uint64_t bytes, int ret) "src_lun %p offset %"PRIu64" dst_lun %p offset %"PRIu64" bytes %"PRIu64" ret %d"
|
|
|
|
# nbd.c
|
|
nbd_parse_blockstatus_compliance(const char *err) "ignoring extra data from non-compliant server: %s"
|
|
nbd_structured_read_compliance(const char *type) "server sent non-compliant unaligned read %s chunk"
|
|
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_client_connect(const char *export_name) "export '%s'"
|
|
nbd_client_connect_success(const char *export_name) "export '%s'"
|
|
|
|
# ssh.c
|
|
ssh_restart_coroutine(void *co) "co=%p"
|
|
ssh_flush(void) "fsync"
|
|
ssh_check_host_key_knownhosts(void) "host key OK"
|
|
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, size_t actual_size) "sftp_read buf=%p size=%zu (actual size=%zu)"
|
|
ssh_read_return(ssize_t ret, int sftp_err) "sftp_read returned %zd (sftp error=%d)"
|
|
ssh_write(int64_t offset, size_t size) "offset=%" PRIi64 " size=%zu"
|
|
ssh_write_buf(void *buf, size_t size, size_t actual_size) "sftp_write buf=%p size=%zu (actual size=%zu)"
|
|
ssh_write_return(ssize_t ret, int sftp_err) "sftp_write returned %zd (sftp error=%d)"
|
|
ssh_seek(int64_t offset) "seeking to offset=%" PRIi64
|
|
ssh_auth_methods(int methods) "auth methods=0x%x"
|
|
ssh_server_status(int status) "server status=%d"
|
|
|
|
# curl.c
|
|
curl_timer_cb(long timeout_ms) "timer callback timeout_ms %ld"
|
|
curl_sock_cb(int action, int fd) "sock action %d on fd %d"
|
|
curl_read_cb(size_t realsize) "just reading %zu bytes"
|
|
curl_open(const char *file) "opening %s"
|
|
curl_open_size(uint64_t size) "size = %" PRIu64
|
|
curl_setup_preadv(uint64_t bytes, uint64_t start, const char *range) "reading %" PRIu64 " at %" PRIu64 " (%s)"
|
|
curl_close(void) "close"
|
|
|
|
# file-posix.c
|
|
file_xfs_write_zeroes(const char *error) "cannot write zero range (%s)"
|
|
file_xfs_discard(const char *error) "cannot punch hole (%s)"
|
|
file_FindEjectableOpticalMedia(const char *media) "Matching using %s"
|
|
file_setup_cdrom(const char *partition) "Using %s as optical disc"
|
|
file_hdev_is_sg(int type, int version) "SG device found: type=%d, version=%d"
|
|
|
|
# sheepdog.c
|
|
sheepdog_reconnect_to_sdog(void) "Wait for connection to be established"
|
|
sheepdog_aio_read_response(void) "disable cache since the server doesn't support it"
|
|
sheepdog_open(uint32_t vid) "0x%" PRIx32 " snapshot inode was open"
|
|
sheepdog_close(const char *name) "%s"
|
|
sheepdog_create_branch_snapshot(uint32_t vdi) "0x%" PRIx32 " is snapshot"
|
|
sheepdog_create_branch_created(uint32_t vdi) "0x%" PRIx32 " is created"
|
|
sheepdog_create_branch_new(uint32_t vdi) "0x%" PRIx32 " was newly created"
|
|
sheepdog_co_rw_vector_update(uint32_t vdi, uint64_t oid, uint64_t data, long idx) "update ino (%" PRIu32 ") %" PRIu64 " %" PRIu64 " %ld"
|
|
sheepdog_co_rw_vector_new(uint64_t oid) "new oid 0x%" PRIx64
|
|
sheepdog_snapshot_create_info(const char *sn_name, const char *id, const char *name, int64_t size, int is_snapshot) "sn_info: name %s id_str %s s: name %s vm_state_size %" PRId64 " " "is_snapshot %d"
|
|
sheepdog_snapshot_create(const char *sn_name, const char *id) "%s %s"
|
|
sheepdog_snapshot_create_inode(const char *name, uint32_t snap, uint32_t vdi) "s->inode: name %s snap_id 0x%" PRIx32 " vdi 0x%" PRIx32
|
|
|
|
# ssh.c
|
|
sftp_error(const char *op, const char *ssh_err, int ssh_err_code, int sftp_err_code) "%s failed: %s (libssh error code: %d, sftp error code: %d)"
|