mirror of
https://github.com/xemu-project/xemu.git
synced 2024-12-11 05:23:58 +00:00
0c8022876f
We are generally moving to int64_t for both offset and bytes parameters on all io paths. Main motivation is realization of 64-bit write_zeroes operation for fast zeroing large disk chunks, up to the whole disk. We chose signed type, to be consistent with off_t (which is signed) and with possibility for signed return type (where negative value means error). So, convert driver discard handlers bytes parameter to int64_t. The only caller of all updated function is bdrv_co_pdiscard in block/io.c. It is already prepared to work with 64bit requests, but pass at most max(bs->bl.max_pdiscard, INT_MAX) to the driver. Let's look at all updated functions: blkdebug: all calculations are still OK, thanks to bdrv_check_qiov_request(). both rule_check and bdrv_co_pdiscard are 64bit blklogwrites: pass to blk_loc_writes_co_log which is 64bit blkreplay, copy-on-read, filter-compress: pass to bdrv_co_pdiscard, OK copy-before-write: pass to bdrv_co_pdiscard which is 64bit and to cbw_do_copy_before_write which is 64bit file-posix: one handler calls raw_account_discard() is 64bit and both handlers calls raw_do_pdiscard(). Update raw_do_pdiscard, which pass to RawPosixAIOData::aio_nbytes, which is 64bit (and calls raw_account_discard()) gluster: somehow, third argument of glfs_discard_async is size_t. Let's set max_pdiscard accordingly. iscsi: iscsi_allocmap_set_invalid is 64bit, !is_byte_request_lun_aligned is 64bit. list.num is uint32_t. Let's clarify max_pdiscard and pdiscard_alignment. mirror_top: pass to bdrv_mirror_top_do_write() which is 64bit nbd: protocol limitation. max_pdiscard is alredy set strict enough, keep it as is for now. nvme: buf.nlb is uint32_t and we do shift. So, add corresponding limits to nvme_refresh_limits(). preallocate: pass to bdrv_co_pdiscard() which is 64bit. rbd: pass to qemu_rbd_start_co() which is 64bit. qcow2: calculations are still OK, thanks to bdrv_check_qiov_request(), qcow2_cluster_discard() is 64bit. raw-format: raw_adjust_offset() is 64bit, bdrv_co_pdiscard too. throttle: pass to bdrv_co_pdiscard() which is 64bit and to throttle_group_co_io_limits_intercept() which is 64bit as well. test-block-iothread: bytes argument is unused Great! Now all drivers are prepared to handle 64bit discard requests, or else have explicit max_pdiscard limits. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210903102807.27127-11-vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com>
213 lines
15 KiB
Plaintext
213 lines
15 KiB
Plaintext
# See docs/devel/tracing.rst 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_part(void *bs, int64_t offset, int64_t bytes, unsigned int flags) "bs %p offset %" PRId64 " bytes %" PRId64 " flags 0x%x"
|
|
bdrv_co_pwritev_part(void *bs, int64_t offset, int64_t bytes, unsigned int flags) "bs %p offset %" PRId64 " bytes %" PRId64 " flags 0x%x"
|
|
bdrv_co_pwrite_zeroes(void *bs, int64_t offset, int64_t bytes, int flags) "bs %p offset %" PRId64 " bytes %" PRId64 " flags 0x%x"
|
|
bdrv_co_do_copy_on_readv(void *bs, int64_t offset, int64_t bytes, int64_t cluster_offset, int64_t cluster_bytes) "bs %p offset %" PRId64 " bytes %" PRId64 " cluster_offset %" PRId64 " cluster_bytes %" PRId64
|
|
bdrv_co_copy_range_from(void *src, int64_t src_offset, void *dst, int64_t dst_offset, int64_t bytes, int read_flags, int write_flags) "src %p offset %" PRId64 " dst %p offset %" PRId64 " bytes %" PRId64 " rw flags 0x%x 0x%x"
|
|
bdrv_co_copy_range_to(void *src, int64_t src_offset, void *dst, int64_t dst_offset, int64_t bytes, int read_flags, int write_flags) "src %p offset %" PRId64 " dst %p offset %" PRId64 " bytes %" PRId64 " 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_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-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"
|
|
|
|
# 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 host_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, int64_t bytes) "co %p offset 0x%" PRIx64 " bytes %" PRId64
|
|
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, int64_t bytes) "co %p offset 0x%" PRIx64 " bytes %" PRId64
|
|
qcow2_pwrite_zeroes(void *co, int64_t offset, int64_t bytes) "co %p offset 0x%" PRIx64 " bytes %" PRId64
|
|
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"
|
|
|
|
# nvme.c
|
|
nvme_controller_capability_raw(uint64_t value) "0x%08"PRIx64
|
|
nvme_controller_capability(const char *desc, uint64_t value) "%s: %"PRIu64
|
|
nvme_controller_spec_version(uint32_t mjr, uint32_t mnr, uint32_t ter) "Specification supported: %u.%u.%u"
|
|
nvme_kick(void *s, unsigned q_index) "s %p q #%u"
|
|
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, unsigned q_index, int inflight) "s %p q #%u inflight %d"
|
|
nvme_process_completion_queue_plugged(void *s, unsigned q_index) "s %p q #%u"
|
|
nvme_complete_command(void *s, unsigned q_index, int cid) "s %p q #%u cid %d"
|
|
nvme_submit_command(void *s, unsigned q_index, int cid) "s %p q #%u 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_queue(void *s, unsigned q_index) "s %p q #%u"
|
|
nvme_prw_aligned(void *s, int is_write, uint64_t offset, uint64_t bytes, int flags, int niov) "s %p is_write %d offset 0x%"PRIx64" bytes %"PRId64" flags %d niov %d"
|
|
nvme_write_zeroes(void *s, uint64_t offset, uint64_t bytes, int flags) "s %p offset 0x%"PRIx64" 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 0x%"PRIx64" 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 0x%"PRIx64" bytes %"PRId64" ret %d"
|
|
nvme_dsm(void *s, int64_t offset, int64_t bytes) "s %p offset 0x%"PRIx64" bytes %"PRId64""
|
|
nvme_dsm_done(void *s, int64_t offset, int64_t bytes, int ret) "s %p offset 0x%"PRIx64" bytes %"PRId64" ret %d"
|
|
nvme_dma_map_flush(void *s) "s %p"
|
|
nvme_free_req_queue_wait(void *s, unsigned q_index) "s %p q #%u"
|
|
nvme_create_queue_pair(unsigned q_index, void *q, size_t size, void *aio_context, int fd) "index %u q %p size %zu aioctx %p fd %d"
|
|
nvme_free_queue_pair(unsigned q_index, void *q) "index %u 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_handshake(const char *export_name) "export '%s'"
|
|
nbd_client_handshake_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_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
|
|
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"
|
|
file_flush_fdatasync_failed(int err) "errno %d"
|
|
|
|
# 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)"
|