From patchwork Thu Mar 6 23:00:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nhat Pham X-Patchwork-Id: 14005469 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01399C282EC for ; Thu, 6 Mar 2025 23:00:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C64E9280006; Thu, 6 Mar 2025 18:00:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C1427280003; Thu, 6 Mar 2025 18:00:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ADC4F280006; Thu, 6 Mar 2025 18:00:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 9082E280003 for ; Thu, 6 Mar 2025 18:00:16 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 049BB1C86E5 for ; Thu, 6 Mar 2025 23:00:18 +0000 (UTC) X-FDA: 83192646558.26.022FA0C Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) by imf04.hostedemail.com (Postfix) with ESMTP id 3664D40004 for ; Thu, 6 Mar 2025 23:00:17 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="UXEYA/9l"; spf=pass (imf04.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.128.170 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741302017; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=geAOgzeebd8mAMWoJQZj/D/Fwtsvs8mA1xjntUbssZw=; b=icvdSqdaVNKz/mAICQEMCgj5qNMOSD3a972EwzRdU6qqnZcW1yb0fqZlHFXfNAnlRVmOEf fDimtPglejkRU4lzpjShFRRCrDLXxzry+7xPDUALYz/BgbrwYfavSt7ioi/9ybSLb/7kwi nzNPh8jKEGAOSs2Eauy2Fyuo0mlw1zI= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="UXEYA/9l"; spf=pass (imf04.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.128.170 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741302017; a=rsa-sha256; cv=none; b=J1wjlX9JdFS6V5n0QS17IpYrSUTb+Q7JG4s/m5guB3joRyHZAh8h6BpKNFrcTLGmkHCUbQ Xba/ws7h/ZUsr4gxbdLYcVixThkMO3mPP5MKD5DCY7GmT2qx/MsREGD1W5cz45eAXIr8RD LI/nhT1fMEYxf1vp45ovOtOzUy4K5+s= Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-6feafc707d3so11958727b3.1 for ; Thu, 06 Mar 2025 15:00:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741302016; x=1741906816; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=geAOgzeebd8mAMWoJQZj/D/Fwtsvs8mA1xjntUbssZw=; b=UXEYA/9lKzx7JFzHx59V38Rqr05xrptyrjpr4bpOpwAnlJWJFIq3cjhqmHpXx3KEY9 8WaxdWSXOqCGvQLzDVX33VhJG9HgBxz49fdZ25DhuS9rNFFITxSkp2I/aijgJv4icZdb J9JOIxGwSbyWluNDPfj8Qo84bggqrH+7cstw75YXRIyMnNjqoCG/U+eiRsuQ6V5sT1Hc Sp8RCY/6NSpKUjNytSXdAnkYh05EIa8kvRa3f8fFedpsvkq7j5qUNuuSeOk9WdEN+KTK +Bd2InMhM0NKS0pSVfAcYYPQJtxBtcClMR+9MNnMHvgUl+aI+uXgVu9Z7XuhGXTmrVHn u+pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741302016; x=1741906816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=geAOgzeebd8mAMWoJQZj/D/Fwtsvs8mA1xjntUbssZw=; b=poFuQk9OWjwCX41ank9HlJQEsBLLB5Iq07/QwyJ376ut8KgadUZmpSkCazIpkDgjCy +WOqG9Qs6P48vHoHnzay8ZAXXgw/uC8HAYhh4j6j1fHKiLnwSMewq3DIlYV1tPdTY5/P zo4F+KG+8YB+dSE41lAH/vv7/4y3y7HURxOH58Dg3/jhCmFcGyjjrxVTnA/k2z1kVoSk n2dOftZ9eQ7RVOiZGoKMmInenLHFCGhuhJd2FKDhn//2GB4AxkrYUVbVp0BdaXaepJ1W IQmwgZzb3p9byRquURPdEbLL5JihGbNwq9nn0kUzMwebSDNueRyilNuuuF/7Ax15H+5S IBzQ== X-Forwarded-Encrypted: i=1; AJvYcCVOaOW4dHFcFOTU/ndIOleuCdgHeadnXQmZA01R2vdxqVhvJFUFzk8jJmU5Vy58iN/nZoFI8tmxRw==@kvack.org X-Gm-Message-State: AOJu0Yw/RGavAmgFXRv+ohFoFz+GCdyqJI5uRiDJArH1a3ByhNftD4pq voMK86QGv4AD9aI6q1IEUmaK7EhnBxfwaLwmBQa1DmpjITVt4miS X-Gm-Gg: ASbGncsQcSMsYGRahs08zxwRQTrSqfgldNLr8qcqKjGIsOhKWXenOIEDXTEhDgA+J/n B8tCpo4qIUFPUNOmRU5USgxtiIDVLK/uPAo7aGHE0qErArsX8GmiXIxh8JUCHeS3ZVjxTaZ00IC SaHw0zEW+cfNupKG+ZoMbBdbH4e34B4NnC8+VqvnMrgQauJRVhiIoE1nr4al7bgPKf/lgFrC0Fa kZi26GMSfG513xeZuqlbk8Ypwy6JxPyR7+yt8hG0ebxaCsxrCotdImy+R16IRGA0mUvP7UVG09W FIgFeeUUx5bhKvceg3PNIYpGzCJXOTOvhBaX X-Google-Smtp-Source: AGHT+IGgG/4b/FIa0kd9TWIEiHSPrmyea0X37UqteSiydOz0UfID+3itnlJ73noe5bd9kiIP6s7VYA== X-Received: by 2002:a05:690c:4c09:b0:6fb:ae6b:a340 with SMTP id 00721157ae682-6febf3b42c1mr17124967b3.30.1741302016225; Thu, 06 Mar 2025 15:00:16 -0800 (PST) Received: from localhost ([2a03:2880:25ff:72::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6feb2c2e85dsm4688647b3.93.2025.03.06.15.00.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Mar 2025 15:00:15 -0800 (PST) From: Nhat Pham To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, yosryahmed@google.com, yosry.ahmed@linux.dev, chengming.zhou@linux.dev, linux-mm@kvack.org, kernel-team@meta.com, linux-kernel@vger.kernel.org Subject: [PATCH] page_io: return proper error codes for swap_read_folio_zeromap() Date: Thu, 6 Mar 2025 15:00:15 -0800 Message-ID: <20250306230015.1456794-1-nphamcs@gmail.com> X-Mailer: git-send-email 2.43.5 MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: zxdt6sg9fw3jk6ffm6w1cg3bxh1sptq6 X-Rspamd-Queue-Id: 3664D40004 X-Rspamd-Server: rspam07 X-HE-Tag: 1741302017-907610 X-HE-Meta: U2FsdGVkX18zZwa+SkT2l11O4Zg7BR5aFC9eCbUNZppQSrzuU7pi8g4VFbkWFgUCLS1U+uHCeBHRayK1xc15nSWzhI5hJphDknfsDcG4VdoqrhfDyIv/SwUgNc2UNSE7xf/0Csjc1JXbm8ltixQcqKPOfgic/bSUKQMRR5BroOMmxaFm1qlRgXAzCxBM7VWVeLTKZejJJmUkdqpxb6SXYsW6vlKITyHZL8Funk3a5qEryHXV5CwbcDQ/cyPrgoDp7et1CUD7j1mkCxvtOixMhUqCZ8uCbDyCWckmshKuCeuAjB01K6qSurCJyt5hzGTICh70nvEi0ESlseH0AIt2v6f/XzpIvcjUmnfg76sYtdP6+Bsj5dbfeckDcNxs8BLXy/6mYa1wO2ADE3WOOI8aCuXVGKd4wTE7nm8yKLesq7lH/K5VnoEVdS0/Fn4DWnWfgxHNqBFHMLDy3sSf55BKXbqBrQpHg0cNhjXMqHIv9AQdoVIgm3P3v4mCAyJvTN2AiVa0b6KUO6JxXNwfZBpKnL4Q0LMFXAGdSspCfHZEjw9jYD7Uj2MwW6v90vH2yEtOlNTdgyvZxd+qPnxdTzBUVlHI4cj2vRmnN89LdaNMx1eRwrryjGL9WsV9Tzr9n8Rwf19McsGtOthy+G1CA+ghO3GAZPcLlUCv4Kf27sgxzO9/tI1nq2ocY9CXc3v0S91Y15oEquR3QKgU6/ci87knWs+w24FBeUjGSA46UQ/THI1Zl1wgWxm+O9XrD7Bh0mwB7M42bCB0VIc85FdhEmZfkw4bNLGCZO12+uJtSao7xd9mSgR6j7RM3kX+2sbA5XeyPJiWlwXNx5zhibJWPX4icGyoeQ33uqOWV7Fm4AHQ97x+FOVENT1GaRRVDPbhlHc2T0py1Px/6bqHOQKc/9KUmZ7HqBu0PitSbY0hPqkCDtJB34lVDhc7kSSL1aNIHrdfWEbDdAcwygLErpgGEjz xOK+wKAi jbLeN7JQeLWxMm24ak0SxiWu6IhYxSu7JAVRH4WxD+cb3nT6ug/fPw3Z5ibGxQkTkIDQM4DYtDHX8ecniGnSDSEylwWpx5+QkP4/rAfiILOcBKofxInyiDbaajN82SfI3xqfA4y4Gs+njaQBgJPJ2BQ5wjPcMuT3DGTudbQesj7bH7XZYcmFzJiqQN/A/GeDEUHCPa9l5ggVDFc0zW6e7KeBVG9BHKnszPNanA2F/nGCjca3N+jaz9alrJJiZM6MzSFExSLjAmSDXp59zdNvuVkkArwr2OSunWCgymWHW+qMycDg5T43IMEUyzTDyad0mKjFPcrPKjpkd3wsonwGN6504bq/UECVDiD7vhC9bVv4qWjl1N2TY9vxoWjRx54VoDjdDjS9KoK4JdbGy24md75WWUko5th+wtyWZ6pYjQWxMMtGwPEF8Hr7XfGm6F4NCl0qksCCfwnAwBBdzncu+XnAhCZEW/y/3f4MxTK8Hm4lSQCO4PTeln6lzByRqtRdCC2zIue70+d/1EsoQlM+FMo9c6cJXw+HZlYT++h8/rFUy4rc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Similar to zswap_load(), also return proper error codes for swap_read_folio_zeromap(): * 0 on success. The folio is unlocked and marked up-to-date. * -ENOENT, if the folio is entirely not zeromapped. * -EINVAL (with the follio unlocked but not marked to date), if the folio is partially zeromapped. This is not supported, and will SIGBUS the faulting process. This patch is purely a clean-up, and should not have any behavioral change. It is based on (and should be applied on top of) [1]. [1]: https://lore.kernel.org/linux-mm/20250306205011.784787-1-nphamcs@gmail.com/ Suggested-by: Yosry Ahmed Suggested-by: Johannes Weiner Signed-off-by: Nhat Pham Reviewed-by: Yosry Ahmed Acked-by: Johannes Weiner Reviewed-by: Chengming Zhou --- mm/page_io.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/mm/page_io.c b/mm/page_io.c index 4bce19df557b..48ed1e810392 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -511,7 +511,23 @@ static void sio_read_complete(struct kiocb *iocb, long ret) mempool_free(sio, sio_pool); } -static bool swap_read_folio_zeromap(struct folio *folio) +/** + * swap_read_folio_zeromap - check if the folio was zeromapped, and if so, + * zero-fill it. + * @folio: the folio. + * + * Return: 0 on success, with the folio zero-filled, unlocked, and marked + * up-to-date, or one of the following error codes: + * + * -ENOENT: the folio is entirely not zeromapped. The folio remains locked. + * + * -EINVAL: some of the subpages in the folio are zeromaped, but not all of + * them. This is an error because we don't currently support a large folio + * that is partially in the zeromap. The folio is unlocked, but NOT marked + * up-to-date, so that an IO error is emitted (e.g. do_swap_page() will + * sigbus). + */ +static int swap_read_folio_zeromap(struct folio *folio) { int nr_pages = folio_nr_pages(folio); struct obj_cgroup *objcg; @@ -519,15 +535,17 @@ static bool swap_read_folio_zeromap(struct folio *folio) /* * Swapping in a large folio that is partially in the zeromap is not - * currently handled. Return true without marking the folio uptodate so + * currently handled. Return -EINVAL without marking the folio uptodate so * that an IO error is emitted (e.g. do_swap_page() will sigbus). */ if (WARN_ON_ONCE(swap_zeromap_batch(folio->swap, nr_pages, - &is_zeromap) != nr_pages)) - return true; + &is_zeromap) != nr_pages)) { + folio_unlock(folio); + return -EINVAL; + } if (!is_zeromap) - return false; + return -ENOENT; objcg = get_obj_cgroup_from_folio(folio); count_vm_events(SWPIN_ZERO, nr_pages); @@ -538,7 +556,8 @@ static bool swap_read_folio_zeromap(struct folio *folio) folio_zero_range(folio, 0, folio_size(folio)); folio_mark_uptodate(folio); - return true; + folio_unlock(folio); + return 0; } static void swap_read_folio_fs(struct folio *folio, struct swap_iocb **plug) @@ -635,10 +654,8 @@ void swap_read_folio(struct folio *folio, struct swap_iocb **plug) } delayacct_swapin_start(); - if (swap_read_folio_zeromap(folio)) { - folio_unlock(folio); + if (swap_read_folio_zeromap(folio) != -ENOENT) goto finish; - } if (zswap_load(folio) != -ENOENT) goto finish;