From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (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 2FE2522A4E5 for ; Tue, 2 Dec 2025 02:19:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764641978; cv=none; b=GnNfTxtpyrPtcm8kxAaH1LyIOQoG4F2NfcO37LPx/FtFguHLrh0IivibkHIyTAqOEQU9xnb6wedBtXBo7JMoPfBaAOVEMkYhj7pCSWmwtBvK+y3Nz4+vyQzbujQI36qAKTwHanSWhsWC4XIhiyj3g7PmRiNh0WBG0ZcLmNMD+HU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764641978; c=relaxed/simple; bh=b4E0Y/IhkdkV/mveWRS+oNb7kRAI3f5/RudsznDxzuc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LV3G1G+WqT+6635v12sJ/h4tmJUuh8Bxag/VYscPMBOdVf8B16Oe8UevTK+d5oH1ln2QARJ5yM6M6tWjnnL6BYogyyj+hmKWKNdw1609cZ+iRypKUZK9lbAPizuGK3Klw9XP8vMeeXiyn3y6g1GxAP5y+zoHxEPLNUTlk9iZiA8= 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=eZ6egw8Z; arc=none smtp.client-ip=209.85.210.177 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="eZ6egw8Z" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-7b9215e55e6so3375006b3a.2 for ; Mon, 01 Dec 2025 18:19:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764641976; x=1765246776; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ocO/7XfNa9pSLsCJ9FZ9opMjiT8rgXV0iXbJnUsLWB8=; b=eZ6egw8Zm+5Ter7PSXVNQn7mWEyT5BxPIbI8XQLJKzyRlVwR1hZ2GdY8yNrvJOCQZ6 lZE2Cxmk5hmIRI8Bvf7QgUlWRKfT+oxIQTyHVqzuv25R3F/2KpOjD8gUIm2Z1Cep8oCe cYNNfKHZ28avEbvg2NAdMDSdpa4jOpSJz0RUFaOncxZ0DCuSG8UfKMOu5Y7Q4FsbgiZ+ MuqitSG7kTn2Nmrb+ceMXf5u5r6TTAXcIgSGlstr85z6gdCIzJ7n1rRi6HSz+Y7edkGE vPu+QaRqYVDE+daeq8wGN2P6JU8JFypkrO38tZyxjrTwR0x8hIVo6Q5D4kEl0iApV1BC aRig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764641976; x=1765246776; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ocO/7XfNa9pSLsCJ9FZ9opMjiT8rgXV0iXbJnUsLWB8=; b=vwcG2lrXnCJHojBBr1OyM5JTlU/W+Z292Wmf49jodLrv88Y0MEH2EzxM9mCL+hVhvF VDDYVio485lvt23irpnAH30u1pyowp1bTOspnaNw1YxMOg6MhlZIh5i5cX2hnc1Oe+8p 9X1oA5VEVQKiB+LJL96iAZg8vNgPcxkjrffkwvn7k0a/pzQaNau4+qEkct/DnB0cN7+s KdOjviw+Kuo/tu6girrS8Hfnj51dRY8upu5JibBR37NteCBbw2sB+Xy+WNlV4qsA+s75 1VO8mzCoCamrRzRAYq6FZTCL9BVlRWyt4prsGCKMlW3mcRz11evkeYkBvkmwnioOgNfY SECw== X-Gm-Message-State: AOJu0YzWYcYsxbs80W6xVVVZ1s08f75XmeOBGgKHQEcRSBNjgQecUpq2 itlUIoI5MA80gB8/uDS2O/ZcZL2XEn8xoMmp+Fpy3QB0/oefU0KA58ut X-Gm-Gg: ASbGncu+BHxjwugFL5jYidjg2UvUbZRKaBeY3NRP+K06V2dOmUvNSM09h/9M0L9oVzR IisN9+5vUrhywUQTZ8BqsPwGdDJdfQMOLTP7C/x+RZObxSOGG0l+PV6c2pdYYv0M3nthRYM1BmL iIhKKMc59dILVPEZ7DCfwBxKfFaEtQNVTn014k8TvabXliKkPtN83zQF47Q5bwPMUD+flDXxFnr e72rY8KR6mJaj2LqxCoDR5YRI3QvgPQtFBe+hsXCPVP8op14nfe7YNZ6le443SP8zZrkvV9MJT1 HTywtfjK7NojpHv1JDR4s3j/PAAUJC++l20NuXAXTQyaQNaZNR/SkR/baXDTFaacYRYF61vlG8Q f3XjkL2Q+bO3lO8TM2CDV84zQIViVtdn7/KwDSmBT2Iqrl9mqOHGRmR+gZFexxaerFAme7BJ9Rl FvLlkAmCRvdZWTmhkYAx8Cmln3yN+egf0= X-Google-Smtp-Source: AGHT+IGkFCaVZ4N3mEb6qCj+KmRztcvmelJ3dJ4RpmAr/DNPhghBZKHnzBGq2FcUj+1pvqKbi3/f6g== X-Received: by 2002:a05:7022:797:b0:11b:ceee:a46d with SMTP id a92af1059eb24-11cb3edd0fbmr17491665c88.15.1764641976403; Mon, 01 Dec 2025 18:19:36 -0800 (PST) Received: from deb-101020-bm01.dtc.local ([149.97.161.244]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2a9655ceb04sm49089945eec.1.2025.12.01.18.19.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Dec 2025 18:19:36 -0800 (PST) From: sw.prabhu6@gmail.com To: James.Bottomley@HansenPartnership.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, mcgrof@kernel.org, kernel@pankajraghav.com, Swarna Prabhu , Swarna Prabhu , Pankaj Raghav Subject: [PATCH 1/2] scsi: fix write_same16 and write_same10 for sector size > PAGE_SIZE Date: Tue, 2 Dec 2025 02:15:22 +0000 Message-ID: <20251202021522.188419-3-sw.prabhu6@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251202021522.188419-1-sw.prabhu6@gmail.com> References: <20251202021522.188419-1-sw.prabhu6@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Swarna Prabhu The WRITE SAME(16) and WRITE SAME(10) scsi commands uses a page from a dedicated mempool('sd_page_pool') for its payload. This pool was initialized to allocate single pages, which was sufficient as long as the device sector size did not exceed the PAGE_SIZE. Given that block layer now supports block size upto 64K ie beyond PAGE_SIZE, adapt sd_set_special_bvec() to accommodate that. Signed-off-by: Swarna Prabhu Co-developed-by: Pankaj Raghav Signed-off-by: Pankaj Raghav --- Note: We are allocating pages of order aligned to BLK_MAX_BLOCK_SIZE for the mempool page allocator 'sd_page_pool' all the time. This is because we only know that a bigger sector size device is attached at sd_probe and it might be too late to reallocate mempool with order > 0. drivers/scsi/sd.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 0252d3f6bed1..c3502fcba1bb 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -895,11 +895,20 @@ static void sd_config_discard(struct scsi_disk *sdkp, struct queue_limits *lim, static void *sd_set_special_bvec(struct request *rq, unsigned int data_len) { struct page *page; + struct scsi_device *sdp = scsi_disk(rq->q->disk)->device; + unsigned sector_size = sdp->sector_size; + unsigned int nr_pages = DIV_ROUND_UP(sector_size, PAGE_SIZE); + int n = 0; page = mempool_alloc(sd_page_pool, GFP_ATOMIC); if (!page) return NULL; - clear_highpage(page); + + do { + clear_highpage(page + n); + n++; + } while (n < nr_pages); + bvec_set_page(&rq->special_vec, page, data_len, 0); rq->rq_flags |= RQF_SPECIAL_PAYLOAD; return bvec_virt(&rq->special_vec); @@ -4368,7 +4377,7 @@ static int __init init_sd(void) if (err) goto err_out; - sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, 0); + sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, get_order(BLK_MAX_BLOCK_SIZE)); if (!sd_page_pool) { printk(KERN_ERR "sd: can't init discard page pool\n"); err = -ENOMEM; -- 2.51.0