From nobody Sun Oct 5 03:38:29 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 637BC1DBB13; Sun, 10 Aug 2025 04:48:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801295; cv=none; b=HzOLVhl70+idUUs8TXtimoEkgyNQdW7elSU6CdJ2LmhPobyw9fX+mADWBdxL2xyCWQpcVHQZ7c6PPGwr8y12jajcinYzCQanfEB1hw/5cDZBUvEqrwHbLmjZ/hLXwM6WptpVIT7Z0EOtpqPKWzJ/7JVWAIsyumdrZPpCk3tAH+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801295; c=relaxed/simple; bh=C8nrC1IFc3EI/BkP5+Ca66ne1NgDoTqJ46XyrCMrQzM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zt2Lo3xGhL4bpcx3Zvk4S3N2cM2dWgrAsG3fsVIuTfdGM2Xf7vPmX7cPUlHRsU0QDEeK0UZfsi3k8z6fwEJds1EJyfpr3VYjdD/AsRU3bsYe4IriP3KazdWPvycMcBBHf3a2LeawtujYBvCYC+UUZ6fkH+DXeG+zk+lIOocIAWA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dYG0b6lA; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dYG0b6lA" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-b421b70f986so2412904a12.1; Sat, 09 Aug 2025 21:48:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754801293; x=1755406093; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FJ5fmgGeCdzB2I4GI1U/BvqGbR6CHSQL8u9JN/WFBmI=; b=dYG0b6lAn0xembK720xzgkmDujt+TEIUBm/eoUoxNrznWMbI9cBR/HeS6U9FJKtfmy 3L+WpkWcma9D/De2o23Pusi3t8FOOyWBpAUomFZFfV/cq6If72OEvoNPNs7yqxC9nexU SS3AYhJTk5GkgsMPBNQT5V4eePUaNpGw6f/S1dIdzuVOEmOjRFumA8+2uhF1rCFY0w+R 013yKcNamcAMFQncnDOWxT/2zAwFO2SY2kWTbUBou32R9AEskZfmmhX9Zg9B1bZvmHS1 qSfBeEmsjFRMFoduEkZfFp3BGCJRVLOT9NYzMKLrZMRd1UwVgkEJDNqhw+O4FfJW3uVZ 2l2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754801293; x=1755406093; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FJ5fmgGeCdzB2I4GI1U/BvqGbR6CHSQL8u9JN/WFBmI=; b=OXf/yicx2A5Y+oxMKsDfxQRgz61+aBxO7ZT4l6lVIsTuDROCgKTpuxp7+F192Ym/l2 /H8vixlveyChrojUmUKJ3G8fE0oe2lEZCpKIGhLOMTlYsQYFStTduMfundI6FBx/G5SW IsbskMJr9i4PgQ3HqPyMUdi0Wcp9EGi18rNvP8Tviw1XKaBVqkzWMX0S5ulup5S5Oalx PRBW3m53jls1U4ZnSH9iu0+XuGkLETtSdS0A2CY20CGEOUs9eRTafA6BkKtEKNfjxG2r lUf7uvsXI4n8aZQvde9vff9WbbuaU5A3Cb5hpuG2bOCt2hOhkdG14SQHt30D6wOB8Lfv VguA== X-Forwarded-Encrypted: i=1; AJvYcCUSukDZbjA37jDK8PN7TuG+6zJ9mxABA6eHAPja3f2OEOwciD3BFWyDWZv2o1JnZ3f3DH47cHzOe5sCJNim@vger.kernel.org, AJvYcCVUHny39Pw6Pv1qp5r1TpuHj10xIMrB9Lfso6MrM/YKSr5dmQ+8s2AgS7ReOldG7J6mCqEr1MeDpo+qMkC+@vger.kernel.org X-Gm-Message-State: AOJu0YyQpSSb9yZ7B02DvePwyvzHwHtNsampgm92xS17Y4wXHTjrTcJj ogSLGVSyRy/AsgGwebUKYtozBbS8GsMoYEVijFrWbtzTWcl67A1Ufgwe X-Gm-Gg: ASbGncv2nGtveNPsvGEw44PAekyl+5x9IRueNv+/GIj2rieM3nrCLYSuYDkRXMRTtAh x6hfBNU+E4+RuZqNr7XlVkrGZ+gAxLlSVArH0Fxoob2tORboDT3B7eigD0FUb+FXI3uX/Xk5+qK 3Mcx6Z9GLjhpHXRlJZReBHaV9Fc3u3kQ5wutRDt2CD0GfcGO+wm/bIo+Eoak02QhVLWLG8fYe/w 3ZzdnnnlbhpWAQrTrV1qMLWQ75kKVHbVAWEh0RqihfHPGQjtEsztzqBA+I63KoBXUN+yeWKT4Ne Tj8FgPYTutTWGS16e+jhVIEk3VkMf7joOQOREVrble1QYJUXu2ktbM4V4u1Hm3M7f9gKYBwWtz4 3KnB/aeKUK79SWR7N3fZzmQB7WbDLD5F6s5M= X-Google-Smtp-Source: AGHT+IEijstVkN+H7I4+vcxOItVz8UOgqPXn3Xe4Uc6UfLGbFkBB19iKGx0drVHIf9pzc5RO5yNBig== X-Received: by 2002:a17:903:acb:b0:240:3c51:1063 with SMTP id d9443c01a7336-242c2010d03mr102719825ad.23.1754801293418; Sat, 09 Aug 2025 21:48:13 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8976f53sm244113645ad.113.2025.08.09.21.48.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 21:48:13 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: brauner@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH 1/4] iomap: make sure iomap_adjust_read_range() are aligned with block_size Date: Sun, 10 Aug 2025 12:48:03 +0800 Message-ID: <20250810044806.3433783-2-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250810044806.3433783-1-alexjlzheng@tencent.com> References: <20250810044806.3433783-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng iomap_folio_state marks the uptodate state in units of block_size, so it is better to check that pos and length are aligned with block_size. Signed-off-by: Jinliang Zheng --- fs/iomap/buffered-io.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index fd827398afd2..27fa93ca8675 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -234,6 +234,9 @@ static void iomap_adjust_read_range(struct inode *inode= , struct folio *folio, unsigned first =3D poff >> block_bits; unsigned last =3D (poff + plen - 1) >> block_bits; =20 + BUG_ON(*pos % block_size); + BUG_ON(length % block_size); + /* * If the block size is smaller than the page size, we need to check the * per-block uptodate status and adjust the offset and length if needed --=20 2.49.0 From nobody Sun Oct 5 03:38:29 2025 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9311A1E835B; Sun, 10 Aug 2025 04:48:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801299; cv=none; b=CzdAYcenqfbx+cRQqTTj8YNPvaFr7rx9NOeIp0wQ5FFtgsjMSa6+18/tuLsW1VZT602htgmsbXXA9OhiBm9FOp4zUNm8X9QDMW9vvqGpuF8eMsEzsXMu2lt53q8G9uc3pUZr7mRerC7Os2mJSEVryc20HjnkQqPCPcYUmcpOcSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801299; c=relaxed/simple; bh=+COAkwCs1KD7GqOfft6DRF+hbnsITzRJaq1MWI/QGIc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S4UQF7b8PZUJrlofHftBtg+RBevcvoGRi6rhZ8XLB3CGGZF0AezlIPrRugm0bzXWvf8XOTSYQ8AG0z+x7E7H6pc7QcsQgIkbRmelzi93ptSqdiVEs2NZ4yWt+VqLzYOTouKhTq4V/woYAn0fTbjgPXA/afGQyrGcPoLF8sVO738= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UTbd7z+i; arc=none smtp.client-ip=209.85.215.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UTbd7z+i" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-b46d905cb67so82689a12.1; Sat, 09 Aug 2025 21:48:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754801296; x=1755406096; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7NU5gUJ4PcGEpBiDai+Q9Xvwy3qursE+cF81RNZO19U=; b=UTbd7z+ib4KlphyJXGyWG6ind+uUpeYRivATBLyhBa91OCFlclbnhypF6WBQO0k+dB qQqokl4hn/V5gvCaUNQSASzfkWN0S3iarR7agtznWTFMVbsbpcA2xxkeQVizj+Ka06qq EK7Aa+r7L1s7Zk9YxVNfD3FvSxdbx/kmLwtl6czyc8r/7jzdsZDttdg5Rh8nem+2HaZq N62PnV6xEK1Ppa9uVQX5WOr+9Iakw1n3qxUeGh6+HSg2/rj/48Q+oYFFbJbkDfANYtmn T9J86Uv95O3yJ89u1GG+5Ibql+6l7v2f/EzYRtV6nfiJaLPbZckOkxgM4MN6TbgDiGQP npbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754801296; x=1755406096; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7NU5gUJ4PcGEpBiDai+Q9Xvwy3qursE+cF81RNZO19U=; b=jst4u8TAd/AzRpkc0fDZJYtQRC1qV2x+nFF9QaeXr27FAreTi5SEOrc+1iMXx3e7xI cMck7D1CCl3Q/3me/szm3FjdqdSDcSt3x6/q5qMgwCxMBe02SHuawuDzQW0fZIDbvkYS lMZRSmdJlQHqQPn1jHshpRG8+mfRd2iN+QNSunEqWe5QKIb4ppE1COk7jZCmRAZ3v3v7 0iAwhhDMExshKhX4uxLvzoqUgGqByFqDoSbav0K2Ic3wTL9fPGo8JHwCgSzMqpAtGP+b E688JT7vgrmmt/kbteh07ADeq17ILIk+uWgME9xVILLg6XlY/3upd53m4W1Sr7OVHvQw HpAg== X-Forwarded-Encrypted: i=1; AJvYcCUKfOCt6vDx4WZaN1WZgXA5yn8Rbs2Kz53f0gsvlJ+hNH2fyZCm7nDIzwbmwB5S0fJCWO3vO1OljV9dYWL9@vger.kernel.org, AJvYcCVPHl3jXQNJOBdvLdZHSr19oa7qerDoR4QM5AoI8opc7+cD/gSYbogF2SNt3YLG/eOXuV+xCm2u4Ugk1lNP@vger.kernel.org X-Gm-Message-State: AOJu0YxOzPkHrrcmSgD+/xF+DhBfLIQcYZWA2CgHaMvpi6seTh8K7/Rx hDmdAhap5hYlLfhXvGemx41NEbUUJ3cNxji/7356q8+xqjVu0TybxX2074K3Rkva X-Gm-Gg: ASbGncuImvok8Jes+GYWVxsMw3D7YtXVkGTKRaQuKcwsqki82Ljx15a0dDoHapHiPUu 7CYU+M2HF6uJIOHuZ2/uQuBmyBnxx2Oaxvjqb/G7q1Ozzc1sEBXw8uiQSEb1JU8q4dfDhGykmNy t41hFYXkNfVejgCaUQH0hkGX/zXS2q2aAyj6R5tvsruuwBQPtwZ79XfjGBX8nfBci8ttiOoA7u0 CAjOyU2N7K13UHZOqUpjVrO72vOkHq9/rLmvazTNcrn0c1Qavepqy51X8BDtvyJc/Z31pfjYWu9 WqaRMVVEy57k+bRhuTaTOklHvNNZmVFReUrDeX+WKGgIzC32SqcQyzjtUDP0Nvp0plvy6ChyhLh AWOf3akRQFefJ7j09uFQ9hp9EtYk6WsWby40= X-Google-Smtp-Source: AGHT+IHI0VUAtzBvKJyOeyURiyoBDIlWI9Z4gbYjKrA1BpB8h+EhK7nk0xn063LCq3b6ObcoIfhtLQ== X-Received: by 2002:a17:902:db0b:b0:240:5c75:4d48 with SMTP id d9443c01a7336-242c2e30a30mr133570725ad.25.1754801295536; Sat, 09 Aug 2025 21:48:15 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8976f53sm244113645ad.113.2025.08.09.21.48.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 21:48:15 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: brauner@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH 2/4] iomap: move iter revert case out of the unwritten branch Date: Sun, 10 Aug 2025 12:48:04 +0800 Message-ID: <20250810044806.3433783-3-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250810044806.3433783-1-alexjlzheng@tencent.com> References: <20250810044806.3433783-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng This reverts commit e1f453d4336d ("iomap: do some small logical cleanup in buffered write"), for preparetion for the next patches which allow iomap_write_end() return a partial write length. Signed-off-by: Jinliang Zheng --- fs/iomap/buffered-io.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 27fa93ca8675..df801220f4b3 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1019,6 +1019,11 @@ static int iomap_write_iter(struct iomap_iter *iter,= struct iov_iter *i, =20 if (old_size < pos) pagecache_isize_extended(iter->inode, old_size, pos); + if (written < bytes) + iomap_write_failed(iter->inode, pos + written, + bytes - written); + if (unlikely(copied !=3D written)) + iov_iter_revert(i, copied - written); =20 cond_resched(); if (unlikely(written =3D=3D 0)) { @@ -1028,9 +1033,6 @@ static int iomap_write_iter(struct iomap_iter *iter, = struct iov_iter *i, * halfway through, might be a race with munmap, * might be severe memory pressure. */ - iomap_write_failed(iter->inode, pos, bytes); - iov_iter_revert(i, copied); - if (chunk > PAGE_SIZE) chunk /=3D 2; if (copied) { --=20 2.49.0 From nobody Sun Oct 5 03:38:29 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 630C31EBFE0; Sun, 10 Aug 2025 04:48:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801301; cv=none; b=pl8/MvMHAyyfNNH5+8xodg0zz5mZ4ybHsPt986iF0T2R8LaWjrhu5vXyXGmw6lJ4OyZULZCwIXvKkqQ8F9dtjgyTwiqAxS7GYd0o1soMVphjfI2QwkulbJeoV1xxwAjuMbE9GTi+quGQPB1w0ZYpjT1TVMfr83YAklDlGQcS5yk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801301; c=relaxed/simple; bh=f91rgHLwNB+kaNRll9YzR+6AonwBuqWBFl2wHR3nT/w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DaWhOrRv3s714DYdIBSn1Ys+EoYj3Bu4j3HKshBdDnNN0Jms9Oc9KQ7DRCFiK3PKD6YNRrTxgMGI8DxTTL3+VOR/VKW0IKBusN3aor0fy3+1vUd7KhaWM0I8+oQz5xPQi9BDTwuvAKxKaZKioR29xyLSgpqbdS4GJPaAKdorFSU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mGtFM2lE; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mGtFM2lE" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2406fe901fcso34975065ad.3; Sat, 09 Aug 2025 21:48:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754801298; x=1755406098; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5WgDdPYVPBRADyBnekFKAkUwtNUU9JGA/7ZCfzfiOSo=; b=mGtFM2lE3Cuu3TcGAMtss+IFzerxvZ5trW80+c5R88VMzqUlLD5Yzyp6pWwg7zHQkc QOdqcC7c28AOHLJj6BPbRyyvDgg3/g/93MNOPX1U5kw9gUwDXZidh90/G/pdNqSoguRM 7p/65Q4y9VDbNHEtPMjQAW13acnMtKJAuYFhuvnjEsAD9LuTMPn7KgHYqODj8WHWIiz6 3IYUKK86BYBt4bKLdfUf9jx3VzzQtVHZOEXk1NNPqGGqevs/Etbj9qjsiFQI99kyTw/B iL+NsW1OCQj+NQBfdMN65vdw8SoDHLa9t0KLW/qrKjUjs6EiUNsF/Qk5AWiyGMzAzAvh A7qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754801298; x=1755406098; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5WgDdPYVPBRADyBnekFKAkUwtNUU9JGA/7ZCfzfiOSo=; b=icVdovm1Sw2P8a3a3ayGEXtZKK4wZyqVA2JUJ99IUewPsl4TVbyaOYiB+qAZTV3g29 o1RAwSGN1uOm0UDVUi3a8YlOdpKEyBiH45CVRuXLLPbXFIwhvwgBCSS5PLQMOAJGCUPu eBBNESSQ+0Mm8BC/SQDYDh3jpK04WDhRTPXhZFIK3t9K7w0z7DmhJvQRgn1bRDWrfBKg XxNaRerwo/6Ukk8+3N2uEq6VYtvP3AMbkRVQVHFrufNiUPx1DlUIaRQEuZTEXr2DPAId 33yedOW6A/21jif25ntFBsBQ83d9qAX8wIv8NBBs7JjmwViCCPMTeTBBKxiEepm70c/i ncAA== X-Forwarded-Encrypted: i=1; AJvYcCVpf6c1ftqjScRAKs9u9RBc6HHQXzo7akwILittnfsSdLdhDVnbsn8x51VTEeEueIJ7ZksmQDwCnICLZMxc@vger.kernel.org, AJvYcCX/QJYXKiyznV9LOkY49exIGS+ELnwtN8rBrIKzDLKcbFCXScm36kOxgaeVKdqXg2aeYcjAzq0ScthpooSC@vger.kernel.org X-Gm-Message-State: AOJu0YwyaWk0xTKG//l1XyjSqHjvtz2CKnMckRhrrIjpa5Q/zcDdN0EH wRzUjxuLsHsHFlqAVfxwIMF0sGkKIMbIfXbE9ScWXDhYXEk+8bHlZtJn0OrQAgo7 X-Gm-Gg: ASbGnctIqEVJ+hFiWOFkJ3MRQ7nd6wOmHGlZIb3H6P7ToDRSb/zY7MJ1vw1EWMmfvwX CVfSUj1ZKinjp3WworTNd3Br0wFwTKIJgah6tiMOBgnjrfcTm80/WQSQxqTTDRZPSHCmNIgZj25 zf9oSHcqanzCHlQho4/WCN27ccrzMpkh9hQ4Yq2Is/gnU5EkQlXyt55xZiIm9B98ICZhmi2Cee4 lUtCLuOuUG4pejrv+6NseFpUXjbGkknyUNYdnb2Ik6rVpXiNle/dQGadSgpGCa4XEuTM7dblmXA FXnCLYx/sme8yNAG2x39wc0zGaHbd/WltBFnNe+htK59shO7DVGnt2DzPrjZscR28rsLrUYt+f0 IGBRlXMyEsQobwXgRrbjEnAHc4kkOGqUzDcQ= X-Google-Smtp-Source: AGHT+IHio3NOxI6DmGDDGE5bzdJwsvlyHbEoU7dIG57TultqUhNsfx6zvUeKeTaf7HdT5Lwgw0mwpw== X-Received: by 2002:a17:902:da82:b0:240:c678:c1ee with SMTP id d9443c01a7336-242c1ffb211mr118034015ad.11.1754801297656; Sat, 09 Aug 2025 21:48:17 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8976f53sm244113645ad.113.2025.08.09.21.48.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 21:48:17 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: brauner@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH 3/4] iomap: make iomap_write_end() return the number of written length again Date: Sun, 10 Aug 2025 12:48:05 +0800 Message-ID: <20250810044806.3433783-4-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250810044806.3433783-1-alexjlzheng@tencent.com> References: <20250810044806.3433783-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng In the next patch, we allow iomap_write_end() to conditionally accept partial writes, so this patch makes iomap_write_end() return the number of accepted write bytes in preparation for the next patch. Signed-off-by: Jinliang Zheng --- fs/iomap/buffered-io.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index df801220f4b3..1b92a0f15bc1 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -873,7 +873,7 @@ static int iomap_write_begin(struct iomap_iter *iter, return status; } =20 -static bool __iomap_write_end(struct inode *inode, loff_t pos, size_t len, +static int __iomap_write_end(struct inode *inode, loff_t pos, size_t len, size_t copied, struct folio *folio) { flush_dcache_folio(folio); @@ -890,11 +890,11 @@ static bool __iomap_write_end(struct inode *inode, lo= ff_t pos, size_t len, * redo the whole thing. */ if (unlikely(copied < len && !folio_test_uptodate(folio))) - return false; + return 0; iomap_set_range_uptodate(folio, offset_in_folio(folio, pos), len); iomap_set_range_dirty(folio, offset_in_folio(folio, pos), copied); filemap_dirty_folio(inode->i_mapping, folio); - return true; + return copied; } =20 static void iomap_write_end_inline(const struct iomap_iter *iter, @@ -915,10 +915,10 @@ static void iomap_write_end_inline(const struct iomap= _iter *iter, } =20 /* - * Returns true if all copied bytes have been written to the pagecache, - * otherwise return false. + * Returns number of copied bytes have been written to the pagecache, + * zero if block is partial update. */ -static bool iomap_write_end(struct iomap_iter *iter, size_t len, size_t co= pied, +static int iomap_write_end(struct iomap_iter *iter, size_t len, size_t cop= ied, struct folio *folio) { const struct iomap *srcmap =3D iomap_iter_srcmap(iter); @@ -926,7 +926,7 @@ static bool iomap_write_end(struct iomap_iter *iter, si= ze_t len, size_t copied, =20 if (srcmap->type =3D=3D IOMAP_INLINE) { iomap_write_end_inline(iter, folio, pos, copied); - return true; + return copied; } =20 if (srcmap->flags & IOMAP_F_BUFFER_HEAD) { @@ -934,7 +934,7 @@ static bool iomap_write_end(struct iomap_iter *iter, si= ze_t len, size_t copied, =20 bh_written =3D block_write_end(pos, len, copied, folio); WARN_ON_ONCE(bh_written !=3D copied && bh_written !=3D 0); - return bh_written =3D=3D copied; + return bh_written; } =20 return __iomap_write_end(iter->inode, pos, len, copied, folio); @@ -1000,8 +1000,7 @@ static int iomap_write_iter(struct iomap_iter *iter, = struct iov_iter *i, flush_dcache_folio(folio); =20 copied =3D copy_folio_from_iter_atomic(folio, offset, bytes, i); - written =3D iomap_write_end(iter, bytes, copied, folio) ? - copied : 0; + written =3D iomap_write_end(iter, bytes, copied, folio); =20 /* * Update the in-memory inode size after copying the data into @@ -1315,7 +1314,7 @@ static int iomap_unshare_iter(struct iomap_iter *iter, do { struct folio *folio; size_t offset; - bool ret; + int ret; =20 bytes =3D min_t(u64, SIZE_MAX, bytes); status =3D iomap_write_begin(iter, write_ops, &folio, &offset, @@ -1327,7 +1326,7 @@ static int iomap_unshare_iter(struct iomap_iter *iter, =20 ret =3D iomap_write_end(iter, bytes, bytes, folio); __iomap_put_folio(iter, write_ops, bytes, folio); - if (WARN_ON_ONCE(!ret)) + if (WARN_ON_ONCE(ret !=3D bytes)) return -EIO; =20 cond_resched(); @@ -1388,7 +1387,7 @@ static int iomap_zero_iter(struct iomap_iter *iter, b= ool *did_zero, do { struct folio *folio; size_t offset; - bool ret; + int ret; =20 bytes =3D min_t(u64, SIZE_MAX, bytes); status =3D iomap_write_begin(iter, write_ops, &folio, &offset, @@ -1406,7 +1405,7 @@ static int iomap_zero_iter(struct iomap_iter *iter, b= ool *did_zero, =20 ret =3D iomap_write_end(iter, bytes, bytes, folio); __iomap_put_folio(iter, write_ops, bytes, folio); - if (WARN_ON_ONCE(!ret)) + if (WARN_ON_ONCE(ret !=3D bytes)) return -EIO; =20 status =3D iomap_iter_advance(iter, &bytes); --=20 2.49.0 From nobody Sun Oct 5 03:38:29 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89D511F03DE; Sun, 10 Aug 2025 04:48:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801302; cv=none; b=LNCWj7LOWsKndFB0DuajX1O6cHEH4zXMn5RDZMPTQAXrqIBNfeoUQQXvzpinKqVJWN0lSNjiiVar+t0gBrt6cpPhdyoIiFfx2zpjwAxdUsHIPMvcUtLoX64Co6nNqxPgrF0wSYKv5w+edV+CpNKsxaywNOo1VTlUeWjQkXvnu+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754801302; c=relaxed/simple; bh=jKaQoD/0uZFAoKwRDDwPtcqfLkEUzW7KbgTPmaYObs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jzjJ2tpifXuEr5FKX0mw+Ttcbmqq4TzEntaOIbjPYrGSLrC1oGQ0reDSfYMnyP+lchbLvbScdaapKALXTBcyL+Q5AqV73wTUiTS/KuSByyEDOrGLfnLWp4Q1Sulws9A94G2iHW4aVF1Bt7jwybjvTHMfG+nw39CojAAHUDJQecs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CUl2HFwX; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CUl2HFwX" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b421b70f986so2412924a12.1; Sat, 09 Aug 2025 21:48:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754801300; x=1755406100; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bUxuiidVAG6WD5n/vYEciBFeyJ2xEqyPcRFxaktImJQ=; b=CUl2HFwX4Ugj7OwqANDUvQyaAZIZkXC24G88dtiwRBLO3u1xVi1cvb6CNrqKcpiQ8e q4Gl+BiUsPVO2Uy1LFK8hG8gug8/aOHohoZ6pwNsnyG1B7Epjy6nIc8n8Eo067v/wzys L5sQ5kjl/Gmvzrd77J4EoS1UBRT/5ulQsHGQy3Y6tXSVwD5/gGi8d/hmNptigzGf+2Bb EaNjAzgFw2CkAmLnhJBjYhd9h+i/XPaSGWbHCMdreejvwHSpsSFMsfYjpSbJzmjhAcu6 Hlq08Zbg8sGjH8tXojz1sAYeq7RDYILF26U1eDzALk9/4mxMGI16UwH8GifHN3Tjrvvs rkHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754801300; x=1755406100; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bUxuiidVAG6WD5n/vYEciBFeyJ2xEqyPcRFxaktImJQ=; b=gavMQUHrQKeaVfOWqgZ4RpdVAtSaGx6/bbH5D4CayD6dupupZLeVLGqi7v5BEP8Us6 piSmTH43Rtc5AMSXQ3qvFggyDjiPBS0c5lfGJuEFHlfWaPh7YX6NXP4zFkcJH5U2A1Rw EIQZkyY/Gd6lZbGeZHuvLqYsvM06NVVI6/0/z60/DsfbBsfjytju0LJu03A83/dX7EKG rIup+Ek+ksfhwku1hgjlglNyKXE9yooY66vb3IcZBHzJxML6her53UNbFFXOhfrPZ83L Qlmh9HrZ+BMJ2V/EhVdPsoS1dun+N/IYlpMUQ1Tun0I3xRNcJzFIMzxbkzB1b83cKyc7 h+Qg== X-Forwarded-Encrypted: i=1; AJvYcCW85zV+ocvanfTpoBiN45y3ym/icbIKm5/uT1hRst+iEnE+bJUPBeV9nNOWl5w9vuB5qvsD6/NIIssaK72r@vger.kernel.org, AJvYcCXJlhJowSCs9xyMEFeh0ILM64TaQAWczvpcev7o8YXvUri8VvKYVyS3h2XwlYXNbJLRKPLyDWm8pxx3YJAv@vger.kernel.org X-Gm-Message-State: AOJu0YzUpljFd38Opx4qSTHE0t5nc3VXZkHo+/Sa1z6CmCHRMwYyw4ES hOFxN66MQHuSDaqP90SzNCts/ijbQ4zlmMG12vAf9qTpFANoP6BzLYQltBMlw7Bh X-Gm-Gg: ASbGncu7IawGQReZwtM/f1QWkOXO5h8H/vOG/TDjLipLp7BZVywDJMzRIK+fNsI1L2j rbg3uo1iQqmCraW04SAuZMbsi4WprpDQAGK9NmYI1LZuJslH8t7pccx+3E2qP0ApeL6zJjWembE 06a+bX2pyCjolL+kbQFG341EqhmwLeCd0JH5y/1WEV/AzZ4DzLoFi1Ma255gPD2IqU2taSmhgO8 R+P8dY4pM0R09DowIA4o4Tura0yI5pvDfuG+ikRQBhAMkUY4GURU0Adh12n3OSSPsooVDRvqsvA S4aXBru1URxG8y4qzEhBFS8q0ehk+tis/fNRZvX4VBEr7Goqvym5r0nfpmrY29tRB2+XApaN2CK rWpe9RC7J/nNF6T9NzjozExGX31EoBdwvSqY31NAEIcoz6A== X-Google-Smtp-Source: AGHT+IFcSi8oD8lofATKiO7FDlwHynV8TwFnSb8cJQbts2bmt5GSt1Z/Udfwoa/l2lAJ+0a+EYVXZA== X-Received: by 2002:a17:902:e892:b0:234:8ef1:aa7b with SMTP id d9443c01a7336-242c20073d3mr127126905ad.20.1754801299794; Sat, 09 Aug 2025 21:48:19 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8976f53sm244113645ad.113.2025.08.09.21.48.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 21:48:19 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: brauner@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH 4/4] iomap: don't abandon the whole thing with iomap_folio_state Date: Sun, 10 Aug 2025 12:48:06 +0800 Message-ID: <20250810044806.3433783-5-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250810044806.3433783-1-alexjlzheng@tencent.com> References: <20250810044806.3433783-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng With iomap_folio_state, we can identify uptodate states at the block level, and a read_folio reading can correctly handle partially uptodate folios. Therefore, when a partial write occurs, accept the block-aligned partial write instead of rejecting the entire write. Signed-off-by: Jinliang Zheng --- fs/iomap/buffered-io.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 1b92a0f15bc1..10701923d968 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -873,6 +873,25 @@ static int iomap_write_begin(struct iomap_iter *iter, return status; } =20 +static int iomap_trim_tail_partial(struct inode *inode, loff_t pos, + size_t copied, struct folio *folio) +{ + struct iomap_folio_state *ifs =3D folio->private; + unsigned block_size, last_blk, last_blk_bytes; + + if (!ifs || !copied) + return 0; + + block_size =3D 1 << inode->i_blkbits; + last_blk =3D offset_in_folio(folio, pos + copied - 1) >> inode->i_blkbits; + last_blk_bytes =3D (pos + copied) % block_size; + + if (!ifs_block_is_uptodate(ifs, last_blk)) + copied -=3D min(copied, last_blk_bytes); + + return copied; +} + static int __iomap_write_end(struct inode *inode, loff_t pos, size_t len, size_t copied, struct folio *folio) { @@ -886,12 +905,15 @@ static int __iomap_write_end(struct inode *inode, lof= f_t pos, size_t len, * read_folio might come in and destroy our partial write. * * Do the simplest thing and just treat any short write to a - * non-uptodate page as a zero-length write, and force the caller to - * redo the whole thing. + * non-uptodate block as a zero-length write, and force the caller to + * redo the things begin from the block. */ - if (unlikely(copied < len && !folio_test_uptodate(folio))) - return 0; - iomap_set_range_uptodate(folio, offset_in_folio(folio, pos), len); + if (unlikely(copied < len && !folio_test_uptodate(folio))) { + copied =3D iomap_trim_tail_partial(inode, pos, copied, folio); + if (!copied) + return 0; + } + iomap_set_range_uptodate(folio, offset_in_folio(folio, pos), copied); iomap_set_range_dirty(folio, offset_in_folio(folio, pos), copied); filemap_dirty_folio(inode->i_mapping, folio); return copied; --=20 2.49.0