From nobody Mon Oct 6 08:31:25 2025 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.4]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A0AE0285CAA; Wed, 23 Jul 2025 10:19:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753265994; cv=none; b=CSQG+QJI1hPEd5yLMg3A0KWre4jmf6h59ZI9Gkx2fuzk6BLOEQBJxGrnYSuMWV9Umz6gGkdbg8g3f7SeBcnvrt7us1zpfLID1fDmYrnNRdRCX2pV8cVPemfKiAmopYGRTRcnrgS9/GCj75GOj0zKrAL3aHEoGNvzVnv7hCU8+s8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753265994; c=relaxed/simple; bh=bTEhTuLg1fOkAjI4hXSNAcm3i/uDDaWh55x6naaOxGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OrILSbTvnHghW1UkWhJZt5ze+2a7hVQu7BHM+pfIxGqHoB9B4X4AkRpImFhcbz5RVLYRLt3DPVGamDpN+0EtRDSP9EW8//i7UlEY0Wd6WD5fqu9i1KuLhEnkPaHEgCnNZ9YoR+IV3IR0fDv1EqMVTU65r/nxxeylL8mY/xPmBpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=EEwBwJhz; arc=none smtp.client-ip=117.135.210.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="EEwBwJhz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=kq 4/IE5TxPSa3+Zo+mp95KpeFojZt3lfQEaMXcQST4c=; b=EEwBwJhzi6cOySsl8y Vmat0Ph57DWpeiV6hLeNR0Yser4O3qQH2be8w1Hn6a5Z+oKvX9YwuCNbaBIk9A+n GkNulyH6+leqToZ4fT8SSoXAqCgT/y5yRA12crDl+mfWyv9nUAdgE1l24jOV2qsZ aEN0BJqDM+Op0U1LDvIPzBpt0= Received: from czl-ubuntu-pc.. (unknown []) by gzga-smtp-mtada-g1-2 (Coremail) with SMTP id _____wDXpNEAt4BoaJF8HA--.11729S3; Wed, 23 Jul 2025 18:18:41 +0800 (CST) From: Chi Zhiling To: akpm@linux-foundation.org, willy@infradead.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Chi Zhiling Subject: [RFC PATCH 1/3] mm/filemap: Do not use is_partially_uptodate for entire folio Date: Wed, 23 Jul 2025 18:18:23 +0800 Message-ID: <20250723101825.607184-2-chizhiling@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250723101825.607184-1-chizhiling@163.com> References: <20250723101825.607184-1-chizhiling@163.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 X-CM-TRANSID: _____wDXpNEAt4BoaJF8HA--.11729S3 X-Coremail-Antispam: 1Uf129KBjvdXoWrtF4kur4rWr1xCr4xArWUArb_yoWkXwc_Wr Z7Zw48W343GFWxArW0yFW7Jryqq348CrZYvasFqF13A34UC397XryqyFykWrs5G3yIkFZ8 JrZIgryfZry3WjkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IU8u6wJUUUUU== X-CM-SenderInfo: hfkl6xxlol0wi6rwjhhfrp/1tbiFBWTnWiAtsIFNQABsi Content-Type: text/plain; charset="utf-8" From: Chi Zhiling When reading the entire folio, we should not use is_partially_uptodate() to determine if the folio is up-to-date. If the folio is not marked as uptodate, then it is not safe to treat the entire folio as up-to-date, even if the partial check returns true. If all data in a folio is actually up-to-date but the folio lacks the uptodate flag, this could cause issues during pipe reads This change adds a condition to skip the partial check for the entire folio case, ensuring that we only consider a folio as up-to-date for the entire range if it is marked as uptodate. Signed-off-by: Chi Zhiling --- mm/filemap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/filemap.c b/mm/filemap.c index bada249b9fb7..af12d1cecc7d 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2446,6 +2446,9 @@ static bool filemap_range_uptodate(struct address_spa= ce *mapping, pos -=3D folio_pos(folio); } =20 + if (pos =3D=3D 0 && count >=3D folio_size(folio)) + return false; + return mapping->a_ops->is_partially_uptodate(folio, pos, count); } =20 --=20 2.43.0 From nobody Mon Oct 6 08:31:25 2025 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.2]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2ECDA28D837; Wed, 23 Jul 2025 10:19:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.2 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753266000; cv=none; b=hCnQc9GpFPqNzDqPxobMMj3OXLa9V+9HmSGwQgQoImxv38tB3WeePUckSGuM0DKbBU2UGvwlvm5E2x/ID7xQ9Jy1ZW2WqzY5ex6LbRnSd9TILNbvFQO54t3WdrlIwLcBf4qkAt8ixLck5r62UnEVeWxeUKuSj1QahxuIMHvJmUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753266000; c=relaxed/simple; bh=K/LMjARgw8yRx0dnUdhIdHCetxgEKd4xEX13GnydfXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j902HiL48ZWdBAlDISSbYWReyXMyEjpIh6dKn1KtuA6gnTq/NCgs0CjHg0I0JrC/So8LztEfQMEDF5SV9dWsQ/cNBfK9dIqGl+cH0OpTvb3P6iVJ2voHA7pXDNAjZM78jcbLjbopDcyZypg5kS0Bu7dA29Jcv8ny/egdl+0khho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=cvVJ+cjO; arc=none smtp.client-ip=220.197.31.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="cvVJ+cjO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=ud CM1lsYiKDqT/YgXrbnqPpuwPrKh4p4pm/0FsOfkOQ=; b=cvVJ+cjO79ogm1pZIH FG4mYvRNpETiEHgDuyk/LeM4xumeFz9Vz4d3oyotark5XFrNNLErXOoS4Kmzh59+ +mfZy0k6E6j3fURxJDbXPvSUJEcWXHOP6na0O6o5ZnGeQ69GGUNUIoBLMvSWthWf hXcc0p4TZFImJ9s3HX/qe7roc= Received: from czl-ubuntu-pc.. (unknown []) by gzga-smtp-mtada-g1-2 (Coremail) with SMTP id _____wDXpNEAt4BoaJF8HA--.11729S4; Wed, 23 Jul 2025 18:18:41 +0800 (CST) From: Chi Zhiling To: akpm@linux-foundation.org, willy@infradead.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Chi Zhiling Subject: [RFC PATCH 2/3] mm/filemap: Avoid modifying iocb->ki_flags for AIO in filemap_get_pages() Date: Wed, 23 Jul 2025 18:18:24 +0800 Message-ID: <20250723101825.607184-3-chizhiling@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250723101825.607184-1-chizhiling@163.com> References: <20250723101825.607184-1-chizhiling@163.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 X-CM-TRANSID: _____wDXpNEAt4BoaJF8HA--.11729S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxZw17Cr17GFyDZw48WryxAFb_yoW5Gr1fpF WrGas5KayxXFy29rWfJasrua15WF18J3yayFy3Ka17Z3Z8tr95KF4SkFy8KF43AryrJF12 qF18tayUCFWjvrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jFOJnUUUUU= X-CM-SenderInfo: hfkl6xxlol0wi6rwjhhfrp/1tbiTwyTnWiArAz2oQAAsS Content-Type: text/plain; charset="utf-8" From: Chi Zhiling Setting IOCB_NOWAIT in filemap_get_pages() for AIO is only used to indicate not to block in the filemap_update_page(), with no other purpose. Moreover, in filemap_read(), IOCB_NOWAIT will be set again for AIO. Therefore, adding a parameter to the filemap_update_page function to explicitly indicate not to block serves the same purpose as indicating through iocb->ki_flags, thus avoiding modifications to iocb->ki_flags. This patch does not change the original logic and is preparation for the next patch. Signed-off-by: Chi Zhiling --- mm/filemap.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index af12d1cecc7d..350080f579ef 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2454,11 +2454,15 @@ static bool filemap_range_uptodate(struct address_s= pace *mapping, =20 static int filemap_update_page(struct kiocb *iocb, struct address_space *mapping, size_t count, - struct folio *folio, bool need_uptodate) + struct folio *folio, bool need_uptodate, + bool no_wait) { int error; + int flags =3D iocb->ki_flags; + if (no_wait) + flags |=3D IOCB_NOWAIT; =20 - if (iocb->ki_flags & IOCB_NOWAIT) { + if (flags & IOCB_NOWAIT) { if (!filemap_invalidate_trylock_shared(mapping)) return -EAGAIN; } else { @@ -2467,9 +2471,9 @@ static int filemap_update_page(struct kiocb *iocb, =20 if (!folio_trylock(folio)) { error =3D -EAGAIN; - if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_NOIO)) + if (flags & (IOCB_NOWAIT | IOCB_NOIO)) goto unlock_mapping; - if (!(iocb->ki_flags & IOCB_WAITQ)) { + if (!(flags & IOCB_WAITQ)) { filemap_invalidate_unlock_shared(mapping); /* * This is where we usually end up waiting for a @@ -2493,7 +2497,7 @@ static int filemap_update_page(struct kiocb *iocb, goto unlock; =20 error =3D -EAGAIN; - if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ)) + if (flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ)) goto unlock; =20 error =3D filemap_read_folio(iocb->ki_filp, mapping->a_ops->read_folio, @@ -2621,11 +2625,13 @@ static int filemap_get_pages(struct kiocb *iocb, si= ze_t count, goto err; } if (!folio_test_uptodate(folio)) { + bool no_wait =3D false; + if ((iocb->ki_flags & IOCB_WAITQ) && folio_batch_count(fbatch) > 1) - iocb->ki_flags |=3D IOCB_NOWAIT; + no_wait =3D true; err =3D filemap_update_page(iocb, mapping, count, folio, - need_uptodate); + need_uptodate, no_wait); if (err) goto err; } --=20 2.43.0 From nobody Mon Oct 6 08:31:25 2025 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 28F2D28AB11; Wed, 23 Jul 2025 10:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753265984; cv=none; b=SKV2MRajUl05FYkLH8ZEEhgQPTvehEMK2E3Lgd9DU5J+i06y1UVsBstuLZRqu4Ky/VSGuyU4W/KuDEq6/BAW9fCgMD6kJYB9+iOq4/sOGFdjA4p3ZAqT0Lp6hWMyTuupmolzpMYNgrkgzsbOjisbZMsILmM4D2iKvVqLhWCYEbY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753265984; c=relaxed/simple; bh=mVk6YAJNCEdJ6dCLMELI7wVK0LYKojOzCIfcxOpsa5Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MvZmptMYsi0w8Ruoeuzs+vZe3TQRwd2faUtkLQxZ2RRer0KtnZasOYa8Ttj4w2rR8f951oVjKthVWV3z8N8cXMSfLeax+MJwzNIStDIHkHkAQVrZxv2CEpv9qA59CHy+ssWwoq4rTD27ewYDYFRFWgwbMwt+rPm+CW9NIy2B4OA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=I3IAC7VJ; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="I3IAC7VJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=Gx RTtoCdCaL68C/uZpXKvMr8wgXODWBtugFbqWI2Ch4=; b=I3IAC7VJteG4IFIgIK BbY2o2VburamF74x7I3g/AUUKauYeZRSgA1ITpIJKT/1jkDJwa7u6b76QjzPe808 pgWZeBgeNKHLEH9W+8MPhKxSbN8iB4tItvW4DUuOCqGhXqP27j+1JUikTAf/nxUf bxW1lmxCaXuOpbk74m3hKLYg4= Received: from czl-ubuntu-pc.. (unknown []) by gzga-smtp-mtada-g1-2 (Coremail) with SMTP id _____wDXpNEAt4BoaJF8HA--.11729S5; Wed, 23 Jul 2025 18:18:41 +0800 (CST) From: Chi Zhiling To: akpm@linux-foundation.org, willy@infradead.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Chi Zhiling Subject: [RFC PATCH 3/3] mm/filemap: Skip non-uptodate folio when folios are available Date: Wed, 23 Jul 2025 18:18:25 +0800 Message-ID: <20250723101825.607184-4-chizhiling@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250723101825.607184-1-chizhiling@163.com> References: <20250723101825.607184-1-chizhiling@163.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 X-CM-TRANSID: _____wDXpNEAt4BoaJF8HA--.11729S5 X-Coremail-Antispam: 1Uf129KBjvJXoWrtF4xtrWUXF15CryUZFyxZrb_yoW8Jr4Upr WrKa4kKFZ7XFy5JFs7J3Z7XF1fWa97Aay5CF9xKa4UZFn8XF9IgF1ftFyUGa18JFWrKF4I qw1vyFyUXFWUXF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jdUUUUUUUU= X-CM-SenderInfo: hfkl6xxlol0wi6rwjhhfrp/xtbBgAWTnWiAsAucXwAAsb Content-Type: text/plain; charset="utf-8" From: Chi Zhiling This optimization primarily targets read operations that trigger multiple IOs, aiming to complete the copy from cache to user buffer as quickly as possible after the final IO completes. This patch achieves the goal by minimizing the number of folios left for the final copy loop. In filemap_get_pages(), when encountering a non-uptodate folio while the fbatch already contains folios, we skip waiting for the non-uptodate folio and proceed to copy the available folios. Signed-off-by: Chi Zhiling --- mm/filemap.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 350080f579ef..894584a5bff5 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2625,13 +2625,9 @@ static int filemap_get_pages(struct kiocb *iocb, siz= e_t count, goto err; } if (!folio_test_uptodate(folio)) { - bool no_wait =3D false; - - if ((iocb->ki_flags & IOCB_WAITQ) && - folio_batch_count(fbatch) > 1) - no_wait =3D true; err =3D filemap_update_page(iocb, mapping, count, folio, - need_uptodate, no_wait); + need_uptodate, + folio_batch_count(fbatch) > 1); if (err) goto err; } --=20 2.43.0