ublk: restore auto buf unregister refcount optimization#519
Open
blktests-ci[bot] wants to merge 18 commits intofor-next_basefrom
Open
ublk: restore auto buf unregister refcount optimization#519blktests-ci[bot] wants to merge 18 commits intofor-next_basefrom
blktests-ci[bot] wants to merge 18 commits intofor-next_basefrom
Conversation
Called when copy_process() is called to copy state to a new child. Right now this is just a stub, but will be used shortly to properly handle fork'ing of task based io_uring restrictions. Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Currently io_uring supports restricting operations on a per-ring basis. To use those, the ring must be setup in a disabled state by setting IORING_SETUP_R_DISABLED. Then restrictions can be set for the ring, and the ring can then be enabled. This commit adds support for IORING_REGISTER_RESTRICTIONS with ring_fd == -1, like the other "blind" register opcodes which work on the task rather than a specific ring. This allows registration of the same kind of restrictions as can been done on a specific ring, but with the task itself. Once done, any ring created will inherit these restrictions. If a restriction filter is registered with a task, then it's inherited on fork for its children. Children may only further restrict operations, not extend them. Inheriting restrictions include both the classic IORING_REGISTER_RESTRICTIONS based restrictions, as well as the BPF filters that have been registered with the task via IORING_REGISTER_BPF_FILTER. Signed-off-by: Jens Axboe <axboe@kernel.dk>
* for-7.0/block: (108 commits) block: rnull: remove imports available via prelude block: remove bio_last_bvec_all md raid: fix hang when stopping arrays with metadata through dm-raid md-cluster: fix NULL pointer dereference in process_metadata_update md/bitmap: fix GPF in write_page caused by resize race md/md-llbitmap: fix percpu_ref not resurrected on suspend timeout md/raid5: fix IO hang with degraded array with llbitmap md: remove recovery_disabled md/raid10: cleanup skip handling in raid10_sync_request md/raid10: fix any_working flag handling in raid10_sync_request md: move finish_reshape to md_finish_sync() md: factor out sync completion update into helper md: remove MD_RECOVERY_ERROR handling and simplify resync_offset update md: update curr_resync_completed even when MD_RECOVERY_INTR is set md: mark rdev Faulty when badblocks setting fails md: break remaining operations on badblocks set failure in narrow_write_error md/raid1,raid10: support narrow_write_error when badblocks is disabled md: factor error handling out of md_done_sync into helper md/raid1: simplify uptodate handling in end_sync_write md/raid5: make sure max_sectors is not less than io_opt ...
* for-7.0/io_uring: (25 commits) io_uring/rsrc: use GFP_KERNEL_ACCOUNT consistently io_uring/futex: use GFP_KERNEL_ACCOUNT for futex data allocation io_uring/io-wq: handle !sysctl_hung_task_timeout_secs io_uring: fix bad indentation for setup flags if statement io_uring/rsrc: take unsigned index in io_rsrc_node_lookup() io_uring: introduce non-circular SQ io_uring: split out CQ waiting code into wait.c io_uring: split out task work code into tw.c io_uring/io-wq: don't trigger hung task for syzbot craziness io_uring: add IO_URING_EXIT_WAIT_MAX definition io_uring/sync: validate passed in offset io_uring/eventfd: remove unused ctx->evfd_last_cq_tail member io_uring/timeout: annotate data race in io_flush_timeouts() io_uring/uring_cmd: explicitly disallow cancelations for IOPOLL io_uring: fix IOPOLL with passthrough I/O io_uring: track restrictions separately for IORING_OP and IORING_REGISTER io_uring: move ctx->restricted check into io_check_restriction() io_uring/register: set ctx->restricted when restrictions are parsed io_uring/register: have io_parse_restrictions() set restrictions enabled io_uring/register: have io_parse_restrictions() return number of ops ...
* io_uring-bpf-restrictions.4: io_uring: allow registration of per-task restrictions io_uring: add task fork hook io_uring/bpf_filter: add ref counts to struct io_bpf_filter io_uring/bpf_filter: cache lookup table in ctx->bpf_filters io_uring/bpf_filter: allow filtering on contents of struct open_how io_uring/net: allow filtering on IORING_OP_SOCKET data io_uring: add support for BPF filtering for opcode restrictions
Not for upstream, just a merge to help figure out what is going on with syzbot. * io_uring-syzbot-cancel: io_uring: add debug dumping for when the ring can't exit
* for-7.0/io_uring-zcrx-large-buffers: io_uring/zcrx: implement large rx buffer support io_uring/zcrx: document area chunking parameter selftests: iou-zcrx: test large chunk sizes eth: bnxt: support qcfg provided rx page size eth: bnxt: adjust the fill level of agg queues with larger buffers eth: bnxt: store rx buffer size per queue net: pass queue rx page size from memory provider net: add bare bone queue configs net: reduce indent of struct netdev_queue_mgmt_ops members net: memzero mp params when closing a queue
* for-7.0/io_uring: io_uring/net: don't continue send bundle if poll was required for retry
* block-6.19: Revert "rnbd-clt: fix refcount underflow in device unmap path"
* for-7.0/block: rnbd-clt: fix refcount underflow in device unmap path
* for-7.0/block-stable-pages: xfs: use bounce buffering direct I/O when the device requires stable pages iomap: add a flag to bounce buffer direct I/O iomap: support ioends for direct reads iomap: rename IOMAP_DIO_DIRTY to IOMAP_DIO_USER_BACKED iomap: free the bio before completing the dio iomap: share code between iomap_dio_bio_end_io and iomap_finish_ioend_direct iomap: split out the per-bio logic from iomap_dio_bio_iter iomap: simplify iomap_dio_bio_iter iomap: fix submission side handling of completion side errors block: add helpers to bounce buffer an iov_iter into bios block: remove bio_release_page iov_iter: extract a iov_iter_extract_bvecs helper from bio code block: open code bio_add_page and fix handling of mismatching P2P ranges block: refactor get_contig_folio_len block: add a BIO_MAX_SIZE constant and use it
* for-7.0/block: block: Replace snprintf with strscpy in check_partition
* block-6.19: nvme-pci: DMA unmap the correct regions in nvme_free_sgls nvmet: fix race in nvmet_bio_done() leading to NULL pointer dereference
Author
|
Upstream branch: 4ded82c |
* block-6.19: bcache: fix I/O accounting leak in detached_dev_do_request bcache: remove dead code in detached_dev_do_request
773b514 to
18a2fa8
Compare
Author
|
Upstream branch: 1171e38 |
ceaabb9 to
648d151
Compare
* for-7.0/block: ublk: document IO reference counting design
* for-7.0/block: block: introduce blk_queue_rot() block: cleanup queue limit features definition
18a2fa8 to
25863a6
Compare
Author
|
Upstream branch: d4b7351 |
648d151 to
8236fa6
Compare
Commit 1ceeedb ("ublk: optimize UBLK_IO_UNREGISTER_IO_BUF on daemon task") optimized ublk request buffer unregistration to use a non-atomic reference count decrement when performed on the ublk_io's daemon task. The optimization applied to auto buffer unregistration, which happens as part of handling UBLK_IO_COMMIT_AND_FETCH_REQ on the daemon task. However, commit b749965 ("ublk: remove ublk_commit_and_fetch()") reordered the ublk_sub_req_ref() for the completed request before the io_buffer_unregister_bvec() call. As a result, task_registered_buffers is already 0 when io_buffer_unregister_bvec() calls ublk_io_release() and the non-atomic refcount optimization doesn't apply. Move the io_buffer_unregister_bvec() call back to before ublk_need_complete_req() to restore the reference counting optimization. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Fixes: b749965 ("ublk: remove ublk_commit_and_fetch()") Reviewed-by: Ming Lei <ming.lei@redhat.com>
Author
|
Upstream branch: d4b7351 |
8236fa6 to
85e90e8
Compare
485086f to
30053cb
Compare
Author
|
Upstream branch: 8160585 Pull request is NOT updated. Failed to apply https://patchwork.kernel.org/project/linux-block/list/?series=1048257 conflict: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request for series with
subject: ublk: restore auto buf unregister refcount optimization
version: 1
url: https://patchwork.kernel.org/project/linux-block/list/?series=1048257