* [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd
@ 2025-04-21 23:46 Uday Shankar
2025-04-21 23:46 ` [PATCH 1/4] ublk: factor out ublk_commit_and_fetch Uday Shankar
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: Uday Shankar @ 2025-04-21 23:46 UTC (permalink / raw)
To: Ming Lei, Jens Axboe
Cc: linux-block, linux-kernel, Uday Shankar, Caleb Sander Mateos
Refactor __ublk_ch_uring_cmd to:
- Have one function per operation instead of handling operations
directly in the switch statement.
- Mark most ublk_queue pointers as const. Given efforts to allow
concurrent operations on one ublk_queue [1], it is important that
ublk_queue be read-only (or accesses to it be properly synchronized)
to avoid data races.
This series is split off from [1]. No functional changes are expected.
[1] https://lore.kernel.org/linux-block/20250416-ublk_task_per_io-v5-0-9261ad7bff20@purestorage.com/
Signed-off-by: Uday Shankar <ushankar@purestorage.com>
---
Uday Shankar (4):
ublk: factor out ublk_commit_and_fetch
ublk: mark ublk_queue as const for ublk_register_io_buf
ublk: factor out ublk_get_data
ublk: factor out error handling in __ublk_ch_uring_cmd
drivers/block/ublk_drv.c | 133 +++++++++++++++++++++++------------------------
1 file changed, 65 insertions(+), 68 deletions(-)
---
base-commit: edbaa72ba1bd21040df81f7c63851093264c7955
change-id: 20250421-ublk_constify-33ee1a6486ac
Best regards,
--
Uday Shankar <ushankar@purestorage.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/4] ublk: factor out ublk_commit_and_fetch
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
@ 2025-04-21 23:46 ` Uday Shankar
2025-04-22 2:16 ` Ming Lei
2025-04-21 23:46 ` [PATCH 2/4] ublk: mark ublk_queue as const for ublk_register_io_buf Uday Shankar
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Uday Shankar @ 2025-04-21 23:46 UTC (permalink / raw)
To: Ming Lei, Jens Axboe
Cc: linux-block, linux-kernel, Uday Shankar, Caleb Sander Mateos
Move the logic for the UBLK_IO_COMMIT_AND_FETCH_REQ opcode into its own
function. This also allows us to mark ublk_queue pointers as const for
that operation, which can help prevent data races since we may allow
concurrent operation on one ublk_queue in the future. Also open code
ublk_commit_completion in ublk_commit_and_fetch to reduce the number of
parameters/avoid a redundant lookup.
Suggested-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Uday Shankar <ushankar@purestorage.com>
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
---
drivers/block/ublk_drv.c | 91 +++++++++++++++++++++++-------------------------
1 file changed, 43 insertions(+), 48 deletions(-)
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index 03653bd7a1dfd69f5545a580dbc74de9d850c0ae..57b8625ae64232a750d4f94e76aaf119c28f9450 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -1589,30 +1589,6 @@ static int ublk_ch_mmap(struct file *filp, struct vm_area_struct *vma)
return remap_pfn_range(vma, vma->vm_start, pfn, sz, vma->vm_page_prot);
}
-static void ublk_commit_completion(struct ublk_device *ub,
- const struct ublksrv_io_cmd *ub_cmd)
-{
- u32 qid = ub_cmd->q_id, tag = ub_cmd->tag;
- struct ublk_queue *ubq = ublk_get_queue(ub, qid);
- struct ublk_io *io = &ubq->ios[tag];
- struct request *req;
-
- /* now this cmd slot is owned by nbd driver */
- io->flags &= ~UBLK_IO_FLAG_OWNED_BY_SRV;
- io->res = ub_cmd->result;
-
- /* find the io request and complete */
- req = blk_mq_tag_to_rq(ub->tag_set.tags[qid], tag);
- if (WARN_ON_ONCE(unlikely(!req)))
- return;
-
- if (req_op(req) == REQ_OP_ZONE_APPEND)
- req->__sector = ub_cmd->zone_append_lba;
-
- if (likely(!blk_should_fake_timeout(req->q)))
- ublk_put_req_ref(ubq, req);
-}
-
static void __ublk_fail_req(struct ublk_queue *ubq, struct ublk_io *io,
struct request *req)
{
@@ -2015,6 +1991,47 @@ static int ublk_fetch(struct io_uring_cmd *cmd, struct ublk_queue *ubq,
return ret;
}
+static int ublk_commit_and_fetch(const struct ublk_queue *ubq,
+ struct ublk_io *io, struct io_uring_cmd *cmd,
+ const struct ublksrv_io_cmd *ub_cmd)
+{
+ struct blk_mq_tags *tags = ubq->dev->tag_set.tags[ub_cmd->q_id];
+ struct request *req = blk_mq_tag_to_rq(tags, ub_cmd->tag);
+
+ if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
+ return -EINVAL;
+
+ if (ublk_need_map_io(ubq)) {
+ /*
+ * COMMIT_AND_FETCH_REQ has to provide IO buffer if
+ * NEED GET DATA is not enabled or it is Read IO.
+ */
+ if (!ub_cmd->addr && (!ublk_need_get_data(ubq) ||
+ req_op(req) == REQ_OP_READ))
+ return -EINVAL;
+ } else if (req_op(req) != REQ_OP_ZONE_APPEND && ub_cmd->addr) {
+ /*
+ * User copy requires addr to be unset when command is
+ * not zone append
+ */
+ return -EINVAL;
+ }
+
+ ublk_fill_io_cmd(io, cmd, ub_cmd->addr);
+
+ /* now this cmd slot is owned by ublk driver */
+ io->flags &= ~UBLK_IO_FLAG_OWNED_BY_SRV;
+ io->res = ub_cmd->result;
+
+ if (req_op(req) == REQ_OP_ZONE_APPEND)
+ req->__sector = ub_cmd->zone_append_lba;
+
+ if (likely(!blk_should_fake_timeout(req->q)))
+ ublk_put_req_ref(ubq, req);
+
+ return 0;
+}
+
static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
unsigned int issue_flags,
const struct ublksrv_io_cmd *ub_cmd)
@@ -2025,7 +2042,6 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
u32 cmd_op = cmd->cmd_op;
unsigned tag = ub_cmd->tag;
int ret = -EINVAL;
- struct request *req;
pr_devel("%s: received: cmd op %d queue %d tag %d result %d\n",
__func__, cmd->cmd_op, ub_cmd->q_id, tag,
@@ -2076,30 +2092,9 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
goto out;
break;
case UBLK_IO_COMMIT_AND_FETCH_REQ:
- req = blk_mq_tag_to_rq(ub->tag_set.tags[ub_cmd->q_id], tag);
-
- if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
- goto out;
-
- if (ublk_need_map_io(ubq)) {
- /*
- * COMMIT_AND_FETCH_REQ has to provide IO buffer if
- * NEED GET DATA is not enabled or it is Read IO.
- */
- if (!ub_cmd->addr && (!ublk_need_get_data(ubq) ||
- req_op(req) == REQ_OP_READ))
- goto out;
- } else if (req_op(req) != REQ_OP_ZONE_APPEND && ub_cmd->addr) {
- /*
- * User copy requires addr to be unset when command is
- * not zone append
- */
- ret = -EINVAL;
+ ret = ublk_commit_and_fetch(ubq, io, cmd, ub_cmd);
+ if (ret)
goto out;
- }
-
- ublk_fill_io_cmd(io, cmd, ub_cmd->addr);
- ublk_commit_completion(ub, ub_cmd);
break;
case UBLK_IO_NEED_GET_DATA:
if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] ublk: mark ublk_queue as const for ublk_register_io_buf
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
2025-04-21 23:46 ` [PATCH 1/4] ublk: factor out ublk_commit_and_fetch Uday Shankar
@ 2025-04-21 23:46 ` Uday Shankar
2025-04-21 23:46 ` [PATCH 3/4] ublk: factor out ublk_get_data Uday Shankar
` (2 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Uday Shankar @ 2025-04-21 23:46 UTC (permalink / raw)
To: Ming Lei, Jens Axboe
Cc: linux-block, linux-kernel, Uday Shankar, Caleb Sander Mateos
In the future, we may allow multiple tasks to operate on one ublk_queue
concurrently. Any writes to ublk_queue in ublk_register_io_buf, which
has no synchronization, would then become data races. Try to ensure that
such writes do not exist by marking ublk_queue pointers as const in
ublk_register_io_buf.
Suggested-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Uday Shankar <ushankar@purestorage.com>
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
---
drivers/block/ublk_drv.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index 57b8625ae64232a750d4f94e76aaf119c28f9450..a617ffde412936d3c37a3ded08a79e3557f4f56f 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -203,7 +203,7 @@ struct ublk_params_header {
static void ublk_stop_dev_unlocked(struct ublk_device *ub);
static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq);
static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub,
- struct ublk_queue *ubq, int tag, size_t offset);
+ const struct ublk_queue *ubq, int tag, size_t offset);
static inline unsigned int ublk_req_build_flags(struct request *req);
static inline struct ublksrv_io_desc *ublk_get_iod(struct ublk_queue *ubq,
int tag);
@@ -1918,7 +1918,7 @@ static void ublk_io_release(void *priv)
}
static int ublk_register_io_buf(struct io_uring_cmd *cmd,
- struct ublk_queue *ubq, unsigned int tag,
+ const struct ublk_queue *ubq, unsigned int tag,
unsigned int index, unsigned int issue_flags)
{
struct ublk_device *ub = cmd->file->private_data;
@@ -2115,7 +2115,7 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
}
static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub,
- struct ublk_queue *ubq, int tag, size_t offset)
+ const struct ublk_queue *ubq, int tag, size_t offset)
{
struct request *req;
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] ublk: factor out ublk_get_data
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
2025-04-21 23:46 ` [PATCH 1/4] ublk: factor out ublk_commit_and_fetch Uday Shankar
2025-04-21 23:46 ` [PATCH 2/4] ublk: mark ublk_queue as const for ublk_register_io_buf Uday Shankar
@ 2025-04-21 23:46 ` Uday Shankar
2025-04-22 2:17 ` Ming Lei
2025-04-21 23:46 ` [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd Uday Shankar
2025-04-24 21:50 ` [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
4 siblings, 1 reply; 10+ messages in thread
From: Uday Shankar @ 2025-04-21 23:46 UTC (permalink / raw)
To: Ming Lei, Jens Axboe
Cc: linux-block, linux-kernel, Uday Shankar, Caleb Sander Mateos
Move all the logic for the UBLK_IO_NEED_GET_DATA opcode into its own
function. This also allows us to mark ublk_queue pointers as const for
that operation, which can help prevent data races since we may allow
concurrent operation on one ublk_queue in the future.
Suggested-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Uday Shankar <ushankar@purestorage.com>
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
---
drivers/block/ublk_drv.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index a617ffde412936d3c37a3ded08a79e3557f4f56f..f5d4593d5941931efa7bc7d2106830cd2981f4bd 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -1241,7 +1241,7 @@ static void ublk_cmd_tw_cb(struct io_uring_cmd *cmd,
ublk_dispatch_req(ubq, pdu->req, issue_flags);
}
-static void ublk_queue_cmd(struct ublk_queue *ubq, struct request *rq)
+static void ublk_queue_cmd(const struct ublk_queue *ubq, struct request *rq)
{
struct io_uring_cmd *cmd = ubq->ios[rq->tag].cmd;
struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd);
@@ -1864,15 +1864,6 @@ static void ublk_mark_io_ready(struct ublk_device *ub, struct ublk_queue *ubq)
}
}
-static void ublk_handle_need_get_data(struct ublk_device *ub, int q_id,
- int tag)
-{
- struct ublk_queue *ubq = ublk_get_queue(ub, q_id);
- struct request *req = blk_mq_tag_to_rq(ub->tag_set.tags[q_id], tag);
-
- ublk_queue_cmd(ubq, req);
-}
-
static inline int ublk_check_cmd_op(u32 cmd_op)
{
u32 ioc_type = _IOC_TYPE(cmd_op);
@@ -2032,6 +2023,22 @@ static int ublk_commit_and_fetch(const struct ublk_queue *ubq,
return 0;
}
+static int ublk_get_data(const struct ublk_queue *ubq, struct ublk_io *io,
+ struct io_uring_cmd *cmd,
+ const struct ublksrv_io_cmd *ub_cmd)
+{
+ struct blk_mq_tags *tags = ubq->dev->tag_set.tags[ub_cmd->q_id];
+ struct request *req = blk_mq_tag_to_rq(tags, ub_cmd->tag);
+
+ if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
+ return -EINVAL;
+
+ ublk_fill_io_cmd(io, cmd, ub_cmd->addr);
+ ublk_queue_cmd(ubq, req);
+
+ return 0;
+}
+
static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
unsigned int issue_flags,
const struct ublksrv_io_cmd *ub_cmd)
@@ -2097,10 +2104,9 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
goto out;
break;
case UBLK_IO_NEED_GET_DATA:
- if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
+ ret = ublk_get_data(ubq, io, cmd, ub_cmd);
+ if (ret)
goto out;
- ublk_fill_io_cmd(io, cmd, ub_cmd->addr);
- ublk_handle_need_get_data(ub, ub_cmd->q_id, ub_cmd->tag);
break;
default:
goto out;
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
` (2 preceding siblings ...)
2025-04-21 23:46 ` [PATCH 3/4] ublk: factor out ublk_get_data Uday Shankar
@ 2025-04-21 23:46 ` Uday Shankar
2025-04-22 2:17 ` Ming Lei
2025-04-24 21:50 ` [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
4 siblings, 1 reply; 10+ messages in thread
From: Uday Shankar @ 2025-04-21 23:46 UTC (permalink / raw)
To: Ming Lei, Jens Axboe; +Cc: linux-block, linux-kernel, Uday Shankar
There is a tiny bit of error handling code in __ublk_ch_uring_cmd which
is repeated thrice. Factor it out of the switch statement.
Signed-off-by: Uday Shankar <ushankar@purestorage.com>
---
drivers/block/ublk_drv.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index f5d4593d5941931efa7bc7d2106830cd2981f4bd..31ebfdf52a8986e879c136ea546755a2fbe15315 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -2095,22 +2095,18 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
return ublk_unregister_io_buf(cmd, ub_cmd->addr, issue_flags);
case UBLK_IO_FETCH_REQ:
ret = ublk_fetch(cmd, ubq, io, ub_cmd->addr);
- if (ret)
- goto out;
break;
case UBLK_IO_COMMIT_AND_FETCH_REQ:
ret = ublk_commit_and_fetch(ubq, io, cmd, ub_cmd);
- if (ret)
- goto out;
break;
case UBLK_IO_NEED_GET_DATA:
ret = ublk_get_data(ubq, io, cmd, ub_cmd);
- if (ret)
- goto out;
break;
default:
goto out;
}
+ if (ret)
+ goto out;
ublk_prep_cancel(cmd, issue_flags, ubq, tag);
return -EIOCBQUEUED;
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] ublk: factor out ublk_commit_and_fetch
2025-04-21 23:46 ` [PATCH 1/4] ublk: factor out ublk_commit_and_fetch Uday Shankar
@ 2025-04-22 2:16 ` Ming Lei
0 siblings, 0 replies; 10+ messages in thread
From: Ming Lei @ 2025-04-22 2:16 UTC (permalink / raw)
To: Uday Shankar; +Cc: Jens Axboe, linux-block, linux-kernel, Caleb Sander Mateos
On Mon, Apr 21, 2025 at 05:46:40PM -0600, Uday Shankar wrote:
> Move the logic for the UBLK_IO_COMMIT_AND_FETCH_REQ opcode into its own
> function. This also allows us to mark ublk_queue pointers as const for
> that operation, which can help prevent data races since we may allow
> concurrent operation on one ublk_queue in the future. Also open code
> ublk_commit_completion in ublk_commit_and_fetch to reduce the number of
> parameters/avoid a redundant lookup.
>
> Suggested-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Uday Shankar <ushankar@purestorage.com>
> Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] ublk: factor out ublk_get_data
2025-04-21 23:46 ` [PATCH 3/4] ublk: factor out ublk_get_data Uday Shankar
@ 2025-04-22 2:17 ` Ming Lei
0 siblings, 0 replies; 10+ messages in thread
From: Ming Lei @ 2025-04-22 2:17 UTC (permalink / raw)
To: Uday Shankar; +Cc: Jens Axboe, linux-block, linux-kernel, Caleb Sander Mateos
On Mon, Apr 21, 2025 at 05:46:42PM -0600, Uday Shankar wrote:
> Move all the logic for the UBLK_IO_NEED_GET_DATA opcode into its own
> function. This also allows us to mark ublk_queue pointers as const for
> that operation, which can help prevent data races since we may allow
> concurrent operation on one ublk_queue in the future.
>
> Suggested-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Uday Shankar <ushankar@purestorage.com>
> Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
thanks,
Ming
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd
2025-04-21 23:46 ` [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd Uday Shankar
@ 2025-04-22 2:17 ` Ming Lei
0 siblings, 0 replies; 10+ messages in thread
From: Ming Lei @ 2025-04-22 2:17 UTC (permalink / raw)
To: Uday Shankar; +Cc: Jens Axboe, linux-block, linux-kernel
On Mon, Apr 21, 2025 at 05:46:43PM -0600, Uday Shankar wrote:
> There is a tiny bit of error handling code in __ublk_ch_uring_cmd which
> is repeated thrice. Factor it out of the switch statement.
>
> Signed-off-by: Uday Shankar <ushankar@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
` (3 preceding siblings ...)
2025-04-21 23:46 ` [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd Uday Shankar
@ 2025-04-24 21:50 ` Uday Shankar
2025-04-25 2:40 ` Jens Axboe
4 siblings, 1 reply; 10+ messages in thread
From: Uday Shankar @ 2025-04-24 21:50 UTC (permalink / raw)
To: Ming Lei, Jens Axboe; +Cc: linux-block, linux-kernel, Caleb Sander Mateos
Hi Jens,
Can this series get queued up? They all have reviews from Caleb and/or
Ming.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd
2025-04-24 21:50 ` [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
@ 2025-04-25 2:40 ` Jens Axboe
0 siblings, 0 replies; 10+ messages in thread
From: Jens Axboe @ 2025-04-25 2:40 UTC (permalink / raw)
To: Uday Shankar, Ming Lei; +Cc: linux-block, linux-kernel, Caleb Sander Mateos
On 4/24/25 3:50 PM, Uday Shankar wrote:
> Hi Jens,
>
> Can this series get queued up? They all have reviews from Caleb and/or
> Ming.
It can, but I was assuming we'd have conflicts between 6.16 ublk patches
and what is queued up in block-6.15. And looks like I'm right... I'll
merge block-6.15 into for-6.16/block, and then please re-post a version
against that.
--
Jens Axboe
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-04-25 2:40 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-21 23:46 [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
2025-04-21 23:46 ` [PATCH 1/4] ublk: factor out ublk_commit_and_fetch Uday Shankar
2025-04-22 2:16 ` Ming Lei
2025-04-21 23:46 ` [PATCH 2/4] ublk: mark ublk_queue as const for ublk_register_io_buf Uday Shankar
2025-04-21 23:46 ` [PATCH 3/4] ublk: factor out ublk_get_data Uday Shankar
2025-04-22 2:17 ` Ming Lei
2025-04-21 23:46 ` [PATCH 4/4] ublk: factor out error handling in __ublk_ch_uring_cmd Uday Shankar
2025-04-22 2:17 ` Ming Lei
2025-04-24 21:50 ` [PATCH 0/4] ublk: refactor __ublk_ch_uring_cmd Uday Shankar
2025-04-25 2:40 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox