From nobody Thu Sep 24 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 CEB0439E6C9 for ; Tue, 22 Sep 2026 02:54:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045663; cv=none; b=Yy18yRbC1frmguUPGDdHTT7bzjpCtZNiRK42LT1BEXKAaClwvHmsww40mvezzSJ7h1iPxlDvp7saJcP0mJtWgcSIvpcrTi0Hza8abjywJL/7cqswh2uQBVRv75Tzo0894nIZvOuvAcb9ECuHrEgqZ0QcWCOoaFR1uzhUVy9rBt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045663; c=relaxed/simple; bh=c22FXI/yBAiFiP+IXJLY78+gOs/orKSY6ViRpYhhCRU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OoDk0PxpWse8zsxYIDfy4qF65fwcfiMKRG2YEWJaEwfk9QYBbxXgv0eiu4NPXfMqX9qrSyqzITpQ9v5agQvZ49UR+63uvFtJkGCQ7B5t+YAnXhUnxX/7+V8Va1L5ltr64yN08lY1LlZGZjzAkttpQ1skTDx9ILQFCXKcdLLElNY= 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=ALm5Erja; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=1uPSm7St; arc=none smtp.client-ip=148.163.139.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="ALm5Erja"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="1uPSm7St" Received: from pps.filterd (m0499198.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2WxV51444163 for ; Mon, 21 Sep 2026 22:54:13 -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=GFCH X+CoYPEwVk2r0S6WYakXL0Z4yMswhTz3nIDnaZw=; b=ALm5ErjaR7B0g25ne9Cd TJH4de4s9Mpn6ImW+vl4AkjIz6Ij2PecbQqdNQP/+h+PwYQrSzyuxqhdruV6zKWv 1IK1gqeh8MGor6+ldLOx9p3TzJxgS1cGAH8Qc0XXpaj7VsIocfCY6WT1iscKjAYO tkzYcEMfsyrMa08YDTH3OfqyC1nioks6atP9SrVwF8yf7z54MJC92AjeVYvUdfXt Wy5SzdYf3DJLCEsafhJRKdhcVdiFmn/TuFDTv/MbmgQg58yCcEFNl/6VQKqishKN awQKlFijrsjSVH3/DKOacNRfDARmFPlfv+Zw8/vpakfq8+O0eF7OCnEmO6B5ChTv 6A== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4gudres2t1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:13 -0400 (EDT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-532abbd5a51so63132261cf.2 for ; Mon, 21 Sep 2026 19:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045653; x=1790650453; 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=GFCHX+CoYPEwVk2r0S6WYakXL0Z4yMswhTz3nIDnaZw=; b=1uPSm7StHJeXbA4Zl4+3+b/+vKFMBsYisFhQ4EUjuThyugQsHnCRSNCxsBpvzccldr 8S2Si3prGFsS7907oLOII9oDP7LMqDBlAeiMdQkxKMbxPZl3dCwNUGw2YsMNaOTUkWpr tipJDtvCDntBv5MBxlmIQlIfWsBGzgbX5lbfDhEOkpOMGscVdlSCk2mRpXNY1LaAiQf4 Jhzi0mjeZ0f8C7t3svaLj3TsyCwqZd3a9SWL1n36Cm/B/Uz+ACjgv/p+7dY9WSx4G9Hk v0gzDZE8Sik5dHrBqOO+msO9r7YBTIqVHeZ4Dk54NyKJnXVFiaKbL8CQ2VKWNqd6asQf YsnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045653; x=1790650453; 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=GFCHX+CoYPEwVk2r0S6WYakXL0Z4yMswhTz3nIDnaZw=; b=Enj5UmbrhdGCx4BB69oB07vDN2nPoH1I5oX96vwb7SqSxF2BOUGAqbHgZLxmWxpn1l 1L9ucj7PjmmhFHcZwFX/hIRTblKJCcbEjZaOC3Ol88zH8ZcNcO/YPRqZn33rHGrVBCNW 7MOnwWU8zz7RHm2h+Lh/7Nu/NtEpOIn7nb7xrSwuEjiMWff1rmL7U6MJhtLfpVv9ZZbP 2EUODj0icweadc2xKozeYIYSfXY0E5qRH0JZjDRYTlXzqrT2F8B3CYaA3EH6SXxnbFVv GSwyN3MjLwTLrgkpCcgQuZKEjiyzg5KOcF/8in7j/0ZtNQESxiZCZY0Kyu8kknYCoPmv huAg== X-Forwarded-Encrypted: i=1; AKwUvBzNFiZUQWgqYQpkA0tph88kljASYC/BYYULKAZ/ifIO/kQ9EzhtMXJ3PGnPZtZElJNyQBMIC6aLyvEyjaA=@vger.kernel.org X-Gm-Message-State: AFuF++kASbR6Oj0xhau0vx7NI2hNIVVi7i06Q9P4XXYaaMivO3CPiSF1 IbMPNajhAN3WHbtW3iq7TaFUvmHW9Y01BPjfG2LkchwaA1Js6FrlcBJpOCLkfY/xu3hI7PAcSOm dG4ucef4FQe5F8HCyux9hsw26wewz56zPT/NK2+/in7mfim61E8gVY0RLIFPF9Q== X-Gm-Gg: AYBFou0ezSYUg9nLOMS4RMs3oAHzUdUx6dXPipF2lUIuM/rt1aJE2xI+c2VI2Y6+40w hEV3iGD5ZO7lEbfaqvGPYskwWSGvmWVPBvxt6tZXUnRoZm7RqFatsyycAued7RjnQDJQrdlXY0i mib0jZT6bgdWTH6a3mo+z1yOtVie5PqhuXe+2F6tHxrMZbTupq7lHoVteHZIoAgbFcs62Qd2LMD juu8mq2F5TSAcdQ6SlMzKwOgvvJvRJfQ1ehFiTh0of4tDcYUlgvpdmV0CswKlS5Tl8rnEjgQFCf rLLvvtwRDxlo4OJtIsjARGzZxR6zrYY0qVxPvDCpHtLZuRzoPT1EO/z+WK/J4jFhFkQjtQ5A5NK YskmgHmALgAyf3rhPNANIZNxIeQ5nbDZ5GixCKBEFdNRa X-Received: by 2002:a05:622a:4a8b:b0:532:9adc:63a0 with SMTP id d75a77b69052e-532d8e70eb5mr36236671cf.68.1790045652941; Mon, 21 Sep 2026 19:54:12 -0700 (PDT) X-Received: by 2002:a05:622a:4a8b:b0:532:9adc:63a0 with SMTP id d75a77b69052e-532d8e70eb5mr36236551cf.68.1790045652486; Mon, 21 Sep 2026 19:54:12 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:12 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:53:58 -0400 Subject: [PATCH v4 1/8] 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: <20260921-blkdev-fixes-v4-1-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=2128; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=c22FXI/yBAiFiP+IXJLY78+gOs/orKSY6ViRpYhhCRU=; b=E0jg/mA+TgCvunpLEHsylFuItt8N7gX1yjeXv6y5xZN0zRIn5xZkffjGjTyRGZjerXFz8MxAI f9bAwEccsSeDa6qVnE040yvX+TE7xOTXD62PK5IbDIhlmaGwDs6u4kw X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX6LfTkAwpScpW uUC2afI2e11daIcTzWKweUZvIeR3cC6ji+zXPO/rUK2FvBOVMbWDfxu+Fv1Yh2CxKuSMFor0Do8 6Uh5K2YTdyZkr50uXNziWBjjV+pXYz9fwiRjAXr0T/woIUieOgXRhM42uX/4Cbz/+nKvv6vrmzG iCiEbCFkvhPMvclls0sRCyj0ljAYT4mdWu4L1R09tOz4xWSG/i1c68Ld3twRqLyBz2PztMofy91 ioDRJ7h31SS6gLEC3VeZghnQNt5k0sialp2vnuqnYWT0oE+mlndQTkzcOGeYQJPUcyUek0NZzPj M/F8eSVy38fywLO1gSH926kUP2c8WztSAyslZcUHEIp0kpCOu2egm9Vd1xUnF/CZFwh+/giLR0N aXlLMKsTH0j2xymhGS3wSQor2SsJr0rxLSB1VqYUOhzsEzd2gs2++Gs0Qkvw9psWzgZv+4vBOWv VYNL6VJnf1LAh8r23pg== X-Authority-Analysis: v=2.4 cv=be3+w+PB c=1 sm=1 tr=0 ts=6ab1edd5 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=BpGzv1V74M3SfeTrGa8v:22 a=NEAV23lmAAAA:8 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=lHyHCDWJ2e6pF_oXpYUA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX27jtJrnHSy7H TEDPl2DbeDOfTe8I9kRTDSBDzxs7boLlPVoB2zQpdkDFr77mjtFuh4rrBfSGtebLpSLlIkq3DVe f1tOUsBLjK0iseolLYZDNpaOPbLetRIcBb56PKNPs5P0ppr0y90h X-Proofpoint-ORIG-GUID: -fkmSMboPTpb_p3CZlP04UYUgO-WaGCQ X-Proofpoint-GUID: -fkmSMboPTpb_p3CZlP04UYUgO-WaGCQ X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=10 adultscore=0 phishscore=0 lowpriorityscore=10 malwarescore=0 clxscore=1015 bulkscore=10 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 2ce7c6c4714e..c57784773fe1 100644 --- a/block/fops.c +++ b/block/fops.c @@ -560,7 +560,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 CC0E13B4E9D for ; Tue, 22 Sep 2026 02:54:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045671; cv=none; b=az84cyv8me6EWnGDDXIJ7ucT0Gqk6WZN6VmLx/cvRNgeA3N857ubJouzNeoY+tYKFvqS7PdlUcYt9myM7nSunpbqSrFNmhXy/uF1x9cUpkMkbWi5MMV11k8KitsTJdCHBgwZ0ayhRG1IO2GvhyThs9BXdIaZrz4t4EeemXSsY84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045671; c=relaxed/simple; bh=wygfwy6WLEmcRyxRJTfZrlUVqjeOxy5tXzglSXSaVpM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KbrtJodLZ/YSlMlzxX2nRnDGhNZHFN4h/XJ52nUVIoLuaHrFx9LAh1DeNpuruTUYoRo1DNPk7VS17nLe/ibnfSqD0Ond7AMmARJw4OwTzYlRoONKRdpuLIgF8pucRZQDP7s4y1N9rHMVqGuIGI3wvK74tnrFSMzyhIurnadT24U= 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=O+QRAAop; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=fX21hCT+; arc=none smtp.client-ip=148.163.139.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="O+QRAAop"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="fX21hCT+" Received: from pps.filterd (m0167076.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2XKt2927647 for ; Mon, 21 Sep 2026 22:54:15 -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=g+ry kKqwK3PaWFm95Xep4+ofJmlr+BCp13pqFh0Yazw=; b=O+QRAAopFmkvoxIzZM0P WORu32X0XHI5gHmDaQs1ePqKbaMfpAxkVIHGYMzOgcRu9R2R01GNv11yPzCjS3nq fAwm8dogovc6oskOvCM9oHQoS99qwTOrHJbe9MDOUpMGfMa1LYDuUps+butZKR2h BEaMBbvE96ylt+RvmprW+cyXIb0JhRLRvBZaDOiYQgftqipAdfOHBi7pmxNZghph lcPWpDAsc+mhQrkkad6GLAbx3sww4wrFQI13vvEjgtu1H6aPk8MaekCz2bodEgTE 1Oozk1QC1SPDJjufELeE8CdISQUs6oBMdypJ9LtWrRYZJKvKaAZ9qtZrXPWnnvPm wQ== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4gu8h5bmku-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:14 -0400 (EDT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-530e5b709b1so76552811cf.0 for ; Mon, 21 Sep 2026 19:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045654; x=1790650454; 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=g+rykKqwK3PaWFm95Xep4+ofJmlr+BCp13pqFh0Yazw=; b=fX21hCT+yy1ijAlkKTKIQ11VZ5il8b5e1YTmEpOroLHjF9gasVnZnWTt4ymH0zZZGh cBRE1k8sB8Fd5psdyeZXJdaofKf19hRAIFcC16wD8Jk+dW+/s4k8OLMdon5QsbAoG/En rUxDVd6P0rkWIWejg23rLlrNGkLRBnJDEwEGabZLqkkKOA/zLO48nzUMwVo0WYWu4Fpp 0ypLgN+SEuHuirBe0op4VXMITPwosHfFPoQxjy8bDRa04YdMgMt84nzwL1jDDJEGjfev Yfx5kp6pKZK0bzLMVk72jAPC96pPrAgZEnCc4yKtNNfLBLJS6S51fi4L3peAMlmweYQL /AqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045654; x=1790650454; 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=g+rykKqwK3PaWFm95Xep4+ofJmlr+BCp13pqFh0Yazw=; b=RxA2ZNnEnV7t4EUkoI+R0L4mxdk2LSdSJhn+99MQ2bWCnFajzmuqah6dZEyw7Z779G dHF4RfCdsZrxnFczpUqnpyHCU21ewF5YrfHYZMuRAEWK0t2Z29d1zdKDZxj3FxMAD9w2 gyOahWIuK5i3ZBIcVdAxLnLMZRiDQBIej2YITqtZe4pfUMaHZ3W3/fLeKw2DlC5r8rNu pZzy7PwjzJeez60stYhIiSjNCWq/vx38+rdt7m0iNqUkAwXqCQueIhsydpbv3D9UCZJR OPJvtV+WPNowZxjf5txQ/pJYiNqKE3SEI2VfjaBGIKEFAwObco98QFFgURpFNd7x48XQ TYBQ== X-Forwarded-Encrypted: i=1; AKwUvByrTwjm6yrEFRZEDYntXSloZGDZtURpGChSgxUCoV9JPBVE0qjqGahSPQJ/5mHnQ3o9Ve7yViQnhDmticg=@vger.kernel.org X-Gm-Message-State: AFuF++n9A0qsl30Ieii6mEzRsOUKEMwa4cAylNiahMjnfpwt/mwRBWrJ 22ThMV7hd6vB/A+4kHwKsjfeQ+amYrlC91Iy8TKrV05EDmTn8piCUMwp+sfMbPEwv4MaKtHCXY2 ch817EeqcxWC56PDdeamZFpp3ldJJTE7vBwMDdtAtOvn1E93Wjy2cpuWTO/KU+w== X-Gm-Gg: AYBFou1un9MsC0wvbzr55DEmN8ATP6xKTM4xsdSaZkGn0SY5amQHJWDG/cw5nHB8ioX c7jHvu4EbA6rkY4argt7kpjQcS4xyChtp34JAY+DkkpR3L5gIHGN3pXWyctyj/dcgCYpfkhcqSg X3zCnH6wQyNqQeyyOSEc0y60rPsCOJYaNTCj0263W+21gsHY+IUE+V/gL6Cu+PNSTAn1F3/gr75 HUcrr0ryGRiMR3FxR3+FGO55paYuhCeHpOyGytp95AQcEVQc8Z7Bu6X/+0Uv+56M6ssHzRIycyd unwbA7d5d/3KOd3YsAsLuXo5A/5ktSorCwIOCxIKX6fsNBXGqR4Smsgu8rt+J8xYtapmQwFREL5 RjuRnb5AIUN4i4245I/kmt3AS8H8GTqkIYPsiOBUe9W4i X-Received: by 2002:ac8:5883:0:b0:530:fb97:4986 with SMTP id d75a77b69052e-532d8e6e41dmr35889721cf.51.1790045654010; Mon, 21 Sep 2026 19:54:14 -0700 (PDT) X-Received: by 2002:ac8:5883:0:b0:530:fb97:4986 with SMTP id d75a77b69052e-532d8e6e41dmr35889531cf.51.1790045653533; Mon, 21 Sep 2026 19:54:13 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:13 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:53:59 -0400 Subject: [PATCH v4 2/8] 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: <20260921-blkdev-fixes-v4-2-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=4766; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=wygfwy6WLEmcRyxRJTfZrlUVqjeOxy5tXzglSXSaVpM=; b=sPYgGOCsYx+rYKOC0hGHBpvNO8eZLUjiJzGZjWcsKv81n8diiIzIxvYlKjsVW3sH+6PLcdUl0 +x98Eg8Km/BAVLRPp7uJO1KTGQ6lqcwCo9X7hWR4yj2d/ae8lIK9v2l X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-ORIG-GUID: Ub8MaxH5rkAjdB3WtacS9j0j5TmnM665 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX/kLt9zhI4nIL HL03coOAYRg+ZB4QzBfL2FSJ7Pell85NaUwCLlwSYcv5jZWd+OeTJNd7mS2QksW++I7emt7TD9j zUCgOq79nUuHo+wkweQjUox8tAAV6upYk0wBEmb78s/U5yg9ohlho1FcSNqAoJUMshe3sbVUynk Y7Y078h7NkYVXmVY+zhHhWYsCw7V4Dp1/XexSVmp+tN6Vk3NgjihPDXG4Z6kGB2OZpImm86+Boj AEwc1TdoCU4QXMK97yBnfDMjzyQaYaK1yMXeIiGg9tR9nmJyWr+VwpxHbQEY0myWaGqaDWldtEB hlFPGvoVDcr/BI303F/anwk/joXAaUugntBa4FLs6uyZvTy7yBNZbmcFLsQAO+G5o7SwH8laZRP BBykDApHqrT7ZzKU08LN08ImYnmMDcrsIBo5dY+e5yQT16oPlJovkuVkGVbiGarYtER/6H5OoM4 dhSc8kIuUL/gZHpl6kA== X-Proofpoint-GUID: Ub8MaxH5rkAjdB3WtacS9j0j5TmnM665 X-Authority-Analysis: v=2.4 cv=DZOCOftW c=1 sm=1 tr=0 ts=6ab1edd6 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=Qm0qsxP7aFY2tkT6R2MF:22 a=NEAV23lmAAAA:8 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=HaKTZzbUtGO3MgJEFeMA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 a=GvGzcOZaWPEFPQC_NcjD:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX417xWR5mH8RT K25mqdKcTcHEn5rkslcCFCuX/fw5yK1oUNPvNo+RiwqRJu25enpLhYTASgoVrWvnf8wYqOsqHMg h8qJ9GameoPySV93W2WaQBCzCC1czkvPvGBjl+Ei9OALdQS6v1mG X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 clxscore=1015 suspectscore=0 lowpriorityscore=10 bulkscore=10 priorityscore=1501 impostorscore=10 spamscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 c57784773fe1..d5f569333f46 100644 --- a/block/fops.c +++ b/block/fops.c @@ -765,9 +765,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 CBE663B3BF3 for ; Tue, 22 Sep 2026 02:54:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045665; cv=none; b=G+veIltQNFfI4r9xEc5TI+DkLAOyVCWqU/WR6b8mSPT1qB90uJwgAqYFME4hwuoq+cglyTmJALTEdicBL97oeYuCzaWkFRs6u9PY+DeTlWTN0F8R0otHweF2ZvT8OhtxsD62YvRiKtCZWAPFUl63qslAo2CrpbWcdRk0ok3IF/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045665; c=relaxed/simple; bh=nq9znRgRZjLWqaFLfeT8on7MP5eoL92wgy0gjCnJo20=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T//aX8KNhZePcMOvAQXIssWPrN4QmeD3l3nSqjVNJyMwYuYTvHTnlwbijdq9ydlSNBeHIanCAccv3kh5zGLrM6dIA7M9qqcfUJLshml0koBq05axixMAcPYXqDetwMT7dQV7fYNxHk5TXyBAVPr44fQB+CGYot2gCbx2qwe64Zg= 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=K2hYc3zK; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=2V5FIkno; arc=none smtp.client-ip=148.163.139.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="K2hYc3zK"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="2V5FIkno" Received: from pps.filterd (m0167074.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2a01J915738 for ; Mon, 21 Sep 2026 22:54:15 -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=KP+P vJoAhQCgzlvOXJ2L9SVLgK+v/z6TgoIKhrOsOzA=; b=K2hYc3zKyKwXGOoR938n PnwCqEdOcGMi42fT3DLSN8CKfiievseaUARRPtDCxwhk2lQBPqMuTxt0U1LoxOBS XiyRKpPwxtOK7KSVeCdr1T8PLAQjzRO2rDnVzwrkvRW/C1aAnuMbIG5PRxVmyUcn hb49yWeYT3NCRzG+kPuwBkH1M/wSTavru9JnP+BQpPYlvWASL328YeQbMioOQ5df HNfOPhHhMP6NIhPJeGXf8L0prsDZT/oMFIgZhxAeQeto9oBsuFllT7ILaSTGSAVH k+rL0IjvOZL90bBVfCBaFqMoDufEORqwk9tOLcKL0fdhculYMSkX+tqj9qujNM6f aA== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4gu7rac9pa-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:15 -0400 (EDT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-530d86d40acso50978311cf.3 for ; Mon, 21 Sep 2026 19:54:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045655; x=1790650455; 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=KP+PvJoAhQCgzlvOXJ2L9SVLgK+v/z6TgoIKhrOsOzA=; b=2V5FIkno6J15vC2P1ADpKluMlca9xx9p0KKi4DRxpmxkOmP5+Aj8Cfa7s+CkiQe3mc o/urTER/D80t+1+QwH56m0V9YIUK5ZHO1ivjaTHQMbDoe/KLohnzF2k3qC8hKkWXGTEM 1hKMvRRjSvxE2lpchr1bwZcyt4jM8zL0jnoeIg3EdogFjwYBzSI0Mh/r+s8/7TYU9ZQb hbwfYSkedpGRWhMZp+mNRJVfawaIBCVoSa8kVMjiSvN51anX7pBESu5qckEJQEg3UK0k zkw94X03x2LRGICS0TwaQG1VjM450hcjnOclBY7nEyZFiFtN4jHUtPrHxbA1ST0XEUrf xH3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045655; x=1790650455; 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=KP+PvJoAhQCgzlvOXJ2L9SVLgK+v/z6TgoIKhrOsOzA=; b=hE+VBMwiD+ODrj/mCmisUBCrhWdUkiH59iMPp4Ic5dxdX06y1lTWP5jHzL5T4Qr3Ai Qq1D149RmjacbjnEhaPtdIGc19yPgnVHG/E71X3r7saNY0vqMnbIQ4QUPxD+9nWs3DhM lTnfMCfjDPx30gzB97PheoSLcSuFmml+tu3B6JlO0OTNvothO4gi58G4YoLrcSZJA2nk jneEYU4o7GPjTUTSWpEWih4STbIfjapbF0jrxhbk99CJuJWtcO5ON8XMEUBvJePI4BpP j225DNPzeB21mMSJPQo5q3xgxrmMKSAi8OJooIR6vMSHkl5RDbR8KBG09ANAqpHqUw72 xM8g== X-Forwarded-Encrypted: i=1; AKwUvBwlT0SylAETnRnbDVVONHNMiRHIc8GoWFNZ2dPmuBNDToVlZFdMyHFr865EBgQsSR/2F6KI852XZzTTW/Q=@vger.kernel.org X-Gm-Message-State: AFuF++lo7DYBwdjsMBp7aklNNb3b2dzEgHg6dMqKCOOY7lK1Gp1iSVQr 2CZTtcEZbLx0TyvUVIAEBTmFiv9kUTNPR3Ju/8MAYf/CLpjYF1UbO2JLrawp/r1fVKh+/66TSIL I8aAKBDDCXcquMjpfx9W+cRaMqXeJbERM17fxKoG8N8Vw/d9yc00SdU0nRK/ASw== X-Gm-Gg: AYBFou1nn7MbpdHbATijXs75azXoVKBwgHA749Fby0m4HqgeeOVNGbuMz5Onu/VBk8T IYS1geQITj7GehJWIK/pyxB0xWssBz1jrJqObPoFfF/VNiNRstv/eqGDb8Pjz7aeL/4q2PWWtp+ dxDNF8/SPqL9PaIZ3foavuefbk29TDANs4je6nDh/G8QAYgbESRdnf/wDPw1bBw2ALwxIuUSgDS rTEvWNUNpEkoMYzklLzN5XaNA+/ZkKVU2INGXKgDaZ170p312yXL+h5lx4TugywrRhEPf3+P8kW 6IOvNw1uy7AwCBWm3LcT1oSQxciU9kHdC93tLhpaCQtNIeGxoR4xF3RlCp7ne4A9pmg/5b58AEW EjC+yhYiCA0H2ka8zme2Z68Cr/f5WVsrjnm1KveGSYhjq X-Received: by 2002:a05:622a:15d3:b0:530:318f:3086 with SMTP id d75a77b69052e-532d8d5c6bdmr36943681cf.17.1790045654943; Mon, 21 Sep 2026 19:54:14 -0700 (PDT) X-Received: by 2002:a05:622a:15d3:b0:530:318f:3086 with SMTP id d75a77b69052e-532d8d5c6bdmr36943471cf.17.1790045654505; Mon, 21 Sep 2026 19:54:14 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:14 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:00 -0400 Subject: [PATCH v4 3/8] 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: <20260921-blkdev-fixes-v4-3-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=2886; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=nq9znRgRZjLWqaFLfeT8on7MP5eoL92wgy0gjCnJo20=; b=7dVFcPnIbhn6HEGkPFkd4WuxV2yUl4MopmXtP53F+9o2WU0cm5H/Y85ki2rRu01xj+T0gEz7C Y+WQVZTvkTgDOP4lHzo7gi+6WQrpA2y6M/M3+1E8BZJ6vRHT1X3hjph X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Authority-Analysis: v=2.4 cv=fIWsTpae c=1 sm=1 tr=0 ts=6ab1edd7 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=azVShVRs0zEubeQ0wG0L:22 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=kXXCQoMOyz17bj_MZH4A:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-GUID: BAHCNzG9e77uJEnZqsljNU31GOGI-9yR X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX2ug+2TEWaFkJ v+jARpM7ZH9g8+IcmIHS6jK8ThMfnludXIu8L80zmYeZ/mLJG1t9KfeutDUMnm3y69eBMeFuEyX MYyQsAi2ihR4UYPfx18yNftbpFHOGA0N/dEb3r2+HSHYwsySQqVj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfXwgaPYjwv1Mcm 3g9ou1v64Ksn5zgcIiLbEi6OjMq0J6g7XLIbQC8dPD8zzUxlKQGuCeeTfp5djHQdlwSIAzEmEUr G+v2CFNiEY7hG0RxiOsFWbC8GN20D6CxyQeYOleqZK9mrPug9Oy7PKh/ptQRjDTNg6SqA12lfTe jQGeHVLtjdCt7/8utaapd0XQzKG1y/Hlo0qgWZGAOxLfpDz4tEEK191amyJyM2JqkuoJTISAqjA Gdolyzd5vGkpPqUdhsG/pXztVPeen+piOKIzmcXeACpwE1y2+2Y/y5PXX2IlCyfykSkDP5mA7Ah /P08V28LQB6VeVEvV4h8+pbBmGTk2eAOTt7nAXRGL94WPtOMHzB/6FqgyKTC55Lg+ZhM5Uwqa8L 5OxV5Y+9wPqZl0U41X2/oCOt67/yiF6GxLJ8+gPFU/er03N7q3CmZ2UUZbdn/4NQeAGxdMbh0R0 GKMlcOSL4Bapml8Em5g== X-Proofpoint-ORIG-GUID: BAHCNzG9e77uJEnZqsljNU31GOGI-9yR X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 suspectscore=0 priorityscore=1501 spamscore=0 adultscore=0 malwarescore=0 bulkscore=10 impostorscore=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-2609220037 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 d5f569333f46..a51814821100 100644 --- a/block/fops.c +++ b/block/fops.c @@ -855,6 +855,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) @@ -956,7 +972,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 D32CF3B71CF for ; Tue, 22 Sep 2026 02:54:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045673; cv=none; b=qHaZWdJv8wOOPjuHksWVCD8H8vbinCYeCzKLorGuVQTlPrl/Xj++4iRg7fRqOxOqYkm2BL7eO32LD/sG2CuAoWf/ZhtmLGANa9y5SC/dDImY36x9TWCcZabinZ+UDEqIaAi6bTKmIcBYO6m7sAqoBQb8B670aniGkpzqZrPlPAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045673; c=relaxed/simple; bh=omRobIYeubqYt1ShRwO+xJfwqyahvimqDH0UuCrRjvM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XiUYTo7Y49RFQcmcVt8apLdhy02gZW0hZuYgwetd39BFMRoANR4bfq2rvsLN8br2sIee3v42+6X7uc48ApPT5fM/mAJVlpPOKPgiKctO0/uLc541GPhbh+zHA9RxDRIhQc8IBNHSVdrvc/bH3JUsdGgENzWNLvAJEHa52A0NYbU= 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=M5ppccQw; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=tjZJ8eIk; arc=none smtp.client-ip=148.163.139.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="M5ppccQw"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="tjZJ8eIk" Received: from pps.filterd (m0167076.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2XJS1927644 for ; Mon, 21 Sep 2026 22:54:17 -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=6i89 u0mptbr+Jh3PRt95XNfEgizrGGtLlz3J/in9MkY=; b=M5ppccQwzXRPdg+A6MrJ 2W07ZiSmF+OaQvMQb7Ib09TkPNR0F5F2/zctGnpqTZZvonMpJHzsZpk4wCceBiRb DFB4bljXctP6LWA2rCLpYXTY5FiXV9XWDJ412589AHPeiA2xrd3n2V/wuz8/WgKD bknjvCEOwE8ze+x1SMNKl8F8JYY59H+aw1P4vO1HRLLJjipUWtWcNtbsEASv20bv xFmiSccNmmYaiaCXAgiNuUktE9CeVcy6SXQfUfQqq1be9z2JmiFHIAzTzo2IiN7k kQWTopsFiGnI5iFeqBcu4fHiUjwPfXTOH3xHgkq2WfH6xy0dTZJ6fX1izPUjdhQK VA== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4gu8h5bmm2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:16 -0400 (EDT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-5329e965ba3so46657321cf.0 for ; Mon, 21 Sep 2026 19:54:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045656; x=1790650456; 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=6i89u0mptbr+Jh3PRt95XNfEgizrGGtLlz3J/in9MkY=; b=tjZJ8eIk+rESZb+/Ih2cyfJ/35TOIkbNjJWWOsH0qqvB/QwY3PsEtR4LGtHWzou7cP CuJX2hTslfsoeJEMrlL9qTKZnMg3qaW8/UUFt00ZViZ5zZpZgdFmzortiGPq94rgZHLN i2Gte/X9veOi1no3s6QD97XIb40OkDXKWNL5SFFv3W0y8pQ+iyqXFiAvFHvqVaX7TwXj cyjL4YDAX4zMUNZr6LENYZDAY87Ony2eMK6FTcAXSZWcvrSA/COW2h97dItVEpSd5cRT mvgw3cyLi+myA8FVHsQlM78hi3mu/RQQxDR4yJESfUeHhWmwLF7systyXy+e4s5tZJfI e4Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045656; x=1790650456; 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=6i89u0mptbr+Jh3PRt95XNfEgizrGGtLlz3J/in9MkY=; b=LI6D947Ua0A5sbq/ksNfVv7Ia3aDQViXt0EQtm9DgQC/mzkVpTSMA9IRCRDFRU3Ye1 FSKlqLrAAfHzX+knRGVvJSJ07lLW4Ls5IQnRH2iCQ5ccLjAsjtDQGRB2krPeN0xtoBlx hHSS4xkUNY5owsYDd1cIPI9U02kUw2CJRXPvfOrqnI6gKRO5JlLG9/Y7kuyoH3LoAW8Q 2EUF24Y4B1PkV2EKsmMltk6wvD4yk671E8j3IJIlaisYrDeNUxmnP59cIHPvTr1NPM6S jCuSfOJG0B1pwC++cDfTdycaBoRLC2a1ZVueB8YuV6Enepk1t0DUndV3TLc0TP7IcUWW 1coA== X-Forwarded-Encrypted: i=1; AKwUvBxqUrAx133Zo6MNLtdeEVcWsYsVbMOZSCAv4qQPlIXBPhvpbc5rVddAiNy4l1D1jsrd6xb/LsF7FBW4Pxg=@vger.kernel.org X-Gm-Message-State: AFuF++levmTMvz+Rs/Yg6/yPWSittMfPMB/sIeYdNqCxR0IhBX4cA+KB J5qbSVCYgAiDqY7hOhUecS+wAhgKIexmosvAO/dlMDWHLdY9f8OaQQVjjQth9Kwqvb/qDNgjXbW hVWm6l3LvAiamecK6sNaNh8YFTaTfMT9P5Lumn1i5GF85UCza9g4d3xLt0REvQg== X-Gm-Gg: AYBFou1577u4w9gp8MO1LMPpctImsnwkoCf0C3PeiYATvK1cjmPmhHcolIBen/bg2Sp 5IQ/P7NhHEAwhwtZ4fBYdV8icnt2qYbTw+Qd4guXzxoufB4AlZutw42S9a2WX8YGeVQBWRTazon 4PPk6awXRrZpAOtkURJv35dcLvS71JPBnGnL/IJmkWOztKTDkWMAxfwLzsbRFMAkNx4rJ/r2iMi 0aqW5YYGKUl78v6jitIsYu7nqvHIFucfdmdGMJ3nZ738IvJKS9Wwv7nHeCctE2fqVfcMdltJ8X8 U3cQXHXF6sBlQAkS1NmeoKoZFdRAyOu0GZNKPRH1/PA/c2Gprgs4DIpXhLc8VK1pqHJCiiWiOMK z/TL4NCd3i6LgZTD27j5MgMlliEiTmSOR0idq82bosEjF X-Received: by 2002:a05:622a:c4:b0:530:e1b1:eae7 with SMTP id d75a77b69052e-532d8e42b59mr41695591cf.47.1790045656219; Mon, 21 Sep 2026 19:54:16 -0700 (PDT) X-Received: by 2002:a05:622a:c4:b0:530:e1b1:eae7 with SMTP id d75a77b69052e-532d8e42b59mr41695171cf.47.1790045655381; Mon, 21 Sep 2026 19:54:15 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:14 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:01 -0400 Subject: [PATCH v4 4/8] 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: <20260921-blkdev-fixes-v4-4-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=1869; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=omRobIYeubqYt1ShRwO+xJfwqyahvimqDH0UuCrRjvM=; b=qT/lrNi5zaYhd+JzSKZI4UKN2sLJXIRxjskBolny/l4uz282lj4csoNWpPL+3fzZxW5WMp26w 3FhmTJTqeDiCYNpmkWWzFqRQWANMWALonEgRf/JAAZKtqJmq1ShLQl5 X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-ORIG-GUID: jUPuTfN9DuwUBcP0vpq-4QSWLDzaK_R_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX4/eSR8oANZMC +A/J5LXMjh/qOZOCbX7zpSKp4moVj6s6BXezohnESQyjD+3vI5Sa1Yoo4lvg3pB8aH/509xrc6Q emydpA9cCyir6Em8f5BAvbxS2G8cg8jtAdmGPjY+1avvEHu2zRUsiLY1ldYO3oI60t0JiXSdkd8 BuppO66XpoOoRvRAbZNMBdCTOHg6zasPRRNXhiOayw96D9b8OL25cZT8qPIpw9i3OGRKBVifxjo BRU4QALhWgFxwBdQ3pRDdhf9ZWCQQIXxPKmoVno1eWHr3mPMVMOsjlr5Ke4xd88WAj+UuZRq+Lo AhZFrCOT32w7STm1CwTrCjOfvcQITiKAC1rTYr1hjp4P4bECPf2i90zXiapSK3knlBz4og7lwMC aqlA+GHc9TZl9AamOXFxpiG102qzyxe1kptpcxCrxzs8HHYGscuEsoQemyYsOzc/IlAB+lD5P8e wJDhmTyE35AId74bfKQ== X-Proofpoint-GUID: jUPuTfN9DuwUBcP0vpq-4QSWLDzaK_R_ X-Authority-Analysis: v=2.4 cv=DZOCOftW c=1 sm=1 tr=0 ts=6ab1edd8 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=Qm0qsxP7aFY2tkT6R2MF:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=s8mzj7eOnaliLhoSWqYA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX+0g2QEW/oC6o 55qGrRC6L3vSAnJdB8aqfzdkJ3XM5p/F5OMzlJ2Uy0jemfnnNXHDecALszag8hb83WTs0JkIz9o GKpjsqF+7XE2SVN3dOTx2+sEGwr7fjdeOhwckfc8qFa3ggIlMgd7 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 clxscore=1015 suspectscore=0 lowpriorityscore=10 bulkscore=10 priorityscore=1501 impostorscore=10 spamscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 a51814821100..a3a709697b40 100644 --- a/block/fops.c +++ b/block/fops.c @@ -845,7 +845,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 D31D13B71A5 for ; Tue, 22 Sep 2026 02:54:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045670; cv=none; b=ljPjUkgm0LT7Ih5SMrM9xopw5UO9YfMW+klih5EhOPIcxepPmoxVH1Zd4NMkvf9xOqEDWp7ZpmLBbM1WWYcInCsIXlUUPKgbmVGxhMf/u0p8QodD1itdM6IFMsKEwNnQ2scZUwkypf7jft6eZYJI2aX06ayKctoJ7jiTuyUR30g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045670; c=relaxed/simple; bh=hK0Uz7nHtHESSVhEzTWW91QCtYxv5e3ePGfGSFiFjUI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SFkORpTIAUBKjyLf3PRKiMEvUwBb1VREr3RaiOxKAqWZnMbZMXqp3q1XpDldyLp4fXP/kzhBcRCpcvDIfvOlN2pLLXnLCY22izUk+InPMGTCItBAXH8NpA+8/ddxIO8WRrHKhPU6qnhgbIhxSwmkJzukWA89gOrWhxdhL+uFpK0= 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=XR+cRPvr; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=q5p6L6TB; arc=none smtp.client-ip=148.163.139.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="XR+cRPvr"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="q5p6L6TB" Received: from pps.filterd (m0167073.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2X24R1013705 for ; Mon, 21 Sep 2026 22:54:17 -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=f1I8 +ew540ISvrOYz3s2O7GFW/de6MBJ+lvSs1/O5tU=; b=XR+cRPvrRFnsNbojp3cv kQsoAc+1lxFomCgj2n5cMTA51etl+LING0y6gD6v9iSRQlSk6gMN90rdHAyE7tlk +2zvO2ZGauGLe0bYpfN7GqfgBCNTWzcu81rh4oWT3f+IKIkTa3bs5JXUVCbBRBy5 OTqP3Xil+bswL7UDkdkIUBNWp5o1PDIO3LKGP4CYUl0FO4K1iGj8xrFTKswjdoti zkXDxTDonQGdMW2C7F9bUatSgarAB6/+y+pXiBHIAfWUXQ68TX5VBo589Yzl0W6O Iowu0DReBQmxuYE+Rh2elbpQGV9nsfJ2WH9LQlFjLM6nJH/hsa2AuAsAhzLIb/2A dQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4gu6vqctqn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:17 -0400 (EDT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-52fb8f67601so43239381cf.3 for ; Mon, 21 Sep 2026 19:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045657; x=1790650457; 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=f1I8+ew540ISvrOYz3s2O7GFW/de6MBJ+lvSs1/O5tU=; b=q5p6L6TBrwSGlA6BqVnk7A3/i4eqFGAFBXeCGjDD42ImI62EtXuJbFwFlSEpMvjK+A DNTphy+jeDyd9I8OX70Uaq+G6n0AatrbewogPwDYehdTYl4AzKBwNw9BsIGoH39D0SZG 58aA9JmPJgdkAGFi7zodMrJc1orp6lMxF5kFlOZLHke/x/cygE7RSia10yaS40gBrLNo YtFCaNmSZ+soiu2ykgB2gBzx/9xSFek4TqQ9Csh6bIK0QipEz75NWNE0jedMccdIDRju L/OJyqYqzyrFvbA7J6/w5gPFo9KNjQeK6doPqGvSDh8y1SnctOaxP1hEpbJFXlZXxc7R HrSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045657; x=1790650457; 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=f1I8+ew540ISvrOYz3s2O7GFW/de6MBJ+lvSs1/O5tU=; b=dY2yHz1yhZcKA7N8Y4sxMA5LczpzUQYvHfNPN0ZSzlYlhH8SUth7NErVsIyB7OkatC EIkVVoTuJC1N+akpuCMLcoYc/zmbX9/Gu+B79LYbXGSLK9Q4i9Ru26aTykzTcSj0q2eA O8WZ47p3sOHt+ygpHRogGZUYYqOg80nsbBcnHuxCUyIDlULD8v6YPzyZdpvZv1L5CwIk 3zufYsuz4vaR1Z7Pfkz09XCgXUa16NGLEI///c6cxf1AkmBfIm39jFGJbjPoMDuyXXrp JCTaxGCtJ6pswdwVg7+4Gz0Plzd3gDTIo1c/LkRJ37/AaKLFknan+RV8FoeWcKZjruwU Ab7w== X-Forwarded-Encrypted: i=1; AKwUvBx9ppSw7BzWKlWhv+7is6tmvZWbC0cM59gdqtNLSJgfNq1tmuY1BPZmw8y9nOEph/qtMGB5D7Gj9TYfYMM=@vger.kernel.org X-Gm-Message-State: AFuF++kA7Z0simoYya1DHqG2wBFI8TuQw9f7mU9PI6Mg8NA6bgW47gfn vE+ZI5LECi7amcRceI7qnA+aWXGJm9cTHnatY3kP/nNDdT7Onkoq8SMmhQKTnsL1ispRIryUp8z sC/XvzpPI8h0FbUz5kgHP+q3IpT7+qw01f8gR/tGDgXUCt5lERRO84rSXQG5Fqg== X-Gm-Gg: AYBFou3IwZz3pZJzsEkDtn9uSoMghKbAjvbpB+v4aMUKJ8uo1g3lH/171C7njnzfvr2 aqJzi1G4bik7I8fUt0gyDYTbVkjl4nVrq5FZ17tWnH1/+OEU71ukTnpTl49UyoICVVvjqxFgVt0 ZZPYVumdRMdiVJPnhvlAHDvzIoIcm33Q1axhmA45YNoLPfTdbD3zvv8l3aF8CQKfq9tf4akYydF iTSsx2MREF9levpol/6JsmgJo26J913X+Mn4ZGf6qXf2cndH4xD70+WJceIc604q2Fb583+25pH LSXGL4RhV8Vn+6r37ifr9WkNaLZ792LwOl+vM6TPc6yPQ1oT9JzysOk4+5Zj64hCpYqHtx2Hs5f 0CdaTKA1Dgf0ZQ4BP3n9gR6Vgiy8cXumgFCYMJZ1tJJ5n X-Received: by 2002:a05:622a:550c:b0:530:6f9f:d4b9 with SMTP id d75a77b69052e-532d8d37e9bmr34420491cf.20.1790045656730; Mon, 21 Sep 2026 19:54:16 -0700 (PDT) X-Received: by 2002:a05:622a:550c:b0:530:6f9f:d4b9 with SMTP id d75a77b69052e-532d8d37e9bmr34420261cf.20.1790045656256; Mon, 21 Sep 2026 19:54:16 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:15 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:02 -0400 Subject: [PATCH v4 5/8] 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: <20260921-blkdev-fixes-v4-5-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=4319; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=hK0Uz7nHtHESSVhEzTWW91QCtYxv5e3ePGfGSFiFjUI=; b=eXzHltWGxrOFw9o7LuFKPUEV9XvGOIQ8fGSN+MJP9ksj06z1WPRWWl06UJNojPd1s5rdfiEyU Hr3YcNOp6VvBbpFT43I0dkUmiqOs4Q9OQSJ7LbLb1r1SiiRAWfDWf2y X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-GUID: 6bbB4T0rnYH4IXgetsPiwXa-SIw4HIm4 X-Authority-Analysis: v=2.4 cv=BsoIUoX5 c=1 sm=1 tr=0 ts=6ab1edd9 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=jHxIr1HyPKZ_Q5_91PL3:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=DOn4q0-T8uZzdi3JsfgA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX2mwpT4Vgiot9 9XQoaO6T+UJBfNUsx7hAFSigODJRfRYuv2kRtfhOMLf3FwM5faP4JbQRpN8oIOzfyLeMiaDEkLy ntrFoUh5b1a0fyFiB8scOnd7asrWrt6b2Kfb++GDamI7w5Si3Ndl/zBj9JNb4Z+4A+Upwqqf2Jn FTx55v36A/X0VRtOAL4OJtOUVl7twCTIHcrwUthLHcYWGVbt4nhv2ah3Gp9reOUEgiWsASKqAnz COo9AUy3sOLK3aEZwpDkUwN8xF/x22S8bDJMY+wh4ZHlohEZP5l2TmbVVrDd1dNenv9wpXOZ5cd 7buTy5blO2IQsmrnwDocnVm31oQqVcLaSkyd/GsNroG3NLIpRPozmHnXd/B/dfMEW3C269qREK0 YRL5xjdSsnnCeotffFKU2r3iMWWY63b3nkL0NRVcg23j8su7VcfJB9lq96x+Ikc9sHtOG9YXc19 /csilf1/beajNxWfX1A== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX0Sp+11oNdN6k nUxbR0qkC7LXm7CWLxzrf8Ui+HWGOVKi0QRFldDS6GA5PS3i97oaw2q3+318hgXlDflXiIMaD4u UIkxqFeRXw1kyiYkabKDIPApHpU4x2chdohFB7/soomTK2ZT+nKb X-Proofpoint-ORIG-GUID: 6bbB4T0rnYH4IXgetsPiwXa-SIw4HIm4 X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=10 malwarescore=0 lowpriorityscore=10 suspectscore=0 priorityscore=1501 impostorscore=10 adultscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 Signed-off-by: Tal Zussman Reviewed-by: John Garry --- block/bio.c | 29 ++++++++++++++++++++++------- block/fops.c | 12 ++++++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/block/bio.c b/block/bio.c index f95b63c0604a..14429a5d4e68 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,48 @@ 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) { + if (size <=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) { + if (size =3D=3D -EINVAL) { bio_release_pages(bio, false); bio_clear_flag(bio, BIO_PAGE_PINNED); bio->bi_vcnt =3D 0; } 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)) { + bio_release_pages(bio, false); + bio_clear_flag(bio, BIO_PAGE_PINNED); + bio->bi_vcnt =3D 0; + return -EINVAL; + } + return 0; } =20 static struct folio *folio_alloc_greedy(gfp_t gfp, size_t *size, diff --git a/block/fops.c b/block/fops.c index a3a709697b40..90777e8a9a6c 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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 68190340400 for ; Tue, 22 Sep 2026 02:54:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045662; cv=none; b=JZn/p8TPhdebK6PU4uzzC6gALsSNWrBPrndHEtfoqddwtSGlTUegCXkSHV4OqGIo2/KuZHImIJPyqAJjtS1/IVNHN2ucw1GWgsGzWUWVbZJyg/X2vm18dqcNgLuhg/nQldBWojLw2ChsodbpPE4fKbNcl2E2Ac804YyOLDY6Ti8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045662; c=relaxed/simple; bh=Rd/lOuuBE1fe+JFuRG2/9O0X8Yb9sAGg8AsM4evfW18=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hCkayQ2BdjgiQxBQH7mzpvFCa8sstcCoopeJih5WY2AVVTi+tASrTZHXHhto3hgSUxKqdcvFkRAPN7nPtQxx8P5xKd4VaZIeWIPPOm3XmKD31wkZDSCJvZm16oxTA+yXewDzQDvmm1Ubeknbrjo8a12jr8/J5E6yJi6635Y0wo0= 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=rlReKUca; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=beJrSqq3; arc=none smtp.client-ip=148.163.139.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="rlReKUca"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="beJrSqq3" Received: from pps.filterd (m0167077.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2X0OA852509 for ; Mon, 21 Sep 2026 22:54:19 -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=o6sz vYxzTXRH/nN6ZyC8xHzMIfsKFkaFTiMpK6Zrzos=; b=rlReKUcaU6aGKSA/655I zk0AODFqSgU14BhrtVvlJJwRFerd0a1kuvy6ACpotM1KvCo8woFOl2wA7U98Mjp+ iahxTociNoNlhpYzgs6Gcn4AQZhz9ByXjqHh/cJDIroc3GvBA4faXiR2JPRdq5X+ d5z4k8aYhqxgHS5ZrAsUobKTLv/5ImSn+ReSajzrj1NRLeleTPHBh4sd1hDqjd0J OlmAFT8WL2C1Q0M5bU6LE4J1IzMvpCjbtgP7RnY1CyNctM5MunMoR9R0y37i0DK9 VQTHhxn2WLpp4xUcpEtr88JATLGjZsvnysQgwi7qoNvZCvfd/zPLc9uTB8BIWvBV PQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4guf3vrkjf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:19 -0400 (EDT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-532c2cac078so26108101cf.0 for ; Mon, 21 Sep 2026 19:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045658; x=1790650458; 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=o6szvYxzTXRH/nN6ZyC8xHzMIfsKFkaFTiMpK6Zrzos=; b=beJrSqq3XWnhhrDGtNvwSw4sWsBsjgeDHTJv3G8fqOsiIlJaqU0kNyOV9BO89N3JYS r9zg9XqBIWHDZu/rf0mGvD1K1Hcd68DEDUiIQsvYs3l8WTMqfzGaFgybIT3ckHVxEsnl KioI5C2OMi2XOdGV40wMrVMqA/2QPbGTWYGfQn9zD29b0phgKUCVTvdirpfsk427UlwP RRzXfHLbKxG5Liqj0m2vd0RPNAapIFNtTe03grU0mJUOBQG1i7HPn4A56zrlMJnN8hre U5N+2VsnyTJ6Y7Z/X5wRwPOvrtnm4McK4Hyh4nMpHBompWTq1PWjvFjyunUvjg6MpF6+ 1FWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045658; x=1790650458; 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=o6szvYxzTXRH/nN6ZyC8xHzMIfsKFkaFTiMpK6Zrzos=; b=diuEzzP7KPx+KNTZ+F1V38fiG4LuYkVJAtdMvbY/k9TZ/evxUTZ55NOVKg53UGr7CN iLjvpwdqEPKLRJ0Ml1uFNgQylS23wfAsIfVO0cEGFAxynqaROFZTwl/7zc/tumi+PcyW Qa6ts31KS4Wp3OPRjji9jy0p0HUpWi9iTZSJ+BV1mFZdWA1/UGwRL5OM2GPflmTH4HTJ 5VrDXCKZ+l5dI5RUgIGow7JtEIQiQpRjj5fRymEhtNuSl+9m/viIrTQXdQ1+NzM3VCIg jt3zISthPcJRqqyLzA/Q/ui91MFH7HJL9G0CMlLoftMkeDImuF0LEcLHyYr1WFv8ZhNl Aa1g== X-Forwarded-Encrypted: i=1; AKwUvBzJnbLg1CobdJQT0DSJtN82Dpf/bQETkPRNStDLC2+gI4HpT5CTl3U3LASpsXF9AGGh0Ls6p32AFXLbJOs=@vger.kernel.org X-Gm-Message-State: AFuF++ni47oB9vrZvEqWz/QTQpfREKvAKBaoeCDkTXFA/6PqV9KNVkM/ y12v//UCmM6OOgZp1ijVDnT1eF2GYHJ/SQM0qyVTg4gP8U2+PXXs2YPbqzPFxaT5mR/o0uUyphj vYKt4W/Xz3B/r/fwKcmmH+gmM0ckhLHhkVYOFD6r7bdCOyck1+oPik1OdWcbZrA== X-Gm-Gg: AYBFou1ulgY1h2FTIsDOACIcJRFt8yjW/OUe6e+QSoRlRgwgksDn0OAtK2OAhEZqUJa sdZaSJZIbmiZ0gqdqPsRkH5G2tzJuUJdF4taCDkb9mGOLfIYKC8twPhTkExUSc7Kcg/JRheztFk 04FXz8/YLO+AS7rLd+OeyqH8ry6OMhC6fFvBzO/FrKRPHs2+aZlx6R+QRJlFjBBCeJfgmojHHjt RGyXtctfkUP9r+PPrTyKmWSDKeQO7gZ3PjHkK1rQJz3p/lIWTFKbr0yfT1/s5oNxiQ3Y7p8FIv8 qjS0DPCHWxZ5UdehdM9SGHJONDNwh4LiIGg0aDHhgA9KXDwzt5nPZk/rOpru4N939U5tyLAUpeA dqNaJA8LgF1i4ZSGe7gHUIKM2xW3On+jy50iseKYKJtW0 X-Received: by 2002:a05:622a:4105:b0:532:18a0:492c with SMTP id d75a77b69052e-532d8cf03c1mr39374491cf.14.1790045658626; Mon, 21 Sep 2026 19:54:18 -0700 (PDT) X-Received: by 2002:a05:622a:4105:b0:532:18a0:492c with SMTP id d75a77b69052e-532d8cf03c1mr39373721cf.14.1790045657344; Mon, 21 Sep 2026 19:54:17 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:16 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:03 -0400 Subject: [PATCH v4 6/8] 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: <20260921-blkdev-fixes-v4-6-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Sashiko , Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=1679; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=Rd/lOuuBE1fe+JFuRG2/9O0X8Yb9sAGg8AsM4evfW18=; b=1dWllPo3jLt9esInUtwSLHG5wFx+G8i6GuB4B2qyjpBYRHbZBBbovT0TkA3lP8HjZrFVFvAAJ cr2W9fFn1YJCFRQN9D+wC6CR7b/KghRoSP0xBcaShXpXvMHlBfrOXQs X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-ORIG-GUID: 0CI1YSaVrylW2h0fiDlpbD7yCSBPzMMG X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfXzfY2nvggAupA /JxwW9abpsTK90dUpKGKFBsMsd1yHppHWrkuFbFXNSn9ohHICiXp2kyq8d6cND4RE56z5x+LW5u ovngsWLcSoeIijIg/urrJloWUV0URqyfv4DA8cycnR7oZgFi5Z2S X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX0zu7g5tSiFHi au0MqAx+JMNlg+Y2PJb9uqdPXrDkxHv5RtxUDW4hZEgeQQqlyeSnKDwJXPKkbLJ2m4G12g0zz3X pKNXIL2IIGchpFl8/3+VpcfyvAKhDtkDHWT+9aDL7uiq6q3Sd6BhnS0lbfrX8+8+bc4G3AIYmoi KRn8bbn6ReZ4HNy8jN0QIUdqqGOaVPzdeq3Bn5ZJv/OECPCtJjcoq7l9Is257+wtLNwNcvhIsLo cTQYL3hvJtWUlh0RlOoo6RxYT4HBC320nlOQ7HqnkkEC9stkT1mmZYiIyRZA2q0BoEBQBEKQAvx /yORH7MrmbpIOVpIakR5uBCByI0Ab6aPccZNIjYtaFS1p4N1JK3FkSkohOZStZZa5oTV3mbbhgO 5O2/Y2ogA4lb2TnpXwTRGVMoSEwbPNarL4tcRiqePiVI/4psT0Wp+jplWxWIfpCWhsp6CABD14J 7j0Jwybm9KS/6xbQcTA== X-Authority-Analysis: v=2.4 cv=U/UHnuru c=1 sm=1 tr=0 ts=6ab1eddb cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=QOCMdifcju39GKoXhKua:22 a=c92rfblmAAAA:8 a=VwQbUJbxAAAA:8 a=s8mzj7eOnaliLhoSWqYA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=GvGzcOZaWPEFPQC_NcjD:22 X-Proofpoint-GUID: 0CI1YSaVrylW2h0fiDlpbD7yCSBPzMMG X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 phishscore=0 lowpriorityscore=10 impostorscore=10 bulkscore=10 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 Signed-off-by: Tal Zussman Reviewed-by: Hannes Reinecke Reviewed-by: John Garry --- block/fops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/fops.c b/block/fops.c index 90777e8a9a6c..7f23778f6b81 100644 --- a/block/fops.c +++ b/block/fops.c @@ -766,10 +766,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 683173AD513 for ; Tue, 22 Sep 2026 02:54:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045662; cv=none; b=tiit9DeX3k/RRLF/Lf0ZpMk3HjUuSi7chQeYXroqn9ZVVn3LwT9DrtwuRVJ0E529fiN7v298NJg/j06yI/n09QMvdLuqu26D2vdlScHfsvqlGWXzfmXsZZAGMRCzBcf9aq6LJokUTqo7Y9dnV/bPh4ncYGN/Kzh0PscomeWTlyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045662; c=relaxed/simple; bh=rZZjjs2nTpk7zrUM9R7kySLERZF+SDueEPBYKpLEFsc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MlNEfebeqFtZylk3LxfAG/eLAQcnXTB83ZSx+gHDx2FNMQgXAOhUXHSSSkh+4PcBxLqHh8BmmTaNhFVmhnL+Pwmm7WSZlL+8N8bBMYtcv/p5ET/KikDgnnc9wE/2Xy4kTQ6K7nfmY2LFr2a/GUmJY408nK1DZpUOrcO4kdyAjxw= 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=oDZbwlSN; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=2T9dfmYt; arc=none smtp.client-ip=148.163.139.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="oDZbwlSN"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="2T9dfmYt" Received: from pps.filterd (m0167075.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2X3wu938896 for ; Mon, 21 Sep 2026 22:54:19 -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=WiYz LkMMA+f6wobylLOZvjQbEJ+PAjPzzuFt2VOtGwo=; b=oDZbwlSNfrkQ3szujUGc N5662qJ+UDutoHcjONpzAs3egMDvRR5xvPmWF2oKtSVjJdF2YSWaKywojSFlHneC cw6kaZVy2pfnztW59ir+5mSKG9TmE0rCA6HvSxZyky5GF1Wk4k4dzCxAayhdNOrq THMIptD514z1apMrblRpB7eyM8Y2BEKaodMqAGysUhWxePNqjJ61VYW6g5fbWHd4 DWlIS0QRGGX8PDgSjCtfk/pLHnGgO5YmpiQdIyaVuuQZc3Lduq8UiBGZM7Qdn+m2 Li7j6mFXCfPWgUqpATyWyFBrG7SFvzSJRrTLOVLTmFiUpP7a387fNTu8Niw4N/Yn mQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4guavu2bmt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:19 -0400 (EDT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-52dcf1bb6e9so8801571cf.1 for ; Mon, 21 Sep 2026 19:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045658; x=1790650458; 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=WiYzLkMMA+f6wobylLOZvjQbEJ+PAjPzzuFt2VOtGwo=; b=2T9dfmYt9j5wanJ259N+uwHC3QT5O5e9fUJ3FVYt9Mqd3O9Ja0GQZq1S00RDH+9J5v NZ57DyPKeQV5ELdQc/mR5J1LtSAJ5o80cKdn7WI7bKJPrb74JjyjaI2qw5QFjgmAIBW9 UyKyCQGE+fUNEw77Z/vG1ZMi9cxjIdSZS7IPdZpo+uSDcpiQSnMgQsjz6+h06Nm+oPnP cUUtc3mFats79zCyIAGLtpXwZ/en/97DxAMSblt3KpJo7zt3VT6p4S5Rnhbn8r80jluD nfYOqz0bSBa8nIUlJUb7qJ9Lk7lpMbP8WP2uRBREQ8O2Z5QcyoI34XRzf5rT2rprMxtk 2hsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045658; x=1790650458; 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=WiYzLkMMA+f6wobylLOZvjQbEJ+PAjPzzuFt2VOtGwo=; b=dazYo3UbeEmyobrbU8llFUta55ZOK1IXbnqlG55YLWbdNRGtiAdkHMmVkZtxxUAynm 3A6tLJx+qxQYaNzNnFrnaBv9zTYmjcUOGLDE3scMCs+60FmGd+Qi82zQRhmjyOmUecA5 jHbIChTyyV1Jz11Udhn3hDCjJ1e8ztL6/dODTp96rdJ3upBe+ZhirQ+L9ZScVDsvDZle tbTm2PqqhTHC3X5gy8vIfnFD8bKk0sZxQXuKt6v+dQmRSdqA8ppkfvFDRx3dhuZMO5UA TtLepCu9W6G1P4Mrc7wwIrJdoc3kHoFg1yaX1Ka2I41aOBDPxJsuJm2gtsEhYGdDzBbP N6iw== X-Forwarded-Encrypted: i=1; AKwUvByuZBLLVR0yVnFL3nULQy0VQBbniflXbOFeqjCTc7ASnlk+PBxjtX1Ql7AN73uWyU4xaL2117qserfaT54=@vger.kernel.org X-Gm-Message-State: AFuF++laBkmdyh3XaxqA+9UIudkLgA3dAOWA4RgnDYlu7VpAV89DcW+2 3pEeCmc+JnPoNoOigMU25EIs2h0bdF3dawr+VVn0kr/Ox2mcKRfcgY+Vnv1GRF+mcA7FaZNQbAn M9+gxC9F4gcN+zQ2L4bxNt2lZyv/1Wl2kVYisHwJaieMhFEwT6LK344OI0mNccA== X-Gm-Gg: AYBFou3UC9hoCteowfmBbR04B/DnCRA63hpVgt+wYiyq4cnUy3ZBl8f5dGzSmCT3KS4 a7Kfe75fCPRpuw06G8MpJaxnH2gl4DAFFJWQAA5L68zUJWGNI7uIfLX4C/VW6AT8l2ToRfL0Fcz nP8djVTtN3D0RGvk5nU/9Jx/v2KBovNW9uUbzjvdnPYQVUc7uQjkDCzKtkh/M+FAIJ5zjUyWHQc RBqFTtdX1dmmDBxfMcZmf4uilmeEHkfrC/k+jqcRqusuV1u6cPuAYvask597hAL6HcH6/okwRZM IayI/6SZB9F9nubipEYemDsgANF7bmWoFc2EcbGLIR2JAoDweKWM7kGXKBuB9o5KvWu+nNiovVp V3q/8x5c+EHcbs0M2duMhELl4xIn4DtKTYoHMegEVaYxK X-Received: by 2002:a05:622a:6110:b0:530:fbd3:2038 with SMTP id d75a77b69052e-532db89fda7mr20723901cf.26.1790045658536; Mon, 21 Sep 2026 19:54:18 -0700 (PDT) X-Received: by 2002:a05:622a:6110:b0:530:fbd3:2038 with SMTP id d75a77b69052e-532db89fda7mr20723671cf.26.1790045658153; Mon, 21 Sep 2026 19:54:18 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:17 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:04 -0400 Subject: [PATCH v4 7/8] 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: <20260921-blkdev-fixes-v4-7-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=3752; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=rZZjjs2nTpk7zrUM9R7kySLERZF+SDueEPBYKpLEFsc=; b=FLTYkI7KEFCj48UZA12fYrq5McbVo5ZRKbuncmp3UvNi1DCRZNe/1HA0+F9DD4GxiD/EE37JS R5CDQoRmqRED1ufK8EcIyGpML65OQtZzj1U8Yx5q2IaCGaeKBXuph7J X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Authority-Analysis: v=2.4 cv=OfQNnRTY c=1 sm=1 tr=0 ts=6ab1eddb cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=HpS3TJQ9O3Ob1ozEcmik:22 a=VwQbUJbxAAAA:8 a=JF9118EUAAAA:8 a=FzqJyQ6YvfuMctRh2gUA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=xVlTc564ipvMDusKsbsT:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX5c+RAt07aWGE QEVB7Z5oX9iiQTz2rEHB8F6BOPx2skdytt6zzj9yRrqUPs8eSh5ZMk8ARVTGv73Fjmxnso0EMHj 55dLI/mn7Y9d3oQq4ow2yrcGAN9eWm9d2qFWbKQr7WBroRIq6YzA X-Proofpoint-GUID: D2q097WKOfHZp9B9nRucvBJzNFFD9q3Z X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX/i3Ih3bGClJd D6avXc8K7Zh6Z4UQiUHqeLcuRnJZ9p3pUGZyfAj3OzrYnGv8f+WazPV5w2XN0zZaevHeUE+edbk JcF5y43MDh6nDmB20hn2vsR/SiWOGO98zfafrJiPuovKtVZrU9vWc7M8JVIKnxzKXy1Qi026uxI quqMx0dTRoGXUTHv7uqGZh/3noNlV/MeOW7tAzN2jW1pLEMHx1dR90eTwYXCq5SuVgekSNkAqGC +m4/+7G3o0aGBVj7FVr83I7CqwjGjSXhJ43QIyR0zrXVA85apvaSbSQ1faHrq8uk5QwQgXvWPox P/sDXyRs19gxDgP6lIryjhCgLdZjCAjfn65Ls+HOE2vC7Tc/5RZOFqmnvuH93beJxfByzCuj2Gd Z/7Fi7pesZAuBCVq4o9ldqMIvOGNwdZQHtNKvo/KfvgCyXoJX24NE5csnIg3ARqun0h9I1TXdo9 r0Q4242WMWNI60c8RVg== X-Proofpoint-ORIG-GUID: D2q097WKOfHZp9B9nRucvBJzNFFD9q3Z X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=10 spamscore=0 priorityscore=1501 lowpriorityscore=10 phishscore=0 adultscore=0 malwarescore=0 bulkscore=10 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 Signed-off-by: Tal Zussman Reviewed-by: Christoph Hellwig --- block/bio.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/block/bio.c b/block/bio.c index 14429a5d4e68..73f6271d1250 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 @@ -1504,17 +1530,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 17:04:51 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.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 2B5083B27C6 for ; Tue, 22 Sep 2026 02:54:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045663; cv=none; b=q2UvtZReoHJhEnTq2iJg+Tqcn6hDKaR7VpYrdpDXLc4lltwET7ps0uavZiwj7usHetG+j9cfWRo/KpS+XZsSN6Scau9D5312K4a/MOW+nc9rLn9aKY9ykY0FSUEHnOT5FalY1zwFZdXO4onItGAv5f85d5OPkdU6oprRhxXqbUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790045663; c=relaxed/simple; bh=EbC+zxM1tqI8jGM5V6h5xGabP65wDxbe+0kLZNaqFJY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z41xZ0z3OI/dHuLeNSlVjyrIOFVx36zlrOMw1g+22G8ptGoZ48KDVPrIdH1EkCChdK7DMyFIjyiDgHWk+b7fJ05fT1uSBnTCwtfAzH0dqq4vDSufMQGNPTzQan7YKynIHOjxWHH87sGqPJOyFhw6vCCp0D6x1G1zE7I33BRyLSw= 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=HrNROfLZ; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=UF0QmMpd; arc=none smtp.client-ip=148.163.139.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="HrNROfLZ"; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="UF0QmMpd" Received: from pps.filterd (m0167077.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68M2XQ3S853248 for ; Mon, 21 Sep 2026 22:54:20 -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=fCyo Pm82t/vQFUFDMN7TNa15BmngKFwJlt5ScMnEw8M=; b=HrNROfLZRDR9lv4nMZtz iPHcGTYii1LCajuBfX5TL14K0CBPvyjfbf+g8HthUMiBT0y8yUFFJ/OHUfvUipwJ GzYVzZG1zJ2ZbglZrz04hhC9m70a4QESexv6bCeV5OuDpakBGk83Z6778HQCCl2e vcnPXknT1CF0LatW95l5yDUu7uYD1mchGjx76P9aBN71sR4+TQeBgPgmrCmrHAsH /iYmq3Rx+YA9DYfmWu0Ee+UQeG4QanI4shyhvV89gc3NGrQF5PBmIpgoj7LyfKf2 SBPN3CfSuW+UPf2Yn1n1gclqWvpCNv3BHIhLLMfBJL9s9SPq6u8HGrne1YUXjNDS AQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4guf3vrkjm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 21 Sep 2026 22:54:20 -0400 (EDT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-530f5e827c6so83191071cf.0 for ; Mon, 21 Sep 2026 19:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; s=lionmail; t=1790045659; x=1790650459; 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=fCyoPm82t/vQFUFDMN7TNa15BmngKFwJlt5ScMnEw8M=; b=UF0QmMpdAoR7AzoZwR8ZbgJhSuPu0y3dnNs7I+KSc1sNz7OiGZT7GZAT5O+zYRY3TJ INtNbt3/+jMqZN8tXMU5ocwKaKTGlbn4af5IcZh2oBtvVW2VNSUo73hlLuIoHdjL2wTJ e43s5DtObmXvx0oQxdX2Lr4Z3rff4rEutk1B7k+3XtKWsXJ9pbwIypjvQ3bOMVkM4DQX jE4U9dbu/wtqOryHOFlNz++hz+/vwLkRepdeGrbAMGEBGNt8S+FuzdatQu0TBwLqKfcM yV5+ey1HUG9+BZfBlgHoJ4evhHPtiXCznzLT0E93BbgAkjtokJ8VaBzs3txeaYwIWBjx CD2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790045659; x=1790650459; 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=fCyoPm82t/vQFUFDMN7TNa15BmngKFwJlt5ScMnEw8M=; b=M8s3U3N7aFPiPHPDP0Mz5oOX8MPx9JuJrWFXYqodTtcj3BKICwoQku8aV8DXw5Dema Sz5TGXGfaOEfROeyyqZsYaBiUx0sXenmzmZdxDNjV9vAJiuT88dy3SxBbyNwPT+qKvlQ qHRO76jG87CuXuGmmTpQYvzjIUM4ayW/a/3ZNdz8pRTBlYyoCByv02FLFHb7uzzRepIk TdxAVj/l1ZHDd/5CteSHr0u78fUYRfiKzUZNvlXIoEBXioM8YjuTYqofhof/j1urBx4O hi3YAVc+PQSGzP9B2OBkIuVldzqTslhSm4zMO2MDDQQtZgzxfF7XxnflqdWSl9a5+5NC 2NVw== X-Forwarded-Encrypted: i=1; AKwUvBzzPWo8HHO8Svf03lk5BKCdGT01ckW1QyIKnhcpXWh1OHoaxGrFUOAPO0uIhV82tF8leSQbnU4QH62HkgA=@vger.kernel.org X-Gm-Message-State: AFuF++lCd5zki/VooHxzOyLDuI8ZDtU1siD6dUocF+rwCSuLAJr+YHJk x3e0dPTpgI9EWEZsJzlDtb92pcTOFWI4DNeGMPG5kQzt2uOCOcNh8azwCZprXgZtBDSp993pLqh OhsUsygNCNsLJ4jXd0mkLCbBtWYVXS1ffG7G5ChkLpvmiHAiyq5NCU5Qx6Wc4ig== X-Gm-Gg: AYBFou1TkSz12AQiaTlxilxEZ3OGFkUjUJIiJyq3DVxoizpZ+KQISznMQwlsYbMxy4g N68r8kQmfeup2A4tRnSlPrEfbAnBsI/VynE3x4AG3vFrlnJxyumiMlPinR3tcWRbm1lBOZ46Zs8 yrxeWhXcUFbKVLPKaY8AsJEWsJkqe3hFK2PKyMjDWcOxjbPjGR/m6VYO3X9KtDhwwE10+Cnv/oD Uh35paw2U+e8HSHHa8sgJtlCInX/lCVGESeMLcJUJPMbU9eMm8cbYWjDL4nFryEaCjZtfak3Zyv ZUDdOGtUbvC9rp0sU9QzTGby4eTsmRiFPH5Rva1CJuLv8cH+kK+BRMIhyQm/KITqG4eii106N+e +gJge4JmXio84O0UvAz8NtXVpVfzka4WsML0EraHioEq+ X-Received: by 2002:a05:622a:230a:b0:530:f67d:83ea with SMTP id d75a77b69052e-532d8d31f2dmr37334231cf.11.1790045659420; Mon, 21 Sep 2026 19:54:19 -0700 (PDT) X-Received: by 2002:a05:622a:230a:b0:530:f67d:83ea with SMTP id d75a77b69052e-532d8d31f2dmr37334121cf.11.1790045659047; Mon, 21 Sep 2026 19:54:19 -0700 (PDT) Received: from [127.0.1.1] (dyn-160-39-33-242.dyn.columbia.edu. [160.39.33.242]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-532e18fce9fsm2048421cf.15.2026.09.21.19.54.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 19:54:18 -0700 (PDT) From: Tal Zussman Date: Mon, 21 Sep 2026 22:54:05 -0400 Subject: [PATCH v4 8/8] 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: <20260921-blkdev-fixes-v4-8-e2801f71ede9@columbia.edu> References: <20260921-blkdev-fixes-v4-0-e2801f71ede9@columbia.edu> In-Reply-To: <20260921-blkdev-fixes-v4-0-e2801f71ede9@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, Tal Zussman X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790045650; l=1396; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=EbC+zxM1tqI8jGM5V6h5xGabP65wDxbe+0kLZNaqFJY=; b=yERiseFIyAnUCk63ZZni+vwp1NciaCnnL9jJ2tVTvoeYLsx2HpPUCDme8TFQIXwRyRoflEjN9 /H6pW6x2mioAhcEpOVrUEWzzjpeSQ8S6fovNVbXT91kBp32OLbKF0A0 X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Proofpoint-ORIG-GUID: 9wAcukWwdLmRrDduQObIYTwORLalGYot X-Proofpoint-Spam-Info: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfXx/SaszXyO7wo 7ws7GujAI9mLaAoSJEVs68nGwTvfybM/A0Igj/qfbYEUpXmFeU8MfRfXOLHeapqq2jRE6sXdZnL KkEi0q8ziJN/n1VIqCAMY3Far8stptbe9Y7NMtP1lxgXSa7dc3aI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTIyMDAzNyBTYWx0ZWRfX9B6Ef2FxzdTW xTMKGk+3lc3JMT2Dd4rUMLzQgl4a1aR7A8JaG2dD5OjrfX+JbvpvuCOlOYBjBFtB3zrUWOxF2yW UW7SVz72fDh8Yua+QAIEaN+CvyrJUBGJ+MRt/kn2jgaxXegit3kyvPwRKwV3Pl2mv58JeJH9SZx hNfO2ZmIxaVWO54qxIyIlhLqJC3Atjvs6RjT30XrvIV0WVy9iHt0CR7p2pTUX2F4kuysEmJiz6c 8+JFOy/ag9WqB+ZpL3SkiQaprryeD2RUi1jDe9/naB00r9kncaV/UJX6rhPgXO4gzJnzwgftylh I7tJk7mFNIFrR5eEFKte1hMSIzWwtSOszgLv7Omu5BlaIFaFkFiEQPe99nw2xsgDF9S/bYqqaZJ +BJQRaxblGymb3ePt21XgETSGL50Zn940TGKAA3ng4lmHf2SRsL/gig0YGkMJZ4QNz/qKcaqhED 7jEfLPyzKq7MId1oLAg== X-Authority-Analysis: v=2.4 cv=U/UHnuru c=1 sm=1 tr=0 ts=6ab1eddc cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=GaPK54s0Se3oFqK5NkZy0g==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=x7bEGLp0ZPQA:10 a=A0y_DWxS2BwA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Da8U98TiO7q1upZEImrf:22 a=QOCMdifcju39GKoXhKua:22 a=VwQbUJbxAAAA:8 a=IE87Obj3e0A1gCLlgTsA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-GUID: 9wAcukWwdLmRrDduQObIYTwORLalGYot X-Proofpoint-Virus-Version: vendor=nai engine=6900 definitions=11912 signatures=596817 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 phishscore=0 lowpriorityscore=10 impostorscore=10 bulkscore=10 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609220037 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 7f23778f6b81..55c2e606c662 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