public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
* [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