From nobody Tue Dec 2 02:19:57 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67B7427B50F for ; Fri, 21 Nov 2025 01:59:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763690368; cv=none; b=iKKuUJnvczhncgDh8EUkroFPFp++ZYRoRmWxCXSRVhlFDMBcnIGIAgWpUjpR/RwQuEC1BIz8Df4ITaIFyHxgua295bOgpC9zCsknzigbiwboLKU61Z6IVHBWKowG6ghD5gezAP0c8K7Z+lcUn0zKfAmrZHfNJx0v0ruqYBryL3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763690368; c=relaxed/simple; bh=ID3VdaatVF2sSDoX38s0c3b1u8IK71WzWOR198pdGR4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jg07DFA/DbG3BkUBv/jgUYCUrnOM/SAI40T+KZkeHL+F7l0iz0igISsLqEyEYeZyD0MRurqdaGgDvr6S6F1T0P4Qp+dxdTacIwbeaUtIaCEWtJwH8ItvrU4tLDpNSurq2rv4G5pPL5D7qKtFm9V2V/VqRRR2VwNk0Lt+1Ptgz7I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=CBmeKNzW; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="CBmeKNzW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1763690364; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iVoBVCrQUYZ9ilGjyioJ6sWCbx0PTCJ/7FPYB9TJGCc=; b=CBmeKNzWWz/TMjGjVwC+/AJMr9+24GFerBYqARjbJe5Pi1S5i8tfoaWy3hP4pgxn+LIohM n3tgRzHkmG0kFSr+txSvgluldzM6qe2Kl//JdZFLFaz5dww2h1iI1vsWV/W2WH9fS2nPAl XLs8JNwe5GkCytsPXU1u6EQHOE6cDVM= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-333-fP1sLXXWNf2FS94u3rdpjg-1; Thu, 20 Nov 2025 20:59:19 -0500 X-MC-Unique: fP1sLXXWNf2FS94u3rdpjg-1 X-Mimecast-MFC-AGG-ID: fP1sLXXWNf2FS94u3rdpjg_1763690357 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EF1B21956088; Fri, 21 Nov 2025 01:59:16 +0000 (UTC) Received: from localhost (unknown [10.72.116.211]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E648830044DB; Fri, 21 Nov 2025 01:59:15 +0000 (UTC) From: Ming Lei To: Jens Axboe , linux-block@vger.kernel.org Cc: Caleb Sander Mateos , Uday Shankar , Stefani Seibold , Andrew Morton , linux-kernel@vger.kernel.org, Ming Lei Subject: [PATCH V4 03/27] ublk: add `union ublk_io_buf` with improved naming Date: Fri, 21 Nov 2025 09:58:25 +0800 Message-ID: <20251121015851.3672073-4-ming.lei@redhat.com> In-Reply-To: <20251121015851.3672073-1-ming.lei@redhat.com> References: <20251121015851.3672073-1-ming.lei@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 Content-Type: text/plain; charset="utf-8" Add `union ublk_io_buf` for naming the anonymous union of struct ublk_io's addr and buf fields, meantime apply it to `struct ublk_io` for storing eith= er ublk auto buffer register data or ublk server io buffer address. The union uses clear field names: - `addr`: for regular ublk server io buffer addresses - `auto_reg`: for ublk auto buffer registration data This eliminates confusing access patterns and improves code readability. Reviewed-by: Caleb Sander Mateos Signed-off-by: Ming Lei --- drivers/block/ublk_drv.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2884e0687e31..f1fa5ceacdf6 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -155,12 +155,13 @@ struct ublk_uring_cmd_pdu { */ #define UBLK_REFCOUNT_INIT (REFCOUNT_MAX / 2) =20 +union ublk_io_buf { + __u64 addr; + struct ublk_auto_buf_reg auto_reg; +}; + struct ublk_io { - /* userspace buffer address from io cmd */ - union { - __u64 addr; - struct ublk_auto_buf_reg buf; - }; + union ublk_io_buf buf; unsigned int flags; int res; =20 @@ -498,7 +499,7 @@ static blk_status_t ublk_setup_iod_zoned(struct ublk_qu= eue *ubq, iod->op_flags =3D ublk_op | ublk_req_build_flags(req); iod->nr_sectors =3D blk_rq_sectors(req); iod->start_sector =3D blk_rq_pos(req); - iod->addr =3D io->addr; + iod->addr =3D io->buf.addr; =20 return BLK_STS_OK; } @@ -981,7 +982,7 @@ static unsigned int ublk_map_io(const struct ublk_queue= *ubq, struct iov_iter iter; const int dir =3D ITER_DEST; =20 - import_ubuf(dir, u64_to_user_ptr(io->addr), rq_bytes, &iter); + import_ubuf(dir, u64_to_user_ptr(io->buf.addr), rq_bytes, &iter); return ublk_copy_user_pages(req, 0, &iter, dir); } return rq_bytes; @@ -1002,7 +1003,7 @@ static unsigned int ublk_unmap_io(bool need_map, =20 WARN_ON_ONCE(io->res > rq_bytes); =20 - import_ubuf(dir, u64_to_user_ptr(io->addr), io->res, &iter); + import_ubuf(dir, u64_to_user_ptr(io->buf.addr), io->res, &iter); return ublk_copy_user_pages(req, 0, &iter, dir); } return rq_bytes; @@ -1068,7 +1069,7 @@ static blk_status_t ublk_setup_iod(struct ublk_queue = *ubq, struct request *req) iod->op_flags =3D ublk_op | ublk_req_build_flags(req); iod->nr_sectors =3D blk_rq_sectors(req); iod->start_sector =3D blk_rq_pos(req); - iod->addr =3D io->addr; + iod->addr =3D io->buf.addr; =20 return BLK_STS_OK; } @@ -1182,9 +1183,9 @@ static bool ublk_auto_buf_reg(const struct ublk_queue= *ubq, struct request *req, int ret; =20 ret =3D io_buffer_register_bvec(cmd, req, ublk_io_release, - io->buf.index, issue_flags); + io->buf.auto_reg.index, issue_flags); if (ret) { - if (io->buf.flags & UBLK_AUTO_BUF_REG_FALLBACK) { + if (io->buf.auto_reg.flags & UBLK_AUTO_BUF_REG_FALLBACK) { ublk_auto_buf_reg_fallback(ubq, io); return true; } @@ -1473,7 +1474,7 @@ static void ublk_queue_reinit(struct ublk_device *ub,= struct ublk_queue *ubq) */ io->flags &=3D UBLK_IO_FLAG_CANCELED; io->cmd =3D NULL; - io->addr =3D 0; + io->buf.addr =3D 0; =20 /* * old task is PF_EXITING, put it now @@ -2034,13 +2035,16 @@ static inline int ublk_check_cmd_op(u32 cmd_op) =20 static inline int ublk_set_auto_buf_reg(struct ublk_io *io, struct io_urin= g_cmd *cmd) { - io->buf =3D ublk_sqe_addr_to_auto_buf_reg(READ_ONCE(cmd->sqe->addr)); + struct ublk_auto_buf_reg buf; + + buf =3D ublk_sqe_addr_to_auto_buf_reg(READ_ONCE(cmd->sqe->addr)); =20 - if (io->buf.reserved0 || io->buf.reserved1) + if (buf.reserved0 || buf.reserved1) return -EINVAL; =20 - if (io->buf.flags & ~UBLK_AUTO_BUF_REG_F_MASK) + if (buf.flags & ~UBLK_AUTO_BUF_REG_F_MASK) return -EINVAL; + io->buf.auto_reg =3D buf; return 0; } =20 @@ -2062,7 +2066,7 @@ static int ublk_handle_auto_buf_reg(struct ublk_io *i= o, * this ublk request gets stuck. */ if (io->buf_ctx_handle =3D=3D io_uring_cmd_ctx_handle(cmd)) - *buf_idx =3D io->buf.index; + *buf_idx =3D io->buf.auto_reg.index; } =20 return ublk_set_auto_buf_reg(io, cmd); @@ -2090,7 +2094,7 @@ ublk_config_io_buf(const struct ublk_device *ub, stru= ct ublk_io *io, if (ublk_dev_support_auto_buf_reg(ub)) return ublk_handle_auto_buf_reg(io, cmd, buf_idx); =20 - io->addr =3D buf_addr; + io->buf.addr =3D buf_addr; return 0; } =20 @@ -2287,7 +2291,7 @@ static bool ublk_get_data(const struct ublk_queue *ub= q, struct ublk_io *io, */ io->flags &=3D ~UBLK_IO_FLAG_NEED_GET_DATA; /* update iod->addr because ublksrv may have passed a new io buffer */ - ublk_get_iod(ubq, req->tag)->addr =3D io->addr; + ublk_get_iod(ubq, req->tag)->addr =3D io->buf.addr; pr_devel("%s: update iod->addr: qid %d tag %d io_flags %x addr %llx\n", __func__, ubq->q_id, req->tag, io->flags, ublk_get_iod(ubq, req->tag)->addr); --=20 2.47.0