From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 3BA913E7621 for ; Wed, 23 Sep 2026 23:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207819; cv=none; b=lHl+lwnON8rSSxX4hsgQfgVbYh9RI+JEMpH5m+W4oLVIhzEtD/02KlTQCTtd/huiTsId8MmHWtsKqAflYAhgV7hRshFX0BH4s7/97xPPbB+wIqhl7vkMnVKyfF4VZKzZIV+gpS25rj1KKzH5YTomtiyreSu16Cw0S30G2KlbYf4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207819; c=relaxed/simple; bh=i12hnJ0eqOMt0VRMSQ5nUYBLPvQvZ5w4YLNVMjTdOTI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SEviwErsmftvcyy/cfAvoOy+n/0RpaAHkvvVKWyGJVIT/38J94hsmqlkg6vP2mEs8KHD7cVGpr7rvWci+4wL3pDfVnpJMpFp+drogc7alQs20EYCREwXNSlXgFchNvUAi2TRC3qt8oI4daNMsLm9p56DwBjmvtW4nGtbG0vKZAg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=U5B9wdvA; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=wsfOhptW; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="U5B9wdvA"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="wsfOhptW" Received: from pps.filterd (m0167072.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCx2a1941103 for ; Wed, 23 Sep 2026 19:56:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=ax67 jZ+b44nKltzMuzfiZafq22t+/L44VnfnOiPTRO4=; b=U5B9wdvAwn8EGEb50qKv mU3/ILHiIcbU2jjEyu6isl0KtpIiPDbLdk0j1k0jXSxgoms/BHcJu1ivdEokEG9G Uhhu1+zOHlFXFhF8ZvX4aEmDQVrVHCrxvNyVmeXTzoh2ca/y3raPqV4WAlZG2bKi 11VW1fvFAUTEpOqj/dkRvF5PguLbPgdILN0E9ZSSsQ2VkWOUAbtOCUrKIeeU9GZT q/RBVbL2PvfztET+BLI3RoXd4rjoCaEa8KlomXJ5UWmS1aGOIjCZBPXJBrvhjXDx /mIKIHAV8R/+3GQ6Hi4ysT7ekk0SQapeycLTGiUCCKf34N70zZnq61WliYJStxoz zw== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvqtcrbq2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:56:57 -0400 (EDT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-39d8646b10eso1113111a91.1 for ; Wed, 23 Sep 2026 16:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207817; x=1790812617; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ax67jZ+b44nKltzMuzfiZafq22t+/L44VnfnOiPTRO4=; b=wsfOhptWLUzmCDnAvFWqmVX/Au1tdOzvT2i+jYLQvOZ4phHE5jCPeOdC0QbYw5rOee rZzVdmJMM/QjjoWBogpDRuAGgdjz9+D57td8klMZhivYx61q/ONK/H3IS/84/9KdYph5 +McLw7arZa6Cp9wiJZIRiPxeFhzKttmGLlzcES3nkT76vze+6pUGbJDnoZo/RBN0ExE7 cwNzVNwoL15gBTzvR84Xu7KgHJV3+oM3p04B4B63SpGRGO/XvoBvy/psWiruOyWkClaK k7Tw8CKllMjP1dCKovbyLAMKlZVaVzILvVbyFbdBtSD1ZF68YddYVXyOmIzdQuqFzUg7 QN1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207817; x=1790812617; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ax67jZ+b44nKltzMuzfiZafq22t+/L44VnfnOiPTRO4=; b=r1roZORZJWV31aecNWo83DfORrTrnC5lR94fCymVG9OuV47o+N9jjX/5booBOvqdr5 6OTLsgy6fpynPM8Sto/6k1IQbIqClIP/7BYeqLZI8xxskiiCWLgekxukoZM4hKz7/ex6 QhnPurPHtnLf5+WW3d4PNBhFAm3b/9Wsjh9a3C+QQqauPyNMSx2GqdbMS/TvPteTuWBF g77sKsHRb/yN3xarWRlDKdDEUw0TvDScP9ADlY3LjX0hUmT8JWDASy0K61sOalK8MF9G vj5/2DLXbaWoBH/3WJDT07PhTZQOZ3vZcJr3PlIoqYtVWEvAKRej+XxC+NRTMrVa1gFe Rk5g== X-Forwarded-Encrypted: i=1; AKwUvByl3A4IMl4XEdyNUa5yOFEvUU9NYhuB5QmdtFDVdaZvKh0qoi8FCilZ3bO9V93R82ez5guDFoBl2px4m2E=@vger.kernel.org X-Gm-Message-State: AFuF++m/3JdQqwP96QtaorVqm/yXfm7/Nel+XOhVzNCrNIMFcQspYZLV YHgYsBUkQUoAX+0N2dpNf95YA12DyiCGui0NXNl+eeEKUgVxx//xBXwkNSboygOlF1TF5rdNb2+ zwUHMNO7WP7U8gt/FOkvXXGmLzPTv2aMFAF4/bxhhE2omcpOmnuTbD9+zw/cgdg== X-Gm-Gg: AYBFou3S8bwfmoNjhrCrZMs4YlZMCcOfrZLJA0ETl4uC5/dlLqKgB329sCyFIUubOv0 +4JmMteoNq8iY8Y5opmlI6XocTe505ZLrFxAQYT5Qn+K1rvV28+OUJpbyM2jMqfPf0sgOrF3ixV /rU+XlcZJzIKOqq7lA94udW4Nq1o6XzSqJDSXUxPa5M+mH2nGpndt1NaJZwRakxa+FjnRAxaDk3 ig++NbrIYGdkksk7dZpmm+mmw8Mu7tTi5SBN+iO36yWxUi5RSkMyJd1WqyimFa89yP1KZBVVgof xl3I2OYPySGVjX5j8tMkDrOsKDLPdSKO06Sn/k5jV3nKk+2s2hyqzRklpzANKLDrHhDtY+N6ppm T4jgEOKpOiab9m3rzyUD2guuR05gfMmWVdf2XUjT8b+6pdw== X-Received: by 2002:a17:90b:5807:b0:3a0:8050:2ec5 with SMTP id 98e67ed59e1d1-3a0985be2fcmr563445a91.12.1790207816856; Wed, 23 Sep 2026 16:56:56 -0700 (PDT) X-Received: by 2002:a17:90b:5807:b0:3a0:8050:2ec5 with SMTP id 98e67ed59e1d1-3a0985be2fcmr563425a91.12.1790207816377; Wed, 23 Sep 2026 16:56:56 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.56.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:56:55 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:34 -0400 Subject: [PATCH v5 1/9] block: use iomap_dirty_folio for block devices 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-1-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=2128; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=i12hnJ0eqOMt0VRMSQ5nUYBLPvQvZ5w4YLNVMjTdOTI=; b=R1EL1ScX2aVYbpHYS0yrNGfXhtAVJe9OIq3govPDMYOK98H2vXi5VkQ/PuISAl9x0AynVtyKf yFgkE1ENpDOAsxbyiP9gCJJi+T6K0FFxraeu19m6jAssaHCY+Vpo7jV X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX1D1a6ulnkFmD 9PDT0u6ibWEFJHhR1hf6gY1/AOkNtV6jSEINlxgrBFIBVeRx6LIQkECmZoglYvXulOGunOUhqMs dvG1qYwMwWwUPLmjOGKeifQFQvbWbVZs1flqKC7REX1jf/xNXDbW2loyUCx4BW6ojZGhAjOcGSe ZhHHi2GkRJZsSqW6A5i1npX5d7cJuIrYZB0pEuFmxEzNNcn6vtwWsFc821uPXEQNxnOhvbsCLJs 5fXk2fxJUK2JIoNYbMQMf0GZsUyy86dZA1iFzHhklcQbA4Qoa/iKHioabuBJf7wlu66dKjVUKff EBViiZKWfLHmRrUu+Haijw2P0akgabedlC565gsXb4qvgbe4E+kzmTwS+0LgfJ/2dSs+EDjmqt6 1FWp9ES9fYRIXK4Jym0MWLPQfobCR/SSg2bZw8olaMaDQMbO5IznN+1kZSZ8YfKlBNZItoLMeXL GEuuaJ8af7vR2jl3eeg== X-Proofpoint-GUID: TYi658ZB3I55OY_ZvRt1aM25Ard-GWWS X-Proofpoint-ORIG-GUID: TYi658ZB3I55OY_ZvRt1aM25Ard-GWWS X-Authority-Analysis: v=2.4 cv=LtYHWXdc c=1 sm=1 tr=0 ts=6ab46749 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=SsB-OO3BMngHh3ZO9fOt:22 a=NEAV23lmAAAA:8 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=lHyHCDWJ2e6pF_oXpYUA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX47GRu72m+mN1 e7Oo9htVEdx4HpkxV22c7x+05PNS1019GOKHm9HM7mqO3hzqGaIa7RAi9vC32x2pANEiNr7YZnQ rSm5ZYMWTUC8Olpz4C/zLecLGuFnkDTXnmt8GS35F4ZJPR2633Es X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 spamscore=0 lowpriorityscore=10 clxscore=1015 malwarescore=0 bulkscore=10 adultscore=0 impostorscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 With CONFIG_BUFFER_HEAD=3Dn, block devices are written back through iomap, but def_blk_aops uses filemap_dirty_folio, which only sets PG_dirty. It does not set the per-block dirty bits in the folio's iomap_folio_state, so iomap_writeback_folio() finds no dirty range, submits no I/O and clears PG_dirty, resulting in data loss. Other iomap users set .dirty_folio to iomap_dirty_folio, which marks the folio's blocks dirty before calling filemap_dirty_folio(). This is only observable with block size < folio size. With a single block there is no iomap_folio_state to get out of sync and iomap_writeback_folio() marks the whole folio dirty itself. For a page-aligned device, this may require using the BLKBSZSET ioctl to set the block size, which requires CAP_SYS_ADMIN. A device whose size is not page aligned already gets a sub-page block size from set_init_blocksize(), so no ioctl and no privilege is needed. To reproduce, on a device with a sub-page block size, write a known pattern with O_DIRECT, mmap the same range, store to it, msync() and fsync(), then read it back with O_DIRECT. A reproducer is available at [1]. [1] https://gist.github.com/tzussman/18ab05cba4b3fdc79cce0a69d1fd05b4 Fixes: 925c86a19bac ("fs: add CONFIG_BUFFER_HEAD") Reported-by: Sashiko Link: https://sashiko.dev/#/patchset/20260730-blk-dontcache-v7-0-3e8e685006= 8d%40columbia.edu?part=3D5 Reviewed-by: Christoph Hellwig Reviewed-by: Hannes Reinecke Signed-off-by: Tal Zussman --- block/fops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/fops.c b/block/fops.c index c915ec0126d7..8d74d0e57f43 100644 --- a/block/fops.c +++ b/block/fops.c @@ -565,7 +565,7 @@ static int blkdev_writepages(struct address_space *mapp= ing, } =20 const struct address_space_operations def_blk_aops =3D { - .dirty_folio =3D filemap_dirty_folio, + .dirty_folio =3D iomap_dirty_folio, .release_folio =3D iomap_release_folio, .invalidate_folio =3D iomap_invalidate_folio, .read_folio =3D blkdev_read_folio, --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 189E6433BAC for ; Wed, 23 Sep 2026 23:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207824; cv=none; b=jjQ+C8wzhnEbtO19VumBvcC8HAIk/BEHamN+LnZMLo0o5Sqq+h/zRe+uNo1+N0JbVGrmsb3VhUiHEo0CrsF9Y5OKEfbJdTHIFaQvb4Abf1ih1/mvJWYMtqLhm7SZHZzzP69GMABkIhaSUtqNaPaH6Eb50pFzW290nZx0uKPqZvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207824; c=relaxed/simple; bh=yXeThnqDkkqQfZuxk0/UWy3aO+ZnELynhrbLzksgHI4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YeJlufsl08XT+nzWwSY1Ky5xXbdbBpihXs+lnwmPdWQRUF+np+S43JSZp/YWd/Vy9i+u3YtzYYl+xOSY93ZoC1fuTo7naH9xznb9Fh3BsXqXLkbGr58nnUj7tRWlLEBB+cOvS10go7KS6y94CnaH5DCggGIgv5t24BBHjet+52Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=sj5b9uc4; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=yrwTXPMc; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="sj5b9uc4"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="yrwTXPMc" Received: from pps.filterd (m0167071.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCW6L3594959 for ; Wed, 23 Sep 2026 19:56:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=tePV uFSvZh3YZ0vx9H5UbQsBPQSfTF32xq8p5PG2Idg=; b=sj5b9uc4LsyptVKr+OoE eTMaUxHRYpb0oukkyF9M/sqlvTEOh384V1RPIGb0H5/FOmaet2XLIrc41yPXv2He 5xvT4roMGFGCne6FCJbUVnbuC3jjxf0MUi9N6xftBPxSoh4Q9Mq2IMEkS1NBavIC 0xfX39reA6e3SCDTn64JhDwVB/Jx7SaEY/Y53RxEloAMuf+DHyy9QP0335/gjXjJ lMT1QPKwXyWbKt4it30YDciqfjjzF/mjEEYDvbazsLjWRAqlID1SgoPHe1wMJTKl dXgcBH0+SK2UrTX7hW46hENyx8jdx1jBYhZ33z+T0/gS4377Lc9EqSGL3aa7UFKW ZA== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvhw6v5hf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:56:59 -0400 (EDT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-39de4e72b33so2344557a91.2 for ; Wed, 23 Sep 2026 16:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207818; x=1790812618; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tePVuFSvZh3YZ0vx9H5UbQsBPQSfTF32xq8p5PG2Idg=; b=yrwTXPMcEJinzT4ktvTbKKrgLFxQ56hHVJ86zqbTwJyyA96yhmNTV1a3mqiyFqL0al nDZQyFK56u3mZpR09kakpJnLpQS4CbWuUeJNuJtGz250l1xXTkAp/1rssRDiW67vuZqF 3LwtG/YrNHT0PTPErTI3GGt8Z3wD7BsmvvFS1bI5UWFWhp6qrnnJp/irfzIjThBphy7C vBruNu9BzXH433BW1GE0Qi/y8D3EgYqUP7JH0oIPUqFZeSRi6PKGbTAxNQ2xCypOdXeD durIt2Kl3L+R1ntqStICQdVWeM91ACG6qDwfCoroMHPfiSKZf1LcWGiOJE1P4/tt+PqB ZYoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207818; x=1790812618; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tePVuFSvZh3YZ0vx9H5UbQsBPQSfTF32xq8p5PG2Idg=; b=VVFBcBsnaiaaarvHXa3DijTpLVhvwG8ev+y/agBK4RSvO4F3bSmKVWFiZ2ahu/zwFb ppW2ecoT/FanetL5BwgQhbje0mYadnl7W+XVCtTYlzE5fN0RJlFC1+sL2tWw4/q4XuiX NBXEBbIrE1JUnqx8BexrcPPUTcc4MDVw84hPPfsLsdc90yKeK81FubudTpPVcA+PJWOu vlCh6n9Zjur3gKUCjF8qMIsCJiWi5HDYwBoTvVZ1qIBJnKwaQihFHfVAVTuBa7kdETyf JORCH1a5aN9klVT5Xmt6yyHn/C6NoXWOUPI7oF+Mnd/Co+IkseNG9shkGkkuDCnS3fh7 71mA== X-Forwarded-Encrypted: i=1; AKwUvBzahyBMJeZ75LD9iRDdXiXykXIJaXCYSsoqOL2WqzorVjepw3lmYv/RxB/nwJ6qbQSva3QiDs09eHHStdI=@vger.kernel.org X-Gm-Message-State: AFuF++mdspNOalF8joTSfXhRsilwsCI4wa6L6qunjZLbIoyRXsXSZCmz yMbEX1FoMW2AcPU/b7wFnI+u0l0MKJu8h4wIiZJyg6v4tDkBb8Se1V2chBxNb+e0rjrxgBnq97x 8dWlmWLfcxPTmpb1hR8aI2mKaQsTcxvm7m5K7vkHEuL3wVBGI/Rsz36NU7ZQSFA== X-Gm-Gg: AYBFou33IGeDNE2o0gSct7y9o4FA4oB8eXQbCYdGZKDayZ4jR+Mf2QvAPY45g79H3vI E2N9klOu0ReSiyNaYH4wI7zzfRWtTnrgjSNnRbrlpKPtU9zoOewt/sAxeadFqt4REJiRbH9ht3D muG+C1LBVUx/jAdz2qmtnFwEuyk10sI4N3xEfRRpbZDqK4Gnqkmj60g54Vh4xxs5aOTn3/9goLc 9DWOYq/5bWyn6WmdHmunfhxpgWIdHTehlJkeKlY0kazmJjvGicBVAxZJQ+hQL4lXQm37gyB385I QX79CtuN8WG+w6NwFJTMQXBEbztNB/NxX55mOfNQ8YyjyyaP7KUyqYLzK0BTOFLoXMXXzSgqZYS Wxkuzj3zI7GWg3WKLQllmd4zUyUEfn1Bmb+10QLv58mOulg== X-Received: by 2002:a17:90a:d603:b0:39e:4d1e:d47c with SMTP id 98e67ed59e1d1-3a098606bdamr610947a91.25.1790207818505; Wed, 23 Sep 2026 16:56:58 -0700 (PDT) X-Received: by 2002:a17:90a:d603:b0:39e:4d1e:d47c with SMTP id 98e67ed59e1d1-3a098606bdamr610921a91.25.1790207817951; Wed, 23 Sep 2026 16:56:57 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:56:57 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:35 -0400 Subject: [PATCH v5 2/9] block: take i_rwsem for the direct I/O write fallback 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-2-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=4766; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=yXeThnqDkkqQfZuxk0/UWy3aO+ZnELynhrbLzksgHI4=; b=QkG2d8Jbv7plkdNQIPKBKPZEtuwiBr0JNrWEczqcHSyaxtBfP4cb6kna3/skQP8mwhum01j+g xPTvsnpqIsgAJj1MhM7jYr4Q0lcCwmgWXpAHraJW1U79pTS3KeTw8CI X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX4+REdSmjBV1x 0rQPHk/KMfGLwNVmdqpqtJo69X27uEBUL6YgnTy4IKD79Yg+GRaTtG4tdsGzwBOIbHUc54ZofwH NhxCnWA4JIzasSGvScbiG3gYv+RiQbqZmtL7rl7TGQBqc40PF7oL X-Proofpoint-ORIG-GUID: zKMzzVmLBghZNrDp3A4tDjswKmWsmWH3 X-Authority-Analysis: v=2.4 cv=HcaB3SE8 c=1 sm=1 tr=0 ts=6ab4674b cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=79PYxaXUQd1wl-QFWJnA:22 a=NEAV23lmAAAA:8 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=HaKTZzbUtGO3MgJEFeMA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 a=GvGzcOZaWPEFPQC_NcjD:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX41T3+J16F0N9 kOY7W96gp9pHuxHquLfqNuLdV5HOeM0OifBTOpccGyR5p4B4XBkO4Jxbh0MXQkJ2iPWNYgPhNx2 MMVPC1mdshyKzCbavtMjeIISlmR5OLex6PcpXnmxymlBSOG28/GeP7j9d/v4eCW+ATMH1RYSdwm +VmNnvzF6GbKroqNV0ygfBSISkULQkg+niKDdxpFpvu1PDK+0AZ/rcyp2LBja6oBiX99EUwHk+f M6AHfM8tiiFLS19gxQGbv3KgHZcrelh7sc2a3JVMTABe0XQ2STU8jDjYhsCjNwDR/AWHpEluNo6 bafJevtzVADuFY8mMrAyR1QVdipJL8lsBXtR7Y4zIoAp3uc3+ychLBOJTh/LzZHQ3WF+brM5SoW /nCIgaYupguM9w2r/CFW9/xBbbySFZp6qNhyPNDY8QQdOz8iPl6L/ZDhfQeVL026b1ZUUyCNJfU IOuq7ReeYbykG/yv90w== X-Proofpoint-GUID: zKMzzVmLBghZNrDp3A4tDjswKmWsmWH3 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=10 adultscore=0 suspectscore=0 phishscore=0 clxscore=1015 lowpriorityscore=10 spamscore=0 priorityscore=1501 impostorscore=10 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 Commit c0e473a0d226 ("block: fix race between set_blocksize and read paths") closed a race between set_blocksize() and block device I/O: with large sector size support, set_blocksize() can change i_blkbits and the mapping's minimum folio order while a concurrent reader still holds a folio of the old, smaller order, leading to crashes. In particular, it made blkdev_write_iter() wrap buffered writes in inode_lock_shared(). However, the direct I/O fallback path was missed in that conversion. blkdev_write_iter() passes blkdev_buffered_write() as an argument to direct_write_fallback() with no lock held. A direct write that completes only partially then finishes as a buffered write with no protection. This can cause a BUG by racing partial direct writes against ioctl(BLKBSZSET). Writer threads issue O_DIRECT pwritev() with a two-segment iovec whose second segment is an unreadable PROT_NONE mapping. The direct path then writes the first segment, fails to pin the second, and returns short, entering the fallback. A second thread keeps toggling the second segment's protection so that some fallbacks get past fault_in_iov_iter_readable() and reach the page cache, a third thread populates the page cache with folios of the current block size via pread() and readahead(), and a fourth thread toggles the block size between 512 bytes and 64K with BLKBSZSET. The minimum folio order only moves with block sizes above PAGE_SIZE, i.e. with CONFIG_TRANSPARENT_HUGEPAGE raising BLK_MAX_BLOCK_SIZE to 64K. On a CONFIG_DEBUG_VM kernel this yields the following BUG: page dumped because: VM_BUG_ON_FOLIO(folio_order(folio) < mapping_min_fol= io_order(mapping)) kernel BUG at mm/filemap.c:858! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI RIP: 0010:__filemap_add_folio+0x860/0x8d0 Call Trace: filemap_add_folio+0xc9/0x1f0 __filemap_get_folio_mpol+0x240/0x660 iomap_write_begin+0xa87/0xd70 iomap_file_buffered_write+0x304/0x6a0 blkdev_write_iter+0x255/0x510 do_iter_readv_writev+0x23d/0x3c0 vfs_writev+0x211/0x7d0 do_pwritev+0x121/0x190 do_syscall_64+0x121/0x630 entry_SYSCALL_64_after_hwframe+0x77/0x7f The same workload also trips WARN_ON_ONCE(pos >=3D folio_pos(folio) + fsize) in iomap_trim_folio_range(). Fix this by calling blkdev_buffered_write() in the fallback path under inode_lock_shared(), matching the plain buffered-write branch. With the fix the same workload runs clean. A short IOCB_NOWAIT direct write reaches the same fallback. Taking i_rwsem there can now block behind set_blocksize(), and the fallback already blocks on writeback of the data it copied in direct_write_fallback(). blkdev_write_iter() already rejects a purely buffered IOCB_NOWAIT write with -EOPNOTSUPP, so do not enter the fallback for IOCB_NOWAIT at all: return the bytes the direct path already wrote, or -EAGAIN if none, and let the caller retry. The reproducer used was written by an LLM, and is available at [1]. [1] https://gist.github.com/tzussman/69d06bc57d42a42989eb038b1b5aeb74 Fixes: 3c20917120ce ("block/bdev: enable large folio support for large logi= cal block sizes") Reported-by: Sashiko Link: https://sashiko.dev/#/patchset/20260730-blk-dontcache-v7-0-3e8e685006= 8d%40columbia.edu?part=3D5 Assisted-by: Claude:claude-fable-5 Reviewed-by: Hannes Reinecke Reviewed-by: Christoph Hellwig Tested-by: Shin'ichiro Kawasaki Signed-off-by: Tal Zussman --- block/fops.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/block/fops.c b/block/fops.c index 8d74d0e57f43..7ff78b448659 100644 --- a/block/fops.c +++ b/block/fops.c @@ -770,9 +770,26 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, s= truct iov_iter *from) =20 if (iocb->ki_flags & IOCB_DIRECT) { ret =3D blkdev_direct_write(iocb, from); - if (ret >=3D 0 && iov_iter_count(from)) - ret =3D direct_write_fallback(iocb, from, ret, - blkdev_buffered_write(iocb, from)); + if (ret >=3D 0 && iov_iter_count(from)) { + if (iocb->ki_flags & IOCB_NOWAIT) { + /* + * The buffered fallback blocks on i_rwsem and + * on writeback of the data it copied: return + * the short direct write instead and let the + * caller retry. + */ + if (!ret) + ret =3D -EAGAIN; + } else { + ssize_t ret2; + + inode_lock_shared(bd_inode); + ret2 =3D blkdev_buffered_write(iocb, from); + inode_unlock_shared(bd_inode); + ret =3D direct_write_fallback(iocb, from, ret, + ret2); + } + } } else { /* * Take i_rwsem and invalidate_lock to avoid racing with --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 A6E804248C0 for ; Wed, 23 Sep 2026 23:57:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207825; cv=none; b=l2OqixjSjnLSJgwpi5idYGGgZ6vrBbTpmPi9vrZSSFNjpYZI1NvHojqkCRtMTqtLzVXr/0Y3G5igaT38ntFwJMF2z2AUeCtHdIKeqx+PysUgVCNlf4SejG7QhVvnRGdvNGzwrHWMAxFn2KqL/k5dpJayPpLjIgG+sZKboM4QW2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207825; c=relaxed/simple; bh=+6JrzqfYyBrGC9pfDqzdgv7ta7N3grQNKoC2mDums3M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IU3GX3aZ4wABGGIA9VK1zTnhgT5XZLvAHqAXnCNlaQOWsPpRIYvdQG1K9VFwyQHLL0HdEQjGXs5o84aza4oaIX4oKa1+aTfeZyGdgQnDz7h87LBb6UsZ4BM9CiKsnNjOg4krfWj8V9heD/5+ov2FJ31DSKHG9AAzGkbkkO8q8r4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=ZIF+oELv; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=Xfp1wmY/; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="ZIF+oELv"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="Xfp1wmY/" Received: from pps.filterd (m0167070.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCvmp2038797 for ; Wed, 23 Sep 2026 19:57:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=HttR teK87V8g79twx1jaSTPrE7lew+ZNw8C68XNjrsg=; b=ZIF+oELvaW4TWpkgzVo9 +v/WeH+if8/IRVrLAJKDNHdQTl2ZHsH+jRqHFkmNgR/Fgjg4w+FdDo0kknGaGSW0 ihnWu9Wi2+2yayUmldfplrbrtVnR/uKIAU+3ACBCq8cVU+tVFYRdSBZScK3bTjK1 +L3/saRYZiEIgkFDT7lWt3bZ6b7T1DndNE7JMRJtn0gXtdM57d0B1aIci3jlbtGg npWUP5yBf6uctWaYskHQM82oJZcAVRRU9WkI41Pa/ywhRbnXw753KtAoq05umEyi 75akWk2w9/mrZtn0apY5rHKVZy9R6FHkuGMBuEkqN7jhMuM7zBm9Fq1kr4lJBNyB SA== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvh5wcrvy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:00 -0400 (EDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-381250979d5so1265564a91.0 for ; Wed, 23 Sep 2026 16:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207819; x=1790812619; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HttRteK87V8g79twx1jaSTPrE7lew+ZNw8C68XNjrsg=; b=Xfp1wmY/GwU5bYrn38l3lBntinZsSggL7IG92n/d1k/STAi24AolVLTeqyThD72ruW IaU0ofx5V/R+dXCf5eKbziaaOvT77Rjwy1+El58SMy5qrXzjZPNQWyRzgvYDDfGc1jAX aMtx/FMxtQ622eWM3bX2R1efLNrKHSmCY7pyK7D8dRwLMvnN0IDGbJJTKTWrEfmYtkVX NRDsonus8B4nz/RzTqh+52p00/bJKUsxbQ56b8WX2gBmsx/YcfkvHOX10aUdKB/XP/iw 2sue/GWOgcyHufjpLOr7BRL6puGBacl+vsUkDMCAIrTiHV7l9Sz7x44bCa29hd4Oi2hR wn+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207819; x=1790812619; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HttRteK87V8g79twx1jaSTPrE7lew+ZNw8C68XNjrsg=; b=wHPqeGpxEcClJ/fYvGDuE7GLePY/4VTL5x/2lgtHzm+wDKfZIximD8PFTeY3SlEjwT fpeNqQyEHv95+0QRNIlL29YhRhve1ZEp05qgUwHmXZJyjlcf7wEQKASzE9cpysWZpwHh Ht3fwmnPgdxmx2V+7YsU0wGhqqUxdCxNf4rTcd+xrqgACNTqQA9V5Y/BLxKzTDBfaPOI lDZZPSGQRp2p/EBfW2GRQX/Z/EAn04NU6yNOiM5rqpeaobgTCulSTZA8XiEeUGEsNID3 LhcoKBGswoMvimLkgeO/XgZWhpzr+4kO7COd8IvGBLEZIZT33EPx76LFmBd8Dou1LTzd uaaA== X-Forwarded-Encrypted: i=1; AKwUvBzVLCxm5DG/qVf7foqhzN3FUxXFhbZpo56DeYvT/DKv3vZqCK5Sife8LC0yblGdo4W3lNLiRl7o+3qDkOk=@vger.kernel.org X-Gm-Message-State: AFuF++nPV0mUi77mu7oMb2R7u+a9E+HcShSp8yl+qacFb46nE9SXKpIl k1JHRI1d+mJX8tsQ0RJbFnxtoZDm03GF92MxLoHbFZikH+biWdFt8U/uDzEkQ0SAR0nBz/bgri7 Go7khZ481zP/2OeHMRo3zRXquNqbiUBg2yYpH3Z0IhkTE32hVWybGp8MYr0WRVg== X-Gm-Gg: AYBFou0j6vkfK5RZizq4yNhC59jAwq4RYlVfJeSCfWPZzHQWSaxGpNLxupm54Y+MWb3 6OIoVGFTN4i0LZRIWwlsCVEwRRjqdtEyIsxIb3RlAGugcwC51TpOhNkmzIp85W4WceCxSlKO1qP 54QGrqeK4DUMZiwIyAsVAG7+exoNSBH67l3oDHl3cy4P3k0VHk/iH6SoKCWXT+JrqFuBuPzyaU6 roZX/zAUnPiSy8AtijiV4MWPrd9c9xQNFB5EhDaH+jkoUGwJKFDNeTanYkcG5itBZlsC5KuQjRx QOZs9ecWSkMLOaWm8W4etCJ/3cXons211/1j2QMY77YsFpFFX2PFi15Wr45EZO2wNG9NXyDHYUx t45KquqrxuCDkDN1ncFd2EsDaURiyWotPd+LEPivnEW88sQ== X-Received: by 2002:a17:90b:3985:b0:39e:6c69:f482 with SMTP id 98e67ed59e1d1-3a098d5e61fmr587379a91.65.1790207819423; Wed, 23 Sep 2026 16:56:59 -0700 (PDT) X-Received: by 2002:a17:90b:3985:b0:39e:6c69:f482 with SMTP id 98e67ed59e1d1-3a098d5e61fmr587362a91.65.1790207818962; Wed, 23 Sep 2026 16:56:58 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:56:58 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:36 -0400 Subject: [PATCH v5 3/9] block: take i_rwsem for the splice read path 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-3-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=2886; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=+6JrzqfYyBrGC9pfDqzdgv7ta7N3grQNKoC2mDums3M=; b=dD7Cr3HZsDdAA+/bC11LwMS3llQ1d3sCSR6/9uZY0+P+73KAknov8g3Rkg8eZm4OsVsAKz51H U7kxqmE9IGaDj0C3yx5QoD1f+Q+Ez0zWFF4MgOVTY5TZY87E0SpFnvK X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-GUID: 5-hgEqRf86Zre2jaZg9ZLjgjtNuRBGBV X-Authority-Analysis: v=2.4 cv=DIEacCNb c=1 sm=1 tr=0 ts=6ab4674c cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=svvvyxlR1OQQkelhaPoB:22 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=kXXCQoMOyz17bj_MZH4A:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX7O0cmaK5F/oz kEQATfbv+RpziiB+PcCcD6FMvdKv733eQp121/jcWXcRghvxtZ0AQIHQomK8WveLNH2xnwLAwF0 oWB85+2oUGDnwSSL0o0YK1a6TAq9W7vUstE22Bgib0JXnC+3VN67 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfXwg3H7ioISy+1 IMhIivtkn8VXBVfWvNF16U3sRx2iuDhUaAZyaX7nB+I57r7yppJXUWj1v4DXxhXL1nLRHQymyLK 3KCNFGkIuV0fNcyNA+0f06htVdd0h6JKHtFmzoFPPu5m4WRqHGDPNw/1K2WKgAHtBqwn/tmtDCF LVtt6yVFMDVaU7H40UL7YMt00wr7LCREtXlDE/uNuThrZsRG3sbj+T1YXIluwXVa42Nn/FgoRtz e6cwWpZgJU84fUvrsZxlpT08tfGDPmNGzJJOTwtR7Pya6mcrTkKoIhlQ8Ym1WXs6lKqSNWaR1nR JImquB14L2pGqIiFQKxp15Zi8pIUIm3B7GH0zmaohpbH5w0odlNPOt+bWOu4CuyDJ+GH9JXctXe bWR7nC6BDry2JpdCMqprr9ZroCbqeB4y4WBq3AZdGAW3mlUav8Pi0w/3eE5XSPbQff+0kCpXVwn rZRM2WkNLQ40dUaGjIA== X-Proofpoint-ORIG-GUID: 5-hgEqRf86Zre2jaZg9ZLjgjtNuRBGBV X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=10 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=10 impostorscore=10 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 def_blk_fops wires ->splice_read directly to filemap_splice_read(), which allocates folios based on mapping_min_folio_order() without any lock against set_blocksize(). A splice from a block device can race set_blocksize() raising the minimum folio order and insert a folio that is too small for the mapping. blkdev_read_iter() wraps filemap_read() in inode_lock_shared() for this reason, but the splice path was missed. Splicing from a block device while toggling the block size between 512 bytes and 64K with BLKBSZSET hits this within seconds on a CONFIG_DEBUG_VM kernel: page dumped because: VM_BUG_ON_FOLIO(folio_order(folio) < mapping_min_fol= io_order(mapping)) kernel BUG at mm/filemap.c:858! Oops: invalid opcode: 0000 [#1] SMP NOPTI RIP: 0010:__filemap_add_folio+0x51c/0x570 Call Trace: filemap_add_folio+0x64/0x140 page_cache_ra_order+0x1dd/0x3d0 filemap_get_pages+0x153/0x760 filemap_splice_read+0x13f/0x300 splice_file_to_pipe+0xc0/0xd0 do_splice+0x6a8/0x890 __do_splice+0xb0/0x210 __x64_sys_splice+0x80/0x100 do_syscall_64+0x10e/0x520 entry_SYSCALL_64_after_hwframe+0x77/0x7f Take inode_lock_shared() around filemap_splice_read(), like the read path does. Fixes: 3c20917120ce ("block/bdev: enable large folio support for large logi= cal block sizes") Assisted-by: Claude:claude-fable-5 Reviewed-by: Hannes Reinecke Reviewed-by: Christoph Hellwig Tested-by: Shin'ichiro Kawasaki Signed-off-by: Tal Zussman --- block/fops.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/block/fops.c b/block/fops.c index 7ff78b448659..652297cd90b4 100644 --- a/block/fops.c +++ b/block/fops.c @@ -860,6 +860,22 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, st= ruct iov_iter *to) return ret; } =20 +/* + * Take i_rwsem to avoid racing with set_blocksize changing i_blkbits/folio + * order and punching out the pagecache. + */ +static ssize_t blkdev_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, unsigned int flags) +{ + struct inode *bd_inode =3D bdev_file_inode(in); + ssize_t ret; + + inode_lock_shared(bd_inode); + ret =3D filemap_splice_read(in, ppos, pipe, len, flags); + inode_unlock_shared(bd_inode); + return ret; +} + #define BLKDEV_FALLOC_FL_SUPPORTED \ (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | \ FALLOC_FL_ZERO_RANGE | FALLOC_FL_WRITE_ZEROES) @@ -961,7 +977,7 @@ const struct file_operations def_blk_fops =3D { #ifdef CONFIG_COMPAT .compat_ioctl =3D compat_blkdev_ioctl, #endif - .splice_read =3D filemap_splice_read, + .splice_read =3D blkdev_splice_read, .splice_write =3D iter_file_splice_write, .fallocate =3D blkdev_fallocate, .uring_cmd =3D blkdev_uring_cmd, --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 A6B673EFFA6 for ; Wed, 23 Sep 2026 23:57:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207824; cv=none; b=eXV4vdtu+DSjM2/urC2WdFmGzdqYEy1G68taF2r+iVg+Vb4VKfMA6x7hQudkvardj2y+yYZVIWY6c/QhlShvw0rfZi7gQ0dp310prQB6co1LlcG2A0QMzUBhfkhYkz4zCEf/Brn/67hqJbrEtA0PMwnMKVjaK71ziYFe6WqeGuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207824; c=relaxed/simple; bh=spLOCm9oIGjNLT3/zOuEwP/vu912oCh+c2ZtPG1gx+E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KrQLXjzyWHIFwQ/UQWwJjKARyXJt2FssGMVChN0x+pdq7nQgyzI5kmRPab8ogcZU6d8rdjVAvEsZDys7YwYMv10Xd16Q/oFhckRxW8O/RuxH52HRhlY9kOHvu31I3pLpiMfE2wI78PPS6XATNuCYqY2gLE5Y6ZWitYtXdKMOdck= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=mqzYsTUV; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=SvWAL0ty; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="mqzYsTUV"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="SvWAL0ty" Received: from pps.filterd (m0167071.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCRKw3594470 for ; Wed, 23 Sep 2026 19:57:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=LyqV U+CLvutgdAtA5rnYnRg4S9pI27Ht0vSVxZHopDI=; b=mqzYsTUVo/ZrCTXqP7Ka ACYFjQ/n/6iQyeUtZ5OMBEOR4QYgVR8ovosSXb1p1PaNGl1dPqy+gHVmtBwJWRNW o6gTKErA0ayWMTu9/0DADQ2Wf9khQh0eQajX3qCq9cD/1wdkDAa1SxJZ5NNdH0jG KBsQ60JSSCFC101vHPcUubxgZgkT5FIfgMewLfdvoQwwRTfUiwIut1OsVvWrOJ1N qHg0aoYbX0oyGMhwjAG3eRqm77ybcveEWqq4qWxPql6Sizs66ZOVLYP57zT5GYs9 CbAqNDxkXfYkB/PstY+ILENwzrMP/BSFq0vjZZRtXx8uTGaLzAZAS6JSNB+5xOSy 1Q== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvhw6v5hx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:01 -0400 (EDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-395543dc382so1498736a91.0 for ; Wed, 23 Sep 2026 16:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207821; x=1790812621; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LyqVU+CLvutgdAtA5rnYnRg4S9pI27Ht0vSVxZHopDI=; b=SvWAL0tyk+KhugtwWwuKeFgX/qpipyl/zDY/fAV0buCLtskr/zsCFjkhgJsjSNuC/Q uJlmQYESqjfEenA6lGH4N27urgOZj7jXd5OgOQH2RHQ6rmcJPumR4EFx0XTQk53cInFF 6hlPpWcvzw3cH7+5TVuTTPXu2Vr/eJGRGUjjT7lOFJGVLq1m5Zb/EvjhPyo82IUIrd5X M2fIN4kC1eLhijXNnY5UK3KllUa/OmxSNHcvn0AM1u41Mac/MEH1szzzTFPqViHsDFK4 mDgEaJlQGVqYRZ106hJK5TKIlh1hA4kbgyct2el7SfPC9MP4tlIEBaFWnBrIUkT83BXO 4Gzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207821; x=1790812621; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LyqVU+CLvutgdAtA5rnYnRg4S9pI27Ht0vSVxZHopDI=; b=EtMtazSLh1svr1N72y1Bnb8XR6Dbb1kpt7hgOoc1BToUmskxQEJnAaU7/AfIwM0+TO kGzbbY6YfVGRGPBx5Jeku8+dm0bUZmoj7VpeqgCxnuCVu9jHnhIolwdvFxbeeDyiv9YH xl/BFVB3EVF0ZZI6Nt6+UL8qm5VgWQVIfvsIrsCD8ujchCIyNMt5GgCSJIU/95qHkYnX 5MARn3pV/jWoB+KnvwHyljMLlKMuq5tS+3ah5qTSJ6niUz9jArR5ltde6G+bDkzAxliJ 1He/SzavUFtDjl3U9goC0MNHXdBoa2VfyjqFC2CyLc+uPoYNgZuTLGtChC7Io0HEk4AJ C1hA== X-Forwarded-Encrypted: i=1; AKwUvBwvXsFV8SdpFvZ7d0c/a2vZIyuk9BXwA6FhmcPYB4H3+p2Xzjp0h2zpEvEL1jn4MaYbUoSnxuF6PD4y/0c=@vger.kernel.org X-Gm-Message-State: AFuF++kSE94TH9j0fDTyn76t0TvQGemKmM+UcllEiG+F6kD37UsMEIEE 4iW/3wSoiCiMkJWQz8XxU1ID80PRc0upi1//rMKQko3BlxFPUfjCgEBqbKRj6V2o8WnoW7j4Yqz heQY6Y0fuKXrqer2ohLdoU4PkIHmNXtgQmsnb4E9G99aZ/jSOC6kbvDYUwDZOKw== X-Gm-Gg: AYBFou15DARcqNqxl+fv7FK+TEAByEmyjbwBfhVTqpM1rBfHriGLtveXXCGtojZ3jfq Afti3HcRLeaLwJM0Pl/5ItZB3OHWiJpkU65rSlqfvb/7nvWeeVisnkcmFZQq5Xxdfn5GsgXLoDK VTF3AyXSWJYqTX7xqQzUbAvdtXjJYt7xy7kaZ8c0u5gO+GYn7CYaViDeUCuN4ULb9qTbyM/NRr+ 6rrj4UFmtojxMDlf6aFlQOjsOrazI/XLwHXlV10hetsJIvzbj+SKbeJsk6HDVONDl3uFl+ZE47n vr2IlZDhT8F21ksRactiihds1qwb8JlCVROAW2KjE1uXgKy3XOyk24JizUUNRI5yPCymkkKa70N cqNNYoJ8te57tv+0fRNal+VK+g4/B4cgWZF1bbYBrotmceg== X-Received: by 2002:a17:90b:28d0:b0:39e:6a81:c920 with SMTP id 98e67ed59e1d1-3a098724784mr555243a91.19.1790207820664; Wed, 23 Sep 2026 16:57:00 -0700 (PDT) X-Received: by 2002:a17:90b:28d0:b0:39e:6a81:c920 with SMTP id 98e67ed59e1d1-3a098724784mr555217a91.19.1790207820196; Wed, 23 Sep 2026 16:57:00 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:56:59 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:37 -0400 Subject: [PATCH v5 4/9] block: honor IOCB_NOWAIT in the block device buffered read path 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-4-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=1869; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=spLOCm9oIGjNLT3/zOuEwP/vu912oCh+c2ZtPG1gx+E=; b=xk+BkWRoenjTdGReG9uXLP9A4qN4gTtvtRRKSU8g5yBN5P/np5trElupUCU8rZS97yuSy0wxd xVbV2pMTglADr3gYSLzkvGQ4lNdyhNYMN1Azm5e3AA2NKB4iBqsONT4 X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX2Yn/8ZND8dbE fy619ZzTra0XNevIc7kg2x17IbIuv//yMzEdGtiTGKmYIW3kbd+R0Wy3hJKI2caDOENOADzj7X4 oaCZj1EPSmKZiu96Ee+IHpYiSYXXLEe1ld8VNFls/Tky+bqZm6i8 X-Proofpoint-ORIG-GUID: K2HZndNvwhGI_dZgpDq7jhvyvnAmWIsG X-Authority-Analysis: v=2.4 cv=HcaB3SE8 c=1 sm=1 tr=0 ts=6ab4674d cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=79PYxaXUQd1wl-QFWJnA:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=s8mzj7eOnaliLhoSWqYA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX9rYr4eSt1PSV vw5Rb8coENXZPJFjwMc6agL+eozQs6vpa+HUm21QkYaqY278+pGBWvERYzUllGBwqN+mhQTaD9+ lNT5Huqan8aWvfFMIRUt6m0H/jHDpYx/7Ncv8wo624WiPER+UjLvYyUR238ywHDqqdjG+2K4BJv iO7DxKUlYTqmB8qRxTfiuG9yEhp5pKNWW0Q0/JsAIh/A1x22fwC8fE3ottjCEOc1VcUb9XEQA/D CoCjY+d1W9ahl2cGkWhbO5m7OHVWLGzErRYGL+hshmGhlRYiJfRSDrraYno0YLrd0oWeVVPeP// nh0Z5Fdn0RX480KtiKfrfeyTYkhW2BzOZX76ns3foTk1n6G8ARliMRMxe43sD3SNngKI9bmdzhF MfiCCOyAoqIj50I4qWS5FEbCZSyVMOEMm1k9Q2SCHWknldp3dn2oQCfv2cFc2EeVRpX66wVQI6i tCZ2z+xXVZdmg3Fz3Xw== X-Proofpoint-GUID: K2HZndNvwhGI_dZgpDq7jhvyvnAmWIsG X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=10 adultscore=0 suspectscore=0 phishscore=0 clxscore=1015 lowpriorityscore=10 spamscore=0 priorityscore=1501 impostorscore=10 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 blkdev_read_iter() takes inode_lock_shared() unconditionally around filemap_read(). Unlike blkdev_write_iter(), it does not reject IOCB_NOWAIT for buffered I/O, so a non-blocking read, or the buffered tail of a short IOCB_NOWAIT direct read, blocks behind set_blocksize() holding i_rwsem across sync_blockdev(). A preadv2(RWF_NOWAIT) issued while another thread changes the block size with a dirty page cache blocks for as long as sync_blockdev() takes, 4 to 6 seconds on a scsi_debug device with delay=3D5. Use inode_trylock_shared() for IOCB_NOWAIT and return the bytes the direct path already read, or -EAGAIN if none, when the lock is contended, preserving NOWAIT semantics. Fixes: c0e473a0d226 ("block: fix race between set_blocksize and read paths") Reported-by: Sashiko Link: https://sashiko.dev/#/patchset/20260802-blkdev-fixes-v1-0-a82fc549fd7= 4%40columbia.edu?part=3D2 Assisted-by: Claude:claude-fable-5 Reviewed-by: Hannes Reinecke Reviewed-by: Christoph Hellwig Signed-off-by: Tal Zussman --- block/fops.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/block/fops.c b/block/fops.c index 652297cd90b4..f61d250e49c8 100644 --- a/block/fops.c +++ b/block/fops.c @@ -850,7 +850,15 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, st= ruct iov_iter *to) * Take i_rwsem and invalidate_lock to avoid racing with set_blocksize * changing i_blkbits/folio order and punching out the pagecache. */ - inode_lock_shared(bd_inode); + if (iocb->ki_flags & IOCB_NOWAIT) { + if (!inode_trylock_shared(bd_inode)) { + if (!ret) + ret =3D -EAGAIN; + goto reexpand; + } + } else { + inode_lock_shared(bd_inode); + } ret =3D filemap_read(iocb, to, ret); inode_unlock_shared(bd_inode); =20 --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 C380F414DDB for ; Wed, 23 Sep 2026 23:57:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207825; cv=none; b=YUb/yDyqtniRUx8Y6GZ4ccggMWoBZU7aesBZdk7FEiRvVwZXw8/GqzltGYRGbn+KPagZmnmnABk+ACqn9hDz7OIQfbjwyvqYPPh+gkGes8aAwxkThr5TpClRW8T5CHGKUYDDlLIXDkR6wO7MrYyCRGehb9zpYTrKW+t1hGRnd/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207825; c=relaxed/simple; bh=DjPv1Hn2Z3CRKTcBg45/zj1JqsU4Tj7v0CV1EfPK7ro=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IBFblzyZDoFurV7fm2NnLrPSkWmes1He9y6q/aHks7Db8jdgSWmBh8lXKbao7hfNlG4MsCVJmzKQaxIUHJIIQyRWbn8gFgDePwOKbePAy03BE6kxEmQCt//h4KGdFndmjBfZOKFOAWXce3vl2wRxVVrZg1Gjfciy8HP696TDTPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=N2pb7zkd; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=ocOcil60; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="N2pb7zkd"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="ocOcil60" Received: from pps.filterd (m0499199.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCWh42170455 for ; Wed, 23 Sep 2026 19:57:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=acIK MEYO1UcWv0TYeAF2D3GMMAsylHF/37x5XTPAOBk=; b=N2pb7zkd6/gB4LQG20M8 FrBB/HFN86kbHsUzUCcvoy4ju3qc/CZblejDzjCS0fLcctg3i4uD888goRC8E1W/ YIF+HBHYIJkUecusFVN5ukogINw9DISjuj9V11L42GljtPPJYcZIst5GlZs5bhyI 92D67UIvC8SPBLTvdAxCSCdeJqENyzWAa+Q+MxyQmIWnglWYeFURN6D04c88xbj6 u9HC3LBp4RG5mfPQs0S/PxAu2kOas8juuX/+i8V81WmhMO7ooLImHir5eZh6pfPe zsVFTplI+OKTgmwKY1sg2CmQM4QqBtnY0VWrgb+q4Tf1jduBkMTK4pP7nO7336BC kA== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvmrat1jt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:02 -0400 (EDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-385d2703b64so239692a91.1 for ; Wed, 23 Sep 2026 16:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207822; x=1790812622; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=acIKMEYO1UcWv0TYeAF2D3GMMAsylHF/37x5XTPAOBk=; b=ocOcil60OWWDkDpDXqN737v75HtJXOdJ1Stad5mK+73yymCzo70S1VI0rIC+NXkv17 JR6z21+eAeWhds5JJu1dJ4xjPuYLj0dTXHxY68dq154soVus55HArKkZJSRDg0Ek0cqb 8yoYBMUfhzUZG9JbxG+axm5OcRthibCiZJMqS2W44atPpU2TvxMKVDArefKVwxYf7izd ACjds0QVSxIhlh7LHLIvrtpoegAvPz8gXnbS3onsK6VS3n8Lif57CSU7q9CM96SnlBpE d8+fJ0c2njO3xMKvk0riGZE9VCzZM5xMd8evG6q0k3RUenR8mrMHffbQt62zMWYhWQ74 QrZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207822; x=1790812622; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=acIKMEYO1UcWv0TYeAF2D3GMMAsylHF/37x5XTPAOBk=; b=0RegrludWVYBBWgCHf2Peag0rLKbujupXNljTahrd2UtDBDUodG4/S/LVlDrDOkqmT MKxgkBY3bWkYedY749NoHGH9o8192kiJNHp3t+kbD5oPjIiwcKeBeepByLgGcw+1kfA6 Isb4cF2H++K4XE+OiLSj7rrZkCzCuq3YTdtr3skkuecc3UekvVFcs7oEcPBO7n0W21HK 8RA48nza4jdSV0BfDyP6OUlnX49996Y5rjjQ3zVa0iBiHtFf/bcDZlVTrz0fP19Imrxc J/69zQgF5UzWROFUnAPiZ83knFlcr2/ZaQ9OcM6G64Q7AxuIX5y79i2mz+oppYW6LBI5 1OlA== X-Forwarded-Encrypted: i=1; AKwUvByDEdyniXsCAo8jkWtOzyOpdXOXup5vY2N2l3E98XiSOLprI5JXpQCR31uLb0YRLX4GeB6DuF5GyRQgHLQ=@vger.kernel.org X-Gm-Message-State: AFuF++l5fpCZeJQzXgvXxpjDzBPqgjtudQIuPp1O6pFI4TM14G45hziI +uNlpBXRAJFxpQc23jxdJAAXXDu3oZoHk1Q7R3A2MVUfCeaPVW0Q5tL8xlvx112NfBR+jBV2Huf bJZkvdD3+dG2vBhMcPwnb7Uicc8A/KoBc3DIdzx3m/gHq+7gjtXuNWgYEc7tPYA== X-Gm-Gg: AYBFou3iC+A/D1pPhZ6sAarzvngBPSQEThGo4Gu8Ht4FhhYvzTy3CNOm7BkdfGAu4Bq 7Lq0zlehXm9Gv0uua0f1vYTDtlXNQYMIMW+w5JUZdPlLb7UgN8CyvgKePVGADrlvIDp80ucKJsF 00DwVmaN6jJYo0iH5sj5PtEbLUdQkdeWoDgZh5y0CYjtXff9Bn6+2LpI1yKzUS4GFWFc4xEfw8A kgzmwY1p9G3E5QKk3VBht598La+IT2/cxErMzEVOoNE3xIY2ejr0lQqp50rwirwwKh/TXOTYSc6 dMKHs0VZBKGR7adR/zycK4YNjzZ5GObpnIjgEfG4GWCAd+lsqn2UQJV6grPLQibD9YwJ3Mr/jQ7 iC8UDjLoWOienxkYZYBbacKMyowJtSZvQ0XMjTfHcXuc4KA== X-Received: by 2002:a17:90a:f94f:b0:3a0:2614:2077 with SMTP id 98e67ed59e1d1-3a098b93d4bmr460217a91.41.1790207822131; Wed, 23 Sep 2026 16:57:02 -0700 (PDT) X-Received: by 2002:a17:90a:f94f:b0:3a0:2614:2077 with SMTP id 98e67ed59e1d1-3a098b93d4bmr460196a91.41.1790207821673; Wed, 23 Sep 2026 16:57:01 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:57:00 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:38 -0400 Subject: [PATCH v5 5/9] block: fail a short atomic pin in bio_iov_iter_get_pages() 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-5-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=4628; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=DjPv1Hn2Z3CRKTcBg45/zj1JqsU4Tj7v0CV1EfPK7ro=; b=DdSNzfh0KBkbq0ty8HCCWgTl4/CMY6lVQ7hyEUyr2D4eNp2M/mWEC6MwbBQB34nmy3lgz4Xvr 62qsv0NQt+WAoXE5g3v+FVMH4zL0sfQH9iXjZjxPBRG+0Ehn+bbz8h0 X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX6QTIj3FwYfdQ 8QQ+MJoYY4IN1zSV036OBDUdISykR6kOL2BE6hvj1f9mfmst4SLPKFeaa6RYIBoUwUCkGrkk14D baWa6SQzJFIv192b9z72opWs+YV/OaVgBnKzz1lDreAhrPAX9L03 X-Proofpoint-ORIG-GUID: 0CYFULcSfv4zqK6eOLWs1LaPgZh6kE0z X-Authority-Analysis: v=2.4 cv=cPp1IVeN c=1 sm=1 tr=0 ts=6ab4674f cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=G--0XuH5328wxK7v7Suf:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=DOn4q0-T8uZzdi3JsfgA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX3c0rj2xrSalR 5LWOtqKBCq16pvDtXZQnSaOzuNrHNJm+L/OM5n2//VR9nYJ8qtGrk60kUfKMZePFYD8iDin53LW DO68seAuoxWlYKTDAfuMwmSmNs03BDi/wBmCV7ap3qTRBfD7vjWdNFPARqcudOWykI/tc0fVWSn GPsjaVMnQYdR2/Zga0xguJfxDgd+ODSFgSqEEfqpDbaZlkxYqiGaLE9mxARhoboVnCazEV0tW4r 41Rno+RwjEuKAYIjSZTt5cMMtHG5sKUOivMtrofAUWuvgxsp3YsF0yCBov3dPz+y4gxbvmxcI0g m2tBZEsJ4JYmi6QX/KNk4MrlJhR9yjW/suTC9OT7eCjieGkwUO0gvRPVEWOYB8b3zKwDmNfxr1i AbhuAWzEZWVqqmLlN6AC2MKeheHLcwqkW13Y0qIYkb1o4TGHq/dBQ73vH1JZSeM2Wx7hJgxkUKH OFdFgnVVeZJsF/Rd69Q== X-Proofpoint-GUID: 0CYFULcSfv4zqK6eOLWs1LaPgZh6kE0z X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 impostorscore=10 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=10 clxscore=1015 lowpriorityscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 On a partial page pin, __blkdev_direct_IO_simple() and __blkdev_direct_IO_async() submit what was pinned with REQ_ATOMIC set and leave the rest to the buffered fallback, tearing an IOCB_ATOMIC write. This can be triggered deterministically. A 16K pwritev2(RWF_ATOMIC) whose last page is PROT_NONE, on a scsi_debug device with atomic_wr=3D1, completes short with only three of the four pages written, violating RWF_ATOMIC semantics. Make bio_iov_iter_get_pages() release the pins and return -EINVAL when a REQ_ATOMIC bio doesn't cover the whole iterator, since an atomic write is submitted as a single bio and a short one would be torn. That covers iomap as well, where a partially unmapped buffer could trip the WARN_ON_ONCE() in iomap_dio_bio_iter_one(). The async block device path currently sets REQ_ATOMIC after pinning, so set it before, and move REQ_NOWAIT along with it. Fixes: caf336f81b3a ("block: Add fops atomic write support") Reported-by: Sashiko Link: https://sashiko.dev/#/patchset/20260802-blkdev-fixes-v1-0-a82fc549fd7= 4%40columbia.edu?part=3D2 Assisted-by: Claude:claude-fable-5 Reviewed-by: John Garry Signed-off-by: Tal Zussman --- block/bio.c | 46 ++++++++++++++++++++++++++++++---------------- block/fops.c | 12 ++++++------ 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/block/bio.c b/block/bio.c index f95b63c0604a..dff84c0b54bd 100644 --- a/block/bio.c +++ b/block/bio.c @@ -1285,6 +1285,7 @@ int bio_iov_iter_get_pages(struct bio *bio, struct io= v_iter *iter, unsigned mem_align_mask, unsigned len_align_mask) { iov_iter_extraction_t flags =3D 0; + int ret; =20 if (WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED))) return -EIO; @@ -1304,34 +1305,47 @@ int bio_iov_iter_get_pages(struct bio *bio, struct = iov_iter *iter, flags |=3D ITER_ALLOW_P2PDMA; =20 do { - ssize_t ret; + ssize_t size; =20 - ret =3D iov_iter_extract_bvecs(iter, bio->bi_io_vec, + size =3D iov_iter_extract_bvecs(iter, bio->bi_io_vec, BIO_MAX_SIZE - bio->bi_iter.bi_size, &bio->bi_vcnt, bio->bi_max_vecs, mem_align_mask, flags); - if (ret <=3D 0) { - /* - * A misaligned vector fails the whole I/O. Release any - * pages pinned by earlier iterations before returning - * since this bio won't be submitted to release them. - */ - if (ret =3D=3D -EINVAL) { - bio_release_pages(bio, false); - bio_clear_flag(bio, BIO_PAGE_PINNED); - bio->bi_vcnt =3D 0; - } + if (size <=3D 0) { + /* A misaligned vector fails the whole I/O */ + if (size =3D=3D -EINVAL) + goto out_release_pages; if (!bio->bi_vcnt) - return ret; + return size; break; } - bio->bi_iter.bi_size +=3D ret; + bio->bi_iter.bi_size +=3D size; } while (iov_iter_count(iter) && !bio_full(bio, 0)); =20 if (is_pci_p2pdma_page(bio->bi_io_vec->bv_page)) bio->bi_opf |=3D REQ_NOMERGE; - return bio_iov_iter_align_down(bio, iter, + ret =3D bio_iov_iter_align_down(bio, iter, &bio->bi_io_vec[bio->bi_vcnt - 1], len_align_mask); + if (ret) + return ret; + + /* + * An atomic write is submitted as a single bio, so it has to cover + * the whole iterator or it would be torn. + */ + if ((bio->bi_opf & REQ_ATOMIC) && iov_iter_count(iter)) + goto out_release_pages; + return 0; + +out_release_pages: + /* + * Release the pages pinned so far before failing, since this bio won't + * be submitted to release them. + */ + bio_release_pages(bio, false); + bio_clear_flag(bio, BIO_PAGE_PINNED); + bio->bi_vcnt =3D 0; + return -EINVAL; } =20 static struct folio *folio_alloc_greedy(gfp_t gfp, size_t *size, diff --git a/block/fops.c b/block/fops.c index f61d250e49c8..d143a664c770 100644 --- a/block/fops.c +++ b/block/fops.c @@ -342,6 +342,12 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *= iocb, bio->bi_end_io =3D blkdev_bio_end_io_async; bio->bi_ioprio =3D iocb->ki_ioprio; =20 + if (iocb->ki_flags & IOCB_ATOMIC) + bio->bi_opf |=3D REQ_ATOMIC; + + if (iocb->ki_flags & IOCB_NOWAIT) + bio->bi_opf |=3D REQ_NOWAIT; + /* * Users don't rely on the iterator being in any particular * state for async I/O returning -EIOCBQUEUED, hence we can @@ -371,12 +377,6 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *= iocb, goto out_bio_put; } =20 - if (iocb->ki_flags & IOCB_ATOMIC) - bio->bi_opf |=3D REQ_ATOMIC; - - if (iocb->ki_flags & IOCB_NOWAIT) - bio->bi_opf |=3D REQ_NOWAIT; - if (iocb->ki_flags & IOCB_HIPRI) { bio->bi_opf |=3D REQ_POLLED; submit_bio(bio); --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 C02973B6C05 for ; Wed, 23 Sep 2026 23:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207835; cv=none; b=TpffRj5jtryfZB5AKCQHXMw3cD5BKjfp0sQ5q3D+1loSMLEjY7zuAbU8oJu+G8Qssj4yWXtCopsAo+lgTpT1Guu503ORiVaUXOiVHvS1+w/h1GhlzBQ7rgKjVxeulyQvmoX+5IYo1gga0uyL9TRJN5Q71r6fDg7LCmaAibofHts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207835; c=relaxed/simple; bh=Nu/5r3TfT/Q/vsXNVUhqfpuzZC3aCtD8nZTl9rIbR08=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PZl8gT7rq//tyKg3vG/Sc9ph3ghnPmDQrIhy84Gz12KgEcHI3OFevcIuJ5fdhkiQbvOivdXZX8vplBzT0/hyg6LyYfyGUQ2sgpjckdvDuqF5d4H4dWpVuKUmHwL097XIa/KZ6jGuRCcPXvHfHDSf+QfAC7EcATcEjI6KU1aRKdw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=dHyNcdDs; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=w1o9YZEL; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="dHyNcdDs"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="w1o9YZEL" Received: from pps.filterd (m0167069.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNEGNr047139 for ; Wed, 23 Sep 2026 19:57:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=3uhH QLJjfq0DoIJAX+Cur8K6P4W0lN4dox1XMY9jjcM=; b=dHyNcdDsw0mxu8q5hicJ NzTaUcTdarP0BPx5WFUkDegaaMOdP2Lrlxo2YIk6UNJxt/WxrunFt7PjJ+oMIig4 aadw98a5ApMep0vwsAVQiJ/AUKeDSyGM2AzvJr9cUcmlz7G9yTZV0USzmgGov58L szLTEaCF+vFwp0O1uOu1h5+H9lX196sfxF+JPC6VSpEPM0365yzguTeOQ2vtBxbl oMW4mZkFLrF7gswHnUMGsS2i59EXswlwGE5/LQ1sBYgNx3GJ1eMZjW1ft/e1GEce zSWFaC/AydDGVKcYovjjI2p9hB/N/CJZl8xmW8a/VgFTgBFYhvayQFukawkxLAWT cQ== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvhrem5m7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:04 -0400 (EDT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-398d0010cfaso1356871a91.3 for ; Wed, 23 Sep 2026 16:57:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207824; x=1790812624; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3uhHQLJjfq0DoIJAX+Cur8K6P4W0lN4dox1XMY9jjcM=; b=w1o9YZELBtHSwbFNi4z8wFyQ77ZO2wf6B465myG5lFffQmLjmuk2I2LJs8WqOWQca9 Y92RC8mjTEATcv9Dhzr87WTFB/acjwyqSZ77MTKRA8Ah0bPvYBsee3OBrNvYB8x1zKIY RLSGbKkXK2Th2vETILm2prN3J7Hb/Yqq7ZlToGHzYsoLR3PC3I7SpzpWKCsulSNIK1M+ P/U6qJas10oF8hNIPqBh4Xcj15m4f1Pj3WLa5mDinDiWVbBugj9XrzbbZlWxk904UII5 H+gwaqSoeH6A7VUC4REVpHaShmr/ZxNc4u4zob5/P5pODbKQDq4/tjviKzYbM4QCDGit ny6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207824; x=1790812624; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3uhHQLJjfq0DoIJAX+Cur8K6P4W0lN4dox1XMY9jjcM=; b=IAfKjQ3bVc3oKrX4kDyfJ2n5db4kB3g9m+ahoXvOuJJsoipwV1wuoERWyqU8EZwQAN 4xwQ8oGDMRPmIZMyA7RARTGzhfQcjK+mmSsND+Kk3mjSrNwjZt+A6LPX2ar/+th0bEVY 97qx6BK3+iM5IEy9yYi1AlOBW/7QLOz0HtPJ1KcqgsGKd6EWzVCWmwMJYLMgDPebNOIc r+wCtp1wVkQEibNG6l152Qg2H61MMZcDkCgz/dAuDpXb4RLdtXrePXnB8LY+Z9r6lRP2 JnfZ+sHz6dK/EBZZjvC9sKxKuHPaATKAarO0vt5zpxt1OdOsWnTyn8N1dB5bZ05orRPC +TSQ== X-Forwarded-Encrypted: i=1; AKwUvBwf52cDFcR2ZFuKc5DyO9bIB7/nWSSdP9+8TCT6Ww1FQUlganQn4FNsdX0u9Icotb86GG1PuAEfjbeMLHk=@vger.kernel.org X-Gm-Message-State: AFuF++mt34aWbojmuPM8x2NwVtFOi6tKHO6lSWeCrDQ4bMx+I7wEt3nJ gHtzT7OXh3gC6BejMgFOL1TswxifK9CpSLjTqmFlLzpe57/W9mRyDdyIK7kOeYGELR81hjhV/Pu /Ei5DudyxBPgSOj43yEiCcT9d/jkXGw0sbVnkkeiTpFLOkWw8wpFtMLjw5Kd7cQ== X-Gm-Gg: AYBFou09Y2F4neCwNIY609g/HR2KZtMw0/DPCJZ37T3AA3fjrxlcTlzbGezFxph0fTw uM99njhyDHybR9MDUfbowXs09Smwt81X0SkAKdDbepb76P1pTgAdJ69WjfWFY8uR1mg9e0BZdbz m+o9r8vv3kEBsQqYOKW6EIokvHzdtz/MF9TqVfNBHFU4sYPxPLcyDfV7cFEPbHTvNxi6QR7k6Z8 9E1c141vCfpb/MUpflx1+QcP6rsxy7XAROIHD0i7br6lnMziIChH7oKadTRbjDhc0uSDTlpunJR 2Os1KGR5L1v3c6J9eq1QC3KgzdexrlLmPJltL0siadOreloiNMtDgZcOr3gxpkFn9JoLYDZmpwt 2hFsdtLSXZkbh7dKZZmEkzaT+ERc/ak2O8ighlO4c7s0zLg== X-Received: by 2002:a17:90b:52d0:b0:3a0:903b:f254 with SMTP id 98e67ed59e1d1-3a0985e68a2mr574530a91.15.1790207824153; Wed, 23 Sep 2026 16:57:04 -0700 (PDT) X-Received: by 2002:a17:90b:52d0:b0:3a0:903b:f254 with SMTP id 98e67ed59e1d1-3a0985e68a2mr574518a91.15.1790207823749; Wed, 23 Sep 2026 16:57:03 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.57.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:57:02 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:39 -0400 Subject: [PATCH v5 6/9] block: don't fall back to buffered I/O for atomic writes 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-6-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=1775; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=Nu/5r3TfT/Q/vsXNVUhqfpuzZC3aCtD8nZTl9rIbR08=; b=DXmB7fQK9D2lfhFBOvF3+NbMxz6a5uoj8VE/L3TXgOqQFNw4KwOJzMuRHd3rufj/AV8xliIC+ 84FjyOzp3XiAKHWIVKzOaQ7t/WKZ4kqDrpqIzo7WfN8pRUhL1j5MjIW X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-ORIG-GUID: Hkpc6rSPA6Oq9MBNNrZci3AeTuTtp8MT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX/bzHevwkVWad vJL92dyWuOdB8iSkbweD/w6y0httAaDZ9TvDa6PlqOnk8lEqB769H8bU5Y7uB80bBt/bbgoYk4+ iyaHC0nD912KOUoQzsyE+1RqxdjVuqyPuwunUFR8pzeJ8DBIpuDKJQq1F5EPN8Y9gyQgJ3vOYca +DHSRN+LiQv5eAxcG0H5XhmpiNFJVGVqJPXU5Xit7AGO7BgrWgCNl+PWCEtRcWfLpkYior40+8i YmWZ0xnq2c9Knl5Yz+QghzNc8psiWKMsY1n9HB38Uyb00WqUaY3nx3hG52ZSfAStpv3yTd6/1g9 8fwZaCkCwvE14iWjUI4KR9s/yJNzGYXb7o6FyeMOGh3U53Z12AwdWEHaOr5FHxEGjBv8ROE3ckW NwqXditSzI1MtgIib6EANjGrZlJ40jyzyTJa9iKAX0+PsiOCqS+kFU6VqmXDrYv9HdYd4BKi26q 1KxZQ493JqZpu7dpSqQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX3fBKUAf2REHv cGgXqybAr8aP9qJJ+o0b2RcWz3Edzg5p1VBRrS8dB5LxdHO+9M10lu1ZJTJJrRa8fBlUGIEldGV tlOFED44waTmw0O5gzxgpdN/L4+pQqZEq//0awtF8KANq6fKFUj+ X-Authority-Analysis: v=2.4 cv=J/A/fwnS c=1 sm=1 tr=0 ts=6ab46750 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=JR4YdQiviy7OQf72WyZ1:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=s8mzj7eOnaliLhoSWqYA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-GUID: Hkpc6rSPA6Oq9MBNNrZci3AeTuTtp8MT X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=10 malwarescore=0 phishscore=0 suspectscore=0 lowpriorityscore=10 bulkscore=10 spamscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 blkdev_direct_write() turns an -EBUSY from page cache invalidation into a 0 return, so an IOCB_ATOMIC write is retried in full through blkdev_buffered_write(), with no atomicity guarantee. Skip the buffered fallback in blkdev_write_iter() for IOCB_ATOMIC, as it already does for IOCB_NOWAIT, so the -EBUSY case returns -EAGAIN and the caller retries, matching __iomap_dio_rw(). ext4 has the same fallback and only warns in it. For block devices the fallback can be skipped before any I/O is submitted, so fail early instead. Fixes: caf336f81b3a ("block: Add fops atomic write support") Reported-by: Sashiko Link: https://sashiko.dev/#/patchset/20260802-blkdev-fixes-v1-0-a82fc549fd7= 4%40columbia.edu?part=3D2 Assisted-by: Claude:claude-fable-5 Reviewed-by: Hannes Reinecke Reviewed-by: John Garry Signed-off-by: Tal Zussman --- block/fops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/fops.c b/block/fops.c index d143a664c770..59af4e808204 100644 --- a/block/fops.c +++ b/block/fops.c @@ -771,10 +771,11 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, = struct iov_iter *from) if (iocb->ki_flags & IOCB_DIRECT) { ret =3D blkdev_direct_write(iocb, from); if (ret >=3D 0 && iov_iter_count(from)) { - if (iocb->ki_flags & IOCB_NOWAIT) { + if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_ATOMIC)) { /* * The buffered fallback blocks on i_rwsem and - * on writeback of the data it copied: return + * on writeback of the data it copied, and + * can't provide torn-write protection: return * the short direct write instead and let the * caller retry. */ --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 1290947ACE7 for ; Wed, 23 Sep 2026 23:57:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207835; cv=none; b=jETzk2k4wbq1zoo7Kz/RW3m82vge9cUnpYSaP+0P/IaeffjNjfOphHUaldNX5pnMEafVtR/UQfagYt25/1xsKwF5fC8IdGKWcWpKOIYudBmYIuem1YUSFs9aH5tnSLmIpV0/IZmIC4LXlBRx0KknpgruJLVEtCyYbbRLnzjaQI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207835; c=relaxed/simple; bh=eekIRUkO6xctJzh0LDxpTW7f45r0xCkvZKYTjeZsvDw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JI+NjxtyXSDZjiuV47pZ2lpQa3G2m5/YfPPIbsCkB9fsJzNMmodinHw8lpa7RA2pF97XTwJItA5CDccBnTwzulXKXb/GIAJ0ybnXSV0LfAjnWgShM8ZliEpp7qGKMmUHKavlkLOUUfk54Ein3L7gSua/TVGgve/com2hK6KTqqg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=ZqFevxwT; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=j/LlkV3F; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="ZqFevxwT"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="j/LlkV3F" Received: from pps.filterd (m0167072.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCRxg1939511 for ; Wed, 23 Sep 2026 19:57:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=0qoQ 93CRiLkSb7/te8GPJ2ac6VSP9fU3H03z6ipMMtI=; b=ZqFevxwTcBbyDpOcLaW4 mO9UrX57vPQn2xrd0XPJ9Z/fmWZjTyXImQ4f0RMylBH3owoB63T3ReRghrAXhmvK pAJY+eZBp8Rh+Kf/7wzUt9i/X66+G+8FlSwTlXdV0uPNGgzqQ6bpRkqskKxvvLHg heXoLcS7GBtoeGRJkCLUjYhnFscr5J1x830G6jjBOhPWGeQ0oZux1U5m7CSmLce5 hnKa61pnOiJNKXrbWkDcqVl6ujHfk9URZOe2bPrl/8epw/fLUmbgNULiLIJ7KjdP Gpe+rzcR5FYW+2i8fTaU4WiLldSMiLNo6wVrF+hFoSd37ZNgMaAX5wIoR5fukObL sQ== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvqtcrbrh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:06 -0400 (EDT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-39aee9b4cf2so2232318a91.0 for ; Wed, 23 Sep 2026 16:57:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207826; x=1790812626; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0qoQ93CRiLkSb7/te8GPJ2ac6VSP9fU3H03z6ipMMtI=; b=j/LlkV3FNwHLasYq2Udu/KizgIKx0yBKNowUPtf4pozk3shlQV8b2j9AzrIDzcDxLd 0kB8mqDthQpQvjiFz/5MpUdLUXKsY10RRnsqRnAo7oTbO7Gcr2HniyZJI1HdNsqIcSWx DU88bCD+i0TlWZ6CcK4NZe7p1XxQcKpgaZmSKKZxv4e5SYmtjlaode2aYycLt/fgiQGu lj1fmh4VqYJR+PWgzXySpPQHd+QZsIo+3+FIfeMxk3eEy3AieBCE5nV4Rf4HEsv2aQLb Sc46DLEC1E89Ch8BpFWDlaj4MmSo/2SSC6hZ+VUm4078+Vv1kS30YkzBo8XpvrxSuaa9 b/4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207826; x=1790812626; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0qoQ93CRiLkSb7/te8GPJ2ac6VSP9fU3H03z6ipMMtI=; b=DinZRYT21xp4po72r5JnSqIu6/mRWA1BUkr8Fd7EXFsqbyrqD3DC4AcAB8H4dg9c+p SjR+tg4hdgSNAk4E8k1wkaDt3yIvrOZVb9CLJuEJJJZArNDKVYvgnTlbdH14qSEwZLZ+ 9LyGwrBvpOcyc9eMXBYjycNXTI2d4OFmpFiHRla8VMPq11O7Uwd/MdgPSY5SKNWQ77OJ Tz/5mpUNFoRUDI0POQ/IS8ALN1oaCdP8snmj0EqnEQWQTjjYW7kvCEQIBey+F49/8m6r xCquc1vSgUhCQvP1Dhc42ikmw9pXtVYPulr6Ac0/LHPDXUFloeTH8kuX/cr/xVSbwReC NSsg== X-Forwarded-Encrypted: i=1; AKwUvBz8d2YGDojaeMpM6+Wc7HCEA+0i0P1x0jdd+6jQ9Uk3kgPGl86ccHgeBPFtHpRv4Qxcj4phfmx46D+Hg9o=@vger.kernel.org X-Gm-Message-State: AFuF++l55OsBcJyIEiO2bYLLX2f2ZZ8CB/iSaPqVRpvmiZTyd/jmq5qy C5F7tcvCFsuAUxvJpe//g1HDGPFh5lA0ZYwYL6+gexhExIJuTLrQVHvuI/553oMsbrGUeut0Vw+ WuitANE4G1NsXvYR7dK+sw3MVNEJ0ZvxGOPBztE/MLuBpdhtqiGOKVoH2pTs7+w== X-Gm-Gg: AYBFou3bIAXdvvQOHlF7oQEsm3FO/GLLUMEZrDDn+L7YZGaFMUOwN/ytISpetc5ViO+ FL2SbdY42O216rgUdNauf+GUjStWcEq1vTt2U4lfbkzzFxeWdLwz3rFsppMwbFYwzsNGAhN8Mtw j6vMHT0agByBHwZhUahez7OdfRLyLtK8ES0mfXAZBOHkBVGDdn8EJoNBT/v/YguTzp1a0UP8ahy 2pRqyxVtd+ZNpUkkkv6mTqzhO8NVq1qKkfLiZ6Bu4nf0+cu1Jtf3gwHQqqXOIu0IZ6BQLxe1HcC M4pCrnY1nHUgBQzQYoRMuMrVBjme8jwSORjuxp2oVhpzswocjA1UwIkw3S9p6Rkz4gmNbnLqHf8 7LONzkA92C0XOQpU+AjkOsAwIX5XFcch/llW43M6igrHHZw== X-Received: by 2002:a17:90b:1c92:b0:39e:6c68:c77d with SMTP id 98e67ed59e1d1-3a098e0515cmr614666a91.51.1790207825686; Wed, 23 Sep 2026 16:57:05 -0700 (PDT) X-Received: by 2002:a17:90b:1c92:b0:39e:6c68:c77d with SMTP id 98e67ed59e1d1-3a098e0515cmr614654a91.51.1790207825215; Wed, 23 Sep 2026 16:57:05 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:57:04 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:40 -0400 Subject: [PATCH v5 7/9] iomap: reject atomic writes in iomap_file_buffered_write() 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-7-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=1162; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=eekIRUkO6xctJzh0LDxpTW7f45r0xCkvZKYTjeZsvDw=; b=2YSDeglgyk07rr4XCceLzHJrMpahC9wn5HyPBCzFyGWpB4A7Jm0LwTpK53X+wg/uOg2P5jPVn EO951ZjrUh1C4yifGSMaj539bji3K60vVy92ozbmJFDFa2hZoDofx44 X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX1rkGSJcWJLmh l/INNQUfvdZrUMuNGLVUp15hac0Efy1VdpYuIvVWispVMuVPlv/da+VR0qHe8bQ0HFWHIlLiVtf h/HT3v20/3D2DI9TVsCbLqJshOPBjavbfxPThZl+vsymU5Johf05QpSS+FhjgsyDCfJFHa3TBnZ tmWje3GJLSqSx/upelzl6qQJfjs4XNWL0l+3Bt23UXjTZmRtVd8ixbvI7IhBtsPrEYJFumyCqad kl+Bpng2611nFPDWYCfrVV3AcQ4BuyYwLHQ8AM+LC/hjV2g8Sd6JI+x8EWX76qAr+0Xe6tLueQd meJgECi8vMOtS9krOFQszS4iUXaLVO/c1S8O1smhJw50uopsOkg6U/x9lZI8506zN7jB5NH8P7J QIyox3eHA1+UJpz5MYJOK+jhaxcm8aorp6MEluz9RdbgivYPzeHips4QNTSsk7mNibnacFjRZab eHKbv9oax+M7/FUkckw== X-Proofpoint-GUID: OckWn2B17dr3xl9HfB-yJEHDE7GiwTR8 X-Proofpoint-ORIG-GUID: OckWn2B17dr3xl9HfB-yJEHDE7GiwTR8 X-Authority-Analysis: v=2.4 cv=LtYHWXdc c=1 sm=1 tr=0 ts=6ab46752 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=SsB-OO3BMngHh3ZO9fOt:22 a=ASVHLkjgWNnnwhGXR8EA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX1lNT3hN1UN48 KIrKbVWxDUZUbO5j4DdsT3jCj3ITUnjVVSJvwla5Lh+n+QDMkO6ibWmbPOVOLBSrRVfjnfTCfiR ZDh6aNX3e2nkWtLL8UqNsEXAQ7swWh6ZQbWRhIWpovxJ0/5gHldu X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 spamscore=0 lowpriorityscore=10 clxscore=1015 malwarescore=0 bulkscore=10 adultscore=0 impostorscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 Buffered atomic writes are not currently supported. The page cache writes folios back independently, so it cannot guarantee that a range is written atomically. iomap_file_buffered_write() does not check for IOCB_ATOMIC, so a direct write that falls back to it would complete an atomic write without atomicity. While no such case currently exists, fail IOCB_ATOMIC writes with -EOPNOTSUPP, so that a future fallback cannot complete an atomic write non-atomically. Suggested-by: John Garry Signed-off-by: Tal Zussman Reviewed-by: John Garry --- fs/iomap/buffered-io.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 0a5ebfda90f1..e6654cfe1cbf 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1304,6 +1304,10 @@ iomap_file_buffered_write(struct kiocb *iocb, struct= iov_iter *i, }; ssize_t ret; =20 + /* Buffered atomic writes are not supported */ + if (iocb->ki_flags & IOCB_ATOMIC) + return -EOPNOTSUPP; + if (iocb->ki_flags & IOCB_NOWAIT) iter.flags |=3D IOMAP_NOWAIT; if (iocb->ki_flags & IOCB_DONTCACHE) --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 BB16B47D93E for ; Wed, 23 Sep 2026 23:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207838; cv=none; b=p1Q0RD//TSUQezpX9gFakPv5INo4xAeOvLndHoq7LmynD6IiCmXkk7Y/dPzPeCvdrhDLVFy14+4FD1YIG6JYuaA/DeIx0WUGjHmE9mGpdIRttx8aHa2frzdjjEJxGc8E/CmCkKdDAUTUMaCQZvUQMWzk/kfSkO0bZYVvpAPuO8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207838; c=relaxed/simple; bh=X3wzWg0roOO1ptF7ZnClA9IB/TZQgfMHMl8KC4TDQ/E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vg1VwHGSpbYYeT/THKE80XIH3b2n3IOz5v9Vb+rXPdrzMgA0WUtplZcgm4fRjvWGPNxHAnU2OlJy0pD+sJoKcadyAZX0ZM9j8ggbIFkleSQLtUc4Blzgiu7IBbdEkfr2f+7ObpWgkp1/vyYKniBSlTnvQO2ip6vXtQ0qCGvamQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=Z2MCRHl/; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=c6cIKits; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="Z2MCRHl/"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="c6cIKits" Received: from pps.filterd (m0499199.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCP232170290 for ; Wed, 23 Sep 2026 19:57:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=n4kk 5mXgXhks+NNWJaLVIMvxQ7me08UQy0+SMcJDZMs=; b=Z2MCRHl/vKPc2LHq6tNc XiYQw6yOkzNTqDAp9gtSovJ+djDIR3yIu281WzCBIw4w/sMK3Muaqvq1LRmKhXQi DtjBf6/AEDdzb+NfGS07pop80K3LJxY6DsdPJ+tqhOh0DDvx5BSjUCpUKV3z/VFr 95l8DwW75vkML3Uth12IMdTz3+vDwOY8DYG4qqR3LyQHyzOf06mVk3Jjs4eI8MSk aIHlLOV1H7BmPnz2YPW5KJiqDiBc/26ruL+xDJXiAoTlByG6IdSSlCF/SrcfSAgm pdc6gzxfeNofkDGwmbuHljjPtrXokS+tZtR9Qjdlvb1lE6sWRgTz7JsE6QJUqFc8 nQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvmrat1kb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:07 -0400 (EDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e1118e4abso1979878a91.0 for ; Wed, 23 Sep 2026 16:57:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207827; x=1790812627; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=n4kk5mXgXhks+NNWJaLVIMvxQ7me08UQy0+SMcJDZMs=; b=c6cIKits6iwQFGkTJ60ZxJN6j3pf3uceVMo/ZtV6fdV2Ad0LUdS16FL5ywz/IS/0Kl +jSzhMrLzLI4RqbXFTS+dQ2zpqoRHRXsPocgDSy7zxU0R1EfbmPUDuZMyLTheZbaMGv2 KZezOqg0/Brwlu0TPCwygk/W4utF5WzuwDdDqvm+y//4bzA2mNqMJJczw68iUtHgmTim 2V4IO7vreo+OzAIKc49bvnQ9xD8AiOtSuQiPgy498DTmEZHITB+j+OTdRsGGmHcZhXVi +YHcA2VOZ2vmbGr8HDnHYJjm+tLdWl6zmXzeLJJkeQzgUYvF9c7S55NvRDsxjfL1ZhA/ BKoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207827; x=1790812627; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=n4kk5mXgXhks+NNWJaLVIMvxQ7me08UQy0+SMcJDZMs=; b=LNzkvQBHc2vC0aJbGK8dnezl8A2rAxYI3ZqKsYfSieskAP+ukLX85z1QMwJUlMXL25 5zKDHGYh2pWgSFx1LUa8CMS5HmBMZykEJAVh3Nzekpz+f9cL9SarD1lG3dodzQFf6bov F5LLajIEehkiKJGQxtoURddbjVBC85T5t3DRgul/in0Oh/1LuJamdV34huwatZaWBfyL ImueYeG1sJkCB8sbzSypIEBb4Cc+MOPOyVxVUlGgc1pCCc6A8i2M5bwjK97l3+iDZyQ3 fzB61vcfshseOSfz22nUXqiHjhJKsCgg25SmI7E2yogUxudnsdJOn8mlrfqQ98QwvGWD DfLw== X-Forwarded-Encrypted: i=1; AKwUvBz4jSkpbv6AL8PksgPDrN/HLW8Zr2gk9quLa8iHVXW8BSAlDFQqJzc9+yCVN99mVjcWtqcREKyyp9nKTb4=@vger.kernel.org X-Gm-Message-State: AFuF++mU1/jVyXG1YsNlnu+xMmeoOpw9+BLZzTFi5EGzL+QWM9T+yOQn DECRhq5GTpqaVg5PB5XRo9ZM9bdS1YeLJIwudegQsfS3AjnjlgIA5BOn7/u3AoI05X5lhsX/cT7 iUVv9wlU52csiR9IMcSgR0uhTYb9BV/1Cm1uch9UQK10taCVNXfqlyyO/a0Y+Bw== X-Gm-Gg: AYBFou3vwAKPdh+gBD+28CQT9iR4Yre3IcDD4EhCawZFwnJZU+SKaOPRe/BrxCj6dey J1ctKwN/DUB0/kVrIsSuNQn+FhJ/7bvVwuie26nXTN5UJVnmpHIH4nHYvwPMBBjzpXIuxKtSFVf Wy17E3KRS5rP/qSUApDL1/LWDTHbHGbK+da2OiPeR1w+wlZAo7C1Cj8E6pGQ+Nf+NedSbkbVdpI JkNyx2/n9WxqpmwNwTgYaJ/6mOsDmpUlcqpwHWD2uiwHfwZLamgk2o4915kFCkjijTnIUsAmZLc fnAlRwr+QZYxW3HMzGom17AoJpRpaQZ/RA+iNiU+WSdCwDCWkEXT+Y+n9x5Z7hGqAqR4mdvLjOi 4EXCTgzh23TCMJLoYGQ3TaClNm92A/Wep7v8egPb0Xh9UFg== X-Received: by 2002:a17:90b:48c1:b0:3a0:4023:bb09 with SMTP id 98e67ed59e1d1-3a09896f0fcmr599656a91.56.1790207827370; Wed, 23 Sep 2026 16:57:07 -0700 (PDT) X-Received: by 2002:a17:90b:48c1:b0:3a0:4023:bb09 with SMTP id 98e67ed59e1d1-3a09896f0fcmr599623a91.56.1790207826584; Wed, 23 Sep 2026 16:57:06 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.57.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:57:06 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:41 -0400 Subject: [PATCH v5 8/9] block: unpin all pages of a bvec in bio_iov_iter_align_down() 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-8-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=3797; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=X3wzWg0roOO1ptF7ZnClA9IB/TZQgfMHMl8KC4TDQ/E=; b=g4+/LTObucWvEWYZXfmJp4B6cmRKAbNTyAz0wKbmoGjCkzwVFz7bDsWDkVVnaWn5uqvP88rn4 zjtaC1yXvB/Dk3xu1zozB9M+ot0fQCoFlZVvmBYL6IjksSdLpbLuexF X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfXxQsxco3kGYA+ CoKgg++7M+RDQy651LLOAqVtGtuB9Bo2XAQvYvMyuAg8IjKf0BltffTVE8uuXlUA0+EGxcZPlIs /37LDnjB43eiAp/7nZ0QjoDw1arA9eg6jltwRtU/6wLaQKy/v77/ X-Proofpoint-ORIG-GUID: asd9tnNW3__1acwe4i1pojskOeJt_-oy X-Authority-Analysis: v=2.4 cv=cPp1IVeN c=1 sm=1 tr=0 ts=6ab46754 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=G--0XuH5328wxK7v7Suf:22 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=FzqJyQ6YvfuMctRh2gUA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX7o5VpSrhJ6F7 a+ZQqFsVrY65ub3A1GQ91WUl1mylPJrGNTNwrsmroQr5HaienhE4ftxWRzGud6CfdFD0AIuVrjZ P24s7Guf9DWRjk+oC6DZ79c7xQ669LgRb/nRl/IjPiqDPhv7zoCwUjSc7dKZXD9zfDqtv+V1DUI MAnriw9YtZbPIf8lucRnk3ONaI+tQnG3lboIdWfIh7fbizIXvj5GpnmHwG0bBwqx277NyYjjpjg +uSTFzJ6jBzIlxuOiy7X+PKLTdj9r0pMSxds8bqS3HB+SDJpLL8bDjhFUf9INXolxAR9sLXcbLm JKQqU6iIU7CltSVTeoSs60iNeav0NYSLo1rUazRvFFLZ/Hq2DDWm9afaoeOS3PnYik62rUjSBrx 80z3vS72UJ/PRY9xJBGU5izriwuCS8WJ1/k5VqGJiBihXkUKgaCIAk4sMkRjmbR8XKpnQp/hVBh i929OpUCtFsqZk+0GUQ== X-Proofpoint-GUID: asd9tnNW3__1acwe4i1pojskOeJt_-oy X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 impostorscore=10 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=10 clxscore=1015 lowpriorityscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 bio_iov_iter_align_down() drops trailing bvecs with unpin_user_page(), but a bvec built by iov_iter_extract_bvecs() can span several pages of one folio, each with its own pin. All but the first pin leak. The partially trimmed bvec has the same problem. Shrinking bv_len does not release the pins for the pages cut off by the trim, and __bio_release_pages() only unpins the pages bv_len still covers at completion. Both issues occur only with a logical block size above PAGE_SIZE and a large folio backing the user buffer. On a device with a 64K logical block size, an O_DIRECT pwritev() from a hugetlb mapping that ends 16K past a block boundary leaks one huge page per call, whether the remainder is its own bvec or the tail of a larger one. Unpin all pages of a dropped bvec with bvec_unpin(), and unpin the pages trimmed off the last bvec as well. Move bvec_unpin() up and split its page count into a helper so both sites share it. Fixes: 20a0e6276edb ("block: align the bio after building it") Assisted-by: Claude:claude-fable-5 Reviewed-by: Hannes Reinecke Tested-by: Shin'ichiro Kawasaki Reviewed-by: Christoph Hellwig Signed-off-by: Tal Zussman --- block/bio.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/block/bio.c b/block/bio.c index dff84c0b54bd..50b9f303c351 100644 --- a/block/bio.c +++ b/block/bio.c @@ -1197,6 +1197,21 @@ bool bio_iov_iter_set(struct bio *bio, const struct = iov_iter *iter) return true; } =20 +static unsigned int bvec_nr_pages(const struct bio_vec *bv) +{ + return (bv->bv_offset + bv->bv_len - 1) / PAGE_SIZE - + bv->bv_offset / PAGE_SIZE + 1; +} + +static void bvec_unpin(struct bio_vec *bv, bool mark_dirty) +{ + struct folio *folio =3D bvec_folio(bv); + + if (mark_dirty) + folio_mark_dirty_lock(folio); + unpin_user_folio(folio, bvec_nr_pages(bv)); +} + /* * Aligns the bio size to the len_align_mask, releasing excessive bio vecs= that * __bio_iov_iter_get_pages may have inserted, and reverts the trimmed len= gth @@ -1206,6 +1221,7 @@ static int bio_iov_iter_align_down(struct bio *bio, s= truct iov_iter *iter, struct bio_vec *bv, unsigned len_align_mask) { size_t nbytes =3D bio->bi_iter.bi_size & len_align_mask; + unsigned int npages; =20 if (!nbytes) return 0; @@ -1214,14 +1230,24 @@ static int bio_iov_iter_align_down(struct bio *bio,= struct iov_iter *iter, bio->bi_iter.bi_size -=3D nbytes; while (nbytes >=3D bv->bv_len) { if (bio_flagged(bio, BIO_PAGE_PINNED)) - unpin_user_page(bv->bv_page); + bvec_unpin(bv, false); =20 if (!--bio->bi_vcnt) return -EFAULT; nbytes -=3D bv->bv_len; bv--; } + + /* + * __bio_release_pages() only unpins the pages still covered by + * the trimmed bv_len. Count the pages spanned before and after + * the trim and unpin the difference. + */ + npages =3D bvec_nr_pages(bv); bv->bv_len -=3D nbytes; + npages -=3D bvec_nr_pages(bv); + if (npages && bio_flagged(bio, BIO_PAGE_PINNED)) + unpin_user_folio(bvec_folio(bv), npages); return 0; } =20 @@ -1503,17 +1529,6 @@ int bio_iov_iter_bounce(struct bio *bio, struct iov_= iter *iter, size_t maxlen, return bio_iov_iter_bounce_read(bio, iter, maxlen, minsize); } =20 -static void bvec_unpin(struct bio_vec *bv, bool mark_dirty) -{ - struct folio *folio =3D bvec_folio(bv); - size_t nr_pages =3D (bv->bv_offset + bv->bv_len - 1) / PAGE_SIZE - - bv->bv_offset / PAGE_SIZE + 1; - - if (mark_dirty) - folio_mark_dirty_lock(folio); - unpin_user_folio(folio, nr_pages); -} - static void bio_iov_iter_unbounce_read(struct bio *bio, bool is_error, bool mark_dirty) { --=20 2.39.5 From nobody Thu Sep 24 13:39:04 2026 Received: from mx0a-00364e01.pphosted.com (mx0a-00364e01.pphosted.com [148.163.135.74]) (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 431C4433BAC for ; Wed, 23 Sep 2026 23:57:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207838; cv=none; b=gOViS1LU5OUF4DFqCgChTASOAEFOlmCsw1NW5RIsU0NFjlyiU7SmBlGLiNcrA7E7Ucq53ntClUV834YWY4oIehp25Jp1RmEomNaaQug5wUEWvxasX1kupAthMyiiv0gkLwfBH/y2B8dPlGVidaaRNb5p9m82lb0paHArRwW/TM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790207838; c=relaxed/simple; bh=YMDQDXgHvisSOsY3WQrY2kVt6FOq3O9Ypoh2P+vxzKE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oNf7iQGsDQn/A2DQLvmO6wUBwkSaHIHA1vl3wjeQdvFNmIVg1j6LBuGU3IPYgQZ9u0ks9WAS43Dg1HEF+voGVYXJIn97xC8ZrobBtKUOf6mEEoMYcMQHL2AEU2CDRCf9SXI8EjdBUhpeoFZhzb3TdR+jbJCAY+TWAFmQwtWSr4s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=PDW2zhaR; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=d1hDZ1Vz; arc=none smtp.client-ip=148.163.135.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="PDW2zhaR"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="d1hDZ1Vz" Received: from pps.filterd (m0499199.ppops.net [127.0.0.1]) by mx0a-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68NNCRCr2170337 for ; Wed, 23 Sep 2026 19:57:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps01; bh=cc0o mFVdeKpkhDBaIU83p8O9yx2QegCmTSxi6DGn1/0=; b=PDW2zhaRmjM/PwcRtiGz eZ2hTCCD6j86/uM17aF8r64rYhw73ssG5EIwsHgmc2WZqh3ZAj4B2gaHBBrllJym HJiQemEpkr49/l6zx1HsK5MAF1dgwxwY6F4rMZmyyCcDEzys9UoYDByrfwFCvYeF 3LadGeN0h5eMPgrSjVDkVLcyK+O/DcpcK926aaFVe57qj49wWTB0BvGPFCbyYkxS YVOnMfyPnnYzBd0zvQzoeaf1GDH4c9cfbW3la8dsc2/STmFrJHxhycAbB699Lixh NpTPNWLQfrMA9MGTls7vwldTjrB+XcGoJhv3Diorn2clMAie7GlBiMTiD7f9eKYe 5g== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-00364e01.pphosted.com (PPS) with ESMTPS id 4gvmrat1ke-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 23 Sep 2026 19:57:09 -0400 (EDT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-39b77130a7fso1382504a91.2 for ; Wed, 23 Sep 2026 16:57:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790207829; x=1790812629; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cc0omFVdeKpkhDBaIU83p8O9yx2QegCmTSxi6DGn1/0=; b=d1hDZ1VzyJpDXi/AqWmaDPuJSIJXuFs7q0jQDQl9ae4hsl9LHnQhxLEHUL82Y3mGT+ GZ7v73bSrY5bvqaIS18A0CKA0+cT6EEsRicXaLBWL5hVQ+9UTDrt1ItQJ6Q9BhO0q9N2 tbIbrKMsptsMSSj4QXJmp3BBfG8cP6fA50knLCY3e2AES4WmVjOC/L/ifaSTxWh2tIZD 6JaY4NWvlalghQM/8KvCj4fPFVlN8s9u/B2jbWmkvjb7Sa3bd8rdxsCHc/ZQSo2aqoGn XzaNucc3jZDmW92K4XId6hRgH8nCTnSePQVKeTfsxmRdNiRBR9pm7FZAsN4Gz6ivLuEy WfMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790207829; x=1790812629; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cc0omFVdeKpkhDBaIU83p8O9yx2QegCmTSxi6DGn1/0=; b=mangK8g/PUvpjr5Rjj6Q+MYXIjuTYATLOWaRDQyaN0kCEhPCjARCVz3kWrjrpa9438 WXMAqIzTQZ1PIeQipn3RhhymghbCNt6Cd9368hS6pVDG0YAan9DPbY7H6s2XpL2lKkb9 SVqt7UBiKGXyWorMAM6ETThEQB0HAHpGwkZel6A1ZuymR3r58LdxfvWl1dDQ7GuIcWOo 5RdjnCb7XpQf4uGgo3NAAihcuIN1/o2RMAgWZ0R+/k2D3qO9cVMclsYnKXcaDSF864Zv hXbQQbB5R2fXCOkrz38AjqDspjvKNvykvv60phY2X6+vzyAQ+ETObQ0OWVAdxNN47HCI UcUg== X-Forwarded-Encrypted: i=1; AKwUvBxXDj6F8UEMikmy9s1q79CfzPNkqNwXzJPGjD8D0DHX/YAfg0HhHAWwOnOv8qQbifk0ipDCk6i/KD3WZ4I=@vger.kernel.org X-Gm-Message-State: AFuF++le9oZcNOd++69INU7DYEQIPWc4Gdg28fNp8yKbIQPMPWzThOWN FoV1fZf6tYesa+ivoy5pMGmMnTbjgG7kxP8Vz7Md5pJTzIh71dTjX/Oa/n2waSdGPhGdM4hqPC2 3Z9Lt9wm9GrPntTPKhNw/397fW38TUxYK1x4CirftbO3SWNrU2oKN6InTElE9ZQ== X-Gm-Gg: AYBFou1IU0izl+bC2I0TEAwiqrYPCHEssMLrkzjSetX5/IT33q6MFgBlGTqWRUBgmzP 5lrogZfNnDv9Z8+ZvOe0WnVDXG4706uGqZUgEDIqmckvmzZQ36MKscIvM+KA+BuWBsT5sazxJSJ Bt3bmJZ/bxUdDYuPjPdfgKQGzjY1nURlfs2p4BAaEMz7pscA6O3BprsZP4M+WEvnmTQDJnPrGko n4WAz0wlja+/xOsQEl91a+8Vclmyh29sE/dA8lFqxSIPm4jhayTvgYzC5uuOX1KD9R4Cus8wtVf nFFZ47N8L74VyA85VgW6lD58Qgdbgsact7sSyVUZ8lZ3Y/lti6AeS4tSCHDtaoqj7skUHGYPIT/ qIJ9W9k9H+7HY4Kl4/C+zhb641XTZPN0I4+WToH6kawUA3w== X-Received: by 2002:a17:90b:4fc8:b0:39d:f4fd:8075 with SMTP id 98e67ed59e1d1-3a098ce492amr490412a91.19.1790207828812; Wed, 23 Sep 2026 16:57:08 -0700 (PDT) X-Received: by 2002:a17:90b:4fc8:b0:39d:f4fd:8075 with SMTP id 98e67ed59e1d1-3a098ce492amr490405a91.19.1790207828356; Wed, 23 Sep 2026 16:57:08 -0700 (PDT) Received: from [127.0.1.1] (RED-LION-HO.car2.Seattle1.Level3.net. [4.53.155.98]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0976ca5f9sm1331613a91.14.2026.09.23.16.57.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 16:57:07 -0700 (PDT) From: Tal Zussman Date: Wed, 23 Sep 2026 19:56:42 -0400 Subject: [PATCH v5 9/9] block: remove dead metadata handling from the async direct I/O path 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260923-blkdev-fixes-v5-9-89e60d66eb38@columbia.edu> References: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> In-Reply-To: <20260923-blkdev-fixes-v5-0-89e60d66eb38@columbia.edu> To: Jens Axboe , Christoph Hellwig , Johannes Thumshirn , Luis Chamberlain , Hannes Reinecke , "Matthew Wilcox (Oracle)" , John Garry , Christian Brauner , "Darrick J. Wong" , Keith Busch , "Martin K. Petersen" Cc: Shin'ichiro Kawasaki , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790207813; l=1396; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=YMDQDXgHvisSOsY3WQrY2kVt6FOq3O9Ypoh2P+vxzKE=; b=sPILe/kyUbp0UCL4bz6D402nDcKVbwLmg2pPSjHxEY9K3xV0BuZybj9/lGnB5Pvf23U4M1YB2 0anpPrFDTkYCwMc6vi4Kax3gcCsgrwudHvLW7rNxmggYFs8LnnxxPGg X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX/JLl5VSlkuck jwzSjb3Yk1X45+Ig+JITPo7VYzNn/aufEfk3Gl0Fl4BIFClOcl9EHBrXELTO5lah+j3W+hkwNmS ZaQNnIf7XwdPMD6Y48RbAfi+ME+aPgF6ppnY2BPsYObZ7wfsBgi5 X-Proofpoint-ORIG-GUID: jdPXFrOto_0350oZJ6M_0RSd19aYqB2j X-Authority-Analysis: v=2.4 cv=cPp1IVeN c=1 sm=1 tr=0 ts=6ab46755 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=6aZ3Ysb2zzbY2sELL/OBJw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=G--0XuH5328wxK7v7Suf:22 a=VwQbUJbxAAAA:8 a=IE87Obj3e0A1gCLlgTsA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIzMDEwMCBTYWx0ZWRfX9czfNIXx1T+i /ifRg5KEso68X+JtqY829O/9wDxL5RX5AazWfm4/kioA0EjkMwuaBZqB8aRVjJmyqh229FRFNTv 5oZ9YqPv4d1t0eG9aMts/oW1l9uv9V9d37tnW23Lhy5+Gd/GNbQdBuMgbOIysb/o1Nx8KsP6XRj 4ehE+CeCyKibTJismDgsiLromTo5M2MHCr5bRnSkq2VbWmVwM6Lu6tSp2UArjGtYTB/TdeXBynk dvHACAbJYG9QEzy0Y18BfYe+JqQqeGJ0HY6hDkrC/4KnQmHFnHcGI4xCO5p3rcSQJSa5dw0FioD iA3nsc5rjQ2pzZGeY3Kpdo4nRkXwq6Rn/3T4fA4E1PewxXR5j7MrBJ+WBJe+WlW6WlQqFjlQpr3 Z13G17v1NbRyUxzvjMyXO3Hy1vL2ljwpPQqDl20GqZoX7lYLt2e0Lh6Ubkow+2ZNCs+PzL0aWqV rWZ6xM34m3L2dzyjXcA== X-Proofpoint-GUID: jdPXFrOto_0350oZJ6M_0RSd19aYqB2j X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11914 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 impostorscore=10 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=10 clxscore=1015 lowpriorityscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609230100 Since commit 2729a60bbfb9 ("block: don't silently ignore metadata for sync read/write"), blkdev_direct_IO() sends every IOCB_HAS_METADATA request to __blkdev_direct_IO(). Remove the now unreachable metadata mapping in __blkdev_direct_IO_async() and the unmap in its completion handler. No functional change. Assisted-by: Claude:claude-fable-5 Reviewed-by: Christoph Hellwig Reviewed-by: Hannes Reinecke Signed-off-by: Tal Zussman --- block/fops.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/block/fops.c b/block/fops.c index 59af4e808204..b13e8f83ff82 100644 --- a/block/fops.c +++ b/block/fops.c @@ -306,9 +306,6 @@ static void blkdev_bio_end_io_async(struct bio *bio) ret =3D blk_status_to_errno(bio->bi_status); } =20 - if (bio_integrity(bio)) - bio_integrity_unmap_user(bio); - iocb->ki_complete(iocb, ret); =20 if (dio->flags & DIO_SHOULD_DIRTY) { @@ -370,13 +367,6 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *= iocb, task_io_account_write(bio->bi_iter.bi_size); } =20 - if (iocb->ki_flags & IOCB_HAS_METADATA) { - ret =3D bio_integrity_map_iter(bio, iocb->private); - WRITE_ONCE(iocb->private, NULL); - if (unlikely(ret)) - goto out_bio_put; - } - if (iocb->ki_flags & IOCB_HIPRI) { bio->bi_opf |=3D REQ_POLLED; submit_bio(bio); --=20 2.39.5