From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE42717D2 for ; Sat, 15 Nov 2025 17:33:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763228026; cv=none; b=a9uNfEOiLkcQ+QgOtWZCq/z+K8BRzuV8z9R+qxP0JeDF43ux1RXOh8Pr3n3Rm4IQK63QkKWdc6Ojz2Kx3NtKQWB367U+ocQ0EdWE0BT/0Pli48THMwGYgNbQakBmhZ3QfFkvZiMJtpaaLyvfYCz6MNIg2XlWJPQm7bIc9+blRKc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763228026; c=relaxed/simple; bh=2Bd7+uJuTUGNZAg6U87lorr66mjbki1AOCLtqFD1qs4=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oD0/PuMOhHPH0lU0tso5UPS2vdSOYpBPMzAMRhylX5RqLwUh+k8mDiy2jZV9Zu16O4HhWyOOvuPX0g81lGorIe/GXo6VqfP/1h+RgdX9ITA1ME8KlIQropg1W0eocn/4axPx5T2evPElHLeWMqh9b3UsW13OHqkpCFWSilyC+Uw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=T04pCplN; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T04pCplN" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4779aa4f928so5543725e9.1 for ; Sat, 15 Nov 2025 09:33:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763228023; x=1763832823; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=qFzc+YcPufitKW9Rs5Vf2RxsuMATU2dwsVOJoOkPDOU=; b=T04pCplNzGSoaYb0oWb9UIdmJflylBd5SY7pmMjJOj4fSRbd/ZdUXsjA9zNkNoFiVE GduIrrA/A8c9NBc0s+EhRubANVRCX6H3B1x5Vxd/bGzmgK56kSX4EeCHinNpY5GOa9gL DBeVmo2DXqGWMh+1yNMZ1KH9iZR4bvrCRiulzmtpABhc2EhMfjyMjDT0todNRUtscaOm CnaDf5G9179h+bWju/oBZAW1nKoW6eUx317FRprCbAaiNGLnp71FA82RSLQQqZB0jJcs KaQDRt0cH2Cnq7em6d8RXzrK4qmmGP/vuvCSRmD9MOZY7A4EwRZ3TqkPweRQHsPTuqu9 1eRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763228023; x=1763832823; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=qFzc+YcPufitKW9Rs5Vf2RxsuMATU2dwsVOJoOkPDOU=; b=X6NXrpOjO4PTmTpjw4q00LR+ipKsGH/XP6LL8MyZMfGtQFW2ulujvTKc3kOJyWKzg5 S5gDbk0eCyDF8TPPl4uhto5NqglBncsmocK6HuqsOBUJZnqBje9y2miIRMk0ou/wMJXT YmVN3CCvBdLXBlHQ3oTkNqgkT8tJuDq/NPOYvhes9vYg2OjsBE1U8yxhI+udYbnCEYUY +P5Gre7gQfAT6RGCJ2cSqMlWOojdfG34s4VWvZYHkUtd2vyI/vTlXK9K9FA8tWRV7LOR nKej98TwTqMSX2/3OSFn0Oy0ADca7iL+B6vvoNMEkNFmdycERLyzoCLEefXQ2VISERwe febA== X-Forwarded-Encrypted: i=1; AJvYcCVWWt91w3NQmqZEtr3TWuK94ugvHDPUdMMYZ03f84C6jFMX6VvbAjSO8EwbYhtChVb+uHV7vn38EDmSCII=@vger.kernel.org X-Gm-Message-State: AOJu0YwEdIiXWP2gsg5xE+idQFmKgCGib+blDGCR3Sm9C5W7qIg5CJPN V1CUQwqqgYOtPiAA7lhBLrxC6DcomdBvQsIkq8ingF19NvMqZvAUgRZg X-Gm-Gg: ASbGncsE9Z45nlFZigytJtaxqLuCIVyZOTqtVICu+ANEKEi1auSw4czgIPtvVJMyUek 6otOR/5+mfke+EEf4VN3ZKktqlGYoSnrPZhAwUaP1y2paHM/aloWi6d1WDfM/7X3gE4OhLGZyqY rYUc0BGsyCZ2QE721MxXJMxF/l/CLcDCJm2fOsVDZ7X43A0oHhYXsEEEXH9q7ToU42G/Z3bN2kH x4ReXI4UqGEmo0BK7AIDDKiPai2q98n3jQy3UmhM9f6NDpRN6jODvHkm1/ehvPoVKgrd/2bHlDl JuJAuh1yseCg9c+xkcTo6zYgP31dzmXwnSldnqZlTqK9mnEGaIATmLOZJkefw6gn/hfTk99uEmL ieQZxZE/Ty+2WAS2wtTGBNV2ppvlgXSNC9qF/UOSTe7rz1fg+r7ssLwwv284/9sSmrSSj46fDpc NZI+73X8Pw5M0YqikYmKzrOHUa/JCALRdzfi+B6/PVz13b5jCUTwuA X-Google-Smtp-Source: AGHT+IHQ+EmtUAqO9yz3yFBpoimIZKZZzroUXyQeIyUrb6pbi8e+SUv2VPyJAkhU4fQ+Jp/lAq9i1A== X-Received: by 2002:a05:600c:8b21:b0:471:13dd:bae7 with SMTP id 5b1f17b1804b1-4778fe883e3mr76104755e9.30.1763228023039; Sat, 15 Nov 2025 09:33:43 -0800 (PST) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4778bb34278sm72414165e9.4.2025.11.15.09.33.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Nov 2025 09:33:42 -0800 (PST) Date: Sat, 15 Nov 2025 17:33:41 +0000 From: David Laight To: Leon Romanovsky Cc: Jens Axboe , Keith Busch , Christoph Hellwig , Sagi Grimberg , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org Subject: Re: [PATCH 1/2] nvme-pci: Use size_t for length fields to handle larger sizes Message-ID: <20251115173341.4a59c97f@pumpkin> In-Reply-To: <20251115-nvme-phys-types-v1-1-c0f2e5e9163d@kernel.org> References: <20251115-nvme-phys-types-v1-0-c0f2e5e9163d@kernel.org> <20251115-nvme-phys-types-v1-1-c0f2e5e9163d@kernel.org> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sat, 15 Nov 2025 18:22:45 +0200 Leon Romanovsky wrote: > From: Leon Romanovsky > > This patch changes the length variables from unsigned int to size_t. > Using size_t ensures that we can handle larger sizes, as size_t is > always equal to or larger than the previously used u32 type. Where are requests larger than 4GB going to come from? > Originally, u32 was used because blk-mq-dma code evolved from > scatter-gather implementation, which uses unsigned int to describe length. > This change will also allow us to reuse the existing struct phys_vec in places > that don't need scatter-gather. > > Signed-off-by: Leon Romanovsky > --- > block/blk-mq-dma.c | 14 +++++++++----- > drivers/nvme/host/pci.c | 4 ++-- > 2 files changed, 11 insertions(+), 7 deletions(-) > > diff --git a/block/blk-mq-dma.c b/block/blk-mq-dma.c > index e9108ccaf4b0..cc3e2548cc30 100644 > --- a/block/blk-mq-dma.c > +++ b/block/blk-mq-dma.c > @@ -8,7 +8,7 @@ > > struct phys_vec { > phys_addr_t paddr; > - u32 len; > + size_t len; > }; > > static bool __blk_map_iter_next(struct blk_map_iter *iter) > @@ -112,8 +112,8 @@ static bool blk_rq_dma_map_iova(struct request *req, struct device *dma_dev, > struct phys_vec *vec) > { > enum dma_data_direction dir = rq_dma_dir(req); > - unsigned int mapped = 0; > unsigned int attrs = 0; > + size_t mapped = 0; > int error; > > iter->addr = state->addr; > @@ -296,8 +296,10 @@ int __blk_rq_map_sg(struct request *rq, struct scatterlist *sglist, > blk_rq_map_iter_init(rq, &iter); > while (blk_map_iter_next(rq, &iter, &vec)) { > *last_sg = blk_next_sg(last_sg, sglist); > - sg_set_page(*last_sg, phys_to_page(vec.paddr), vec.len, > - offset_in_page(vec.paddr)); > + > + WARN_ON_ONCE(overflows_type(vec.len, unsigned int)); I'm not at all sure you need that test. blk_map_iter_next() has to guarantee that vec.len is valid. (probably even less than a page size?) Perhaps this code should be using a different type for the addr:len pair? > + sg_set_page(*last_sg, phys_to_page(vec.paddr), > + (unsigned int)vec.len, offset_in_page(vec.paddr)); You definitely don't need the explicit cast. David > nsegs++; > } > > @@ -416,7 +418,9 @@ int blk_rq_map_integrity_sg(struct request *rq, struct scatterlist *sglist) > > while (blk_map_iter_next(rq, &iter, &vec)) { > sg = blk_next_sg(&sg, sglist); > - sg_set_page(sg, phys_to_page(vec.paddr), vec.len, > + > + WARN_ON_ONCE(overflows_type(vec.len, unsigned int)); > + sg_set_page(sg, phys_to_page(vec.paddr), (unsigned int)vec.len, > offset_in_page(vec.paddr)); > segments++; > } > diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c > index 9085bed107fd..de512efa742d 100644 > --- a/drivers/nvme/host/pci.c > +++ b/drivers/nvme/host/pci.c > @@ -290,14 +290,14 @@ struct nvme_iod { > u8 flags; > u8 nr_descriptors; > > - unsigned int total_len; > + size_t total_len; > struct dma_iova_state dma_state; > void *descriptors[NVME_MAX_NR_DESCRIPTORS]; > struct nvme_dma_vec *dma_vecs; > unsigned int nr_dma_vecs; > > dma_addr_t meta_dma; > - unsigned int meta_total_len; > + size_t meta_total_len; > struct dma_iova_state meta_dma_state; > struct nvme_sgl_desc *meta_descriptor; > }; >