Message ID | 20250224081328.18090-1-raphaelsc@scylladb.com (mailing list archive) |
---|---|
State | New |
Headers | show
Return-Path: <owner-linux-mm@kvack.org> 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 962B4C021B3 for <linux-mm@archiver.kernel.org>; Mon, 24 Feb 2025 08:14:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 898856B007B; Mon, 24 Feb 2025 03:14:44 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 846576B0083; Mon, 24 Feb 2025 03:14:44 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 70DBD6B0085; Mon, 24 Feb 2025 03:14:44 -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 54D136B007B for <linux-mm@kvack.org>; Mon, 24 Feb 2025 03:14:44 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 08524160E36 for <linux-mm@kvack.org>; Mon, 24 Feb 2025 08:14:44 +0000 (UTC) X-FDA: 83154126888.12.FC58968 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf03.hostedemail.com (Postfix) with ESMTP id BDDA920003 for <linux-mm@kvack.org>; Mon, 24 Feb 2025 08:14:41 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=v7D1uLVH; spf=pass (imf03.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=raphaelsc@scylladb.com; dmarc=pass (policy=reject) header.from=scylladb.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740384881; 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-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=n59C1mxnlqsVZDv+OXEoyoWE/LCHOE1N8E2Z0O569dM=; b=zpQP3cRHqLBXxtNLUxPsnSWdn0mXBz2/VXJmHsXSeIg9AXT8CzL36soMeEqyXnKslZDrZ2 /z5Fz/TjJ4vZAV0axrfbaMDRSRtGw0FqP8/hXqVluhBG9Akd6yGXvxhkbA/2NOYA305zOP ZrXaRTpvFCdsb01BVjrT55/Poqoybiw= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=v7D1uLVH; spf=pass (imf03.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=raphaelsc@scylladb.com; dmarc=pass (policy=reject) header.from=scylladb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740384881; a=rsa-sha256; cv=none; b=tqgvcsMtKDlWxiYMyxZYApYMV1m8k/ZCzDu/gR5yn1LQUaUlSDr6ySUQD/HXbLoP1QmRt9 jGmHkbHLDDZxAH7zq1ipkqjc+3e/oRACvzuvItkEHHShQWwAL7kraT6yu/D/tZ6ZMxAL9L R6FnQnRj5Tr7Y4JOp+S8npiT0Sq0Vek= Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-220f4dd756eso80967345ad.3 for <linux-mm@kvack.org>; Mon, 24 Feb 2025 00:14:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=scylladb.com; s=google; t=1740384880; x=1740989680; 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=n59C1mxnlqsVZDv+OXEoyoWE/LCHOE1N8E2Z0O569dM=; b=v7D1uLVH147XKeyzNscdt93NxCVpGxbOd/ARE6qp6EeZVv2eqZ+2KKUGEztGXhzawL 9fMzc0U14srZoo+iKKABiYrUNQAE7uvYXjYBsEWuYFPLYJhD9ylshTjkmMmh7TZ5xJRB F8IIXmvsRbgVWfFNuvSMl8tIi6Pxt0EzEBMJCyH4Og0dcgRwFXabQZwYkKxBdN+oGu3H teUcgq9+V0DNCPiflJ2nv9cfZ8O20/DH2CQoFJibIp3h5G2ED1fWbRzUUpy+OBpXuueE /6GNLwMolVY7K4UlHX8EZzFTdjywU+W4w3fc1fspIn3vECKp/d33efRrhLfBseB3uAu2 lsUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740384880; x=1740989680; 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=n59C1mxnlqsVZDv+OXEoyoWE/LCHOE1N8E2Z0O569dM=; b=qXguUJgklGtu8qdB+kDg3TQQJMTFcEqMSlKc7WatcfThpy0sitQC+QzrJIfwaw1MSW gFMDseeb/mxYXrW2jdd8Cj45BUUAMmktMbtaPSAich5jV3a/uc+LbKYfWgQBIm0oDSyv zg6sAz9Vhsu6h8Nzw4/6yvXqhD5+cwpT7ihchDj8ErfNsFNJpAX/lh6rMvLwYkD23bbu qM6rWaLrHLIVF0GUkhv6JEWHVNufyt4jYtjKrK4w34La2OUJDcw8cKRdp04zqQvNh0z/ 3MunVNsZsj+rApKn2MWU4YAUC6xWaChj6m9Awf1A5/n/rPajNoUwRCTiHuqpbVxyaFgE arIw== X-Forwarded-Encrypted: i=1; AJvYcCVEimrS7Ua2OVvXmOSguSa//84NQgRhUy1jlmAIP2X/qXZHeeBJKhSPUsH2eB3eibyjygxJ0CD1Eg==@kvack.org X-Gm-Message-State: AOJu0YwyCpkG9SzYq3uwKI6vJj969Zpen54y8fVLMq+FRL5jModtUymL rdGluFUYkbomZtadKMTgFSwEOB3yCxXrhDqWhR0ujoBL8di+/cAIY2PxpHxcpGCBzdylkI5aI4f Yx6Yd+OKggzrc8VTtyDHVGO7NuhduBhoxVYohLeVV3U4IXGT2tNTNAkMY182wIuPcGOhUF4UWqc YDdmGnE0ZdPlz3wE5MfcLJtqcjheZr/9vVJEVE8xMh3GOw+MjAkGtzUoDQZoHFUb4vPFwYl9OSG uMbT0RAQteJHKQWmHSrTC43ulFDxlv7Miy22e2lS6cnvgXnpZAGt3AbRzjaha3L2aSoEmgRdoCc 3nML/9v//KgHt8/Vt2E= X-Gm-Gg: ASbGncuz3WxILUhdJJs8UcjItGyzZL5CH6l0QpJMZdohiRu/JXBHwyBDBr6/9soaYfo jEf678Uko9M4ECp6uTuNDDzqhAu9XS+xwtCyUM1Xm/d8icb066eYfdqHddEJuUsf8NBWO5/rGjH RuDwzLvsQCGAo8WHlW6abice0jwYWesGU8yT9h/+zqJaoNkNt8Foo4QUf9bSnzBXK35IiF3PgnF avx6/lZ0fH+yh+7n5JAMVZAHTpjLrEu6WBFXv8jcEoGl9/PzuHWxbE0m8hT7r7H1KemwCqIrA2K qjm35Je+xulxwtrhF64pkmD7v00xmw== X-Google-Smtp-Source: AGHT+IGZML+QeMBAJSjHG5iq0A0nDtnil2LVDOPQzKcK170nIopsu8yPUqb4/J1ur3vn2QrKyGEe6w== X-Received: by 2002:a05:6a20:7f85:b0:1ee:d6ff:5acd with SMTP id adf61e73a8af0-1eef3c568e9mr25167734637.6.1740384880406; Mon, 24 Feb 2025 00:14:40 -0800 (PST) Received: from localhost.localdomain ([2a09:bac5:7a2:24be::3a9:82]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ae1ee4febb2sm10280324a12.51.2025.02.24.00.14.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:14:39 -0800 (PST) From: "Raphael S. Carvalho" <raphaelsc@scylladb.com> To: linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Cc: djwong@kernel.org, Dave Chinner <david@fromorbit.com>, hch@lst.de, willy@infradead.org, "Raphael S. Carvalho" <raphaelsc@scylladb.com> Subject: [PATCH v2] mm: Fix error handling in __filemap_get_folio() with FGP_NOWAIT Date: Mon, 24 Feb 2025 05:13:28 -0300 Message-ID: <20250224081328.18090-1-raphaelsc@scylladb.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: scylladb,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: scylla,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: BDDA920003 X-Stat-Signature: ds1cr6y3wufx1g9fij446gbxdaoqsxqc X-HE-Tag: 1740384881-579468 X-HE-Meta: U2FsdGVkX185IR8cGK6v2rAYGHhy2L3qQW4TMfeilc/GxnPX9VuPeixF08rqvo12Mad4aBsAJl211/4FeSD1ftAQKNstashjhlaxtIw28A+swnAN/UuyLEXct5OSYqKtGM3JgLqL5a5rqIwvxe0Zc7yRYc+Y3LezkXXtUXMycTUk5A74ZU2kQCkbISkwN53mv2IeyDH9UbhIWtGLVwg71JRUZ0BKYkR54PLkDuRtNPWc6N7lQtOEUq77alP6QV8kBoAFZfbEcZEuQvKtE7RY1POCsm5POqujp4Uf+EVJRibqDeMGPWEKdoQAd9E7Meg0rotqGR0kNW8zUZNB9MHA05vLd3HRu+DHkPUJjKH+L2eYdTSIhReenkVI60O0XyNom4daVVpuI1yfXemGU2XZrYTE9IXoTlGiYQ54UPzqiTWI3ao67kkg2V/6i/gflqrcBocYIVkbtL+z+nGSK0gktDulnjqVRqOJ21ytg+gIvRFNO/ObaIILXizQHztIBZRP9fYpWm8BudavBOrdneR6O/DDyAsBm8rBQL3IwvNlyg4J8IbcoXRdsJzKiNr5CEjSqAWzvB34hhWtGWb13vY9/tkwdO+aM4OHUvqdggEP1Cn7+gAFfHWZ72tN4UKWJVdf9ryje2lh9QvrnnE9WA53dHbviAyuZkMMl+mhJa/317QUP16t1axM1vRvSUYspEcfFbu2ewrvc0jZRz9EIoRrxOnulj2eJo/zMBhdlZ2dLXaP7J6+D4k+/h934aAyuRvkqzZgxOR2eVKn2vdRypOUBdUwp3Khp2iebqV1/4Kn9tbi65baoq8Uu/OebSlUcdrwX57k5vvS+kjDKYbduONCV/B7Qz3cdgVgp88/AzvnBmwtWzrxwdNGgJEDQuj5+ESRBTYcYc2nUHPJBMxudIumxPbdIqoMpyzAtJU1NtyNie3nWAPOrdz0LHNHKaOk8BTBqDijA4DTYwGYSYU633h ewYcLFQ5 Wl7wC3kuHARou/7B+m/fuh90Jg+dNH9inVYgRcZ95waO7cu/1ZsmPgPATKm50Emg9ZxED76UqAuqVjpoQONtJzs5DbJOsEeyUx6d6QWNHfzqEh4CmbAs19khy8LSTppOuGGCoRQeMp9JX00frDSnXOl3qI0RN3nXAxaqpVgwjXWMCRH0PU3xt9b5pc5ijsG1i0zzp/jkxS+9zuibzMU/ogmJeVhfuOYmUjDTHlwnJQeYApNn4oEFzyLnzP/REQIAWjBGLc0Ywd8OmhhtJxQfu1lh5SfafEvOS0w5xBFYiW9QwCyOpnW3NTGiK4mVZTL5kO6Zmup0ySsEYHAimhhcRrlvgwd1eYhjXtDl6P/BBrQOF8DMTQjL1NTtlUT6bV3B9c3TFb6sMMY7S5UJcXhC89tKqRktJIqdtEsQ4gx07hh15K0CYJv0vIccIi9iWFk2BKvPTz2t4i8j5vQRF2hYefLUqig== 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: <linux-mm.kvack.org> List-Subscribe: <mailto:majordomo@kvack.org> List-Unsubscribe: <mailto:majordomo@kvack.org> |
Series |
[v2] mm: Fix error handling in __filemap_get_folio() with FGP_NOWAIT
|
expand
|
diff --git a/mm/filemap.c b/mm/filemap.c index 804d7365680c..d7646e73f481 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1986,8 +1986,12 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, if (err == -EEXIST) goto repeat; - if (err) + if (err) { + /* Prevents -ENOMEM from escaping to user space with FGP_NOWAIT */ + if ((fgp_flags & FGP_NOWAIT) && err == -ENOMEM) + err = -EAGAIN; return ERR_PTR(err); + } /* * filemap_add_folio locks the page, and for mmap * we expect an unlocked page.
original report: https://lore.kernel.org/all/CAKhLTr1UL3ePTpYjXOx2AJfNk8Ku2EdcEfu+CH1sf3Asr=B-Dw@mail.gmail.com/T/ When doing buffered writes with FGP_NOWAIT, under memory pressure, the system returned ENOMEM despite there being plenty of available memory, to be reclaimed from page cache. The user space used io_uring interface, which in turn submits I/O with FGP_NOWAIT (the fast path). retsnoop pointed to iomap_get_folio: 00:34:16.180612 -> 00:34:16.180651 TID/PID 253786/253721 (reactor-1/combined_tests): entry_SYSCALL_64_after_hwframe+0x76 do_syscall_64+0x82 __do_sys_io_uring_enter+0x265 io_submit_sqes+0x209 io_issue_sqe+0x5b io_write+0xdd xfs_file_buffered_write+0x84 iomap_file_buffered_write+0x1a6 32us [-ENOMEM] iomap_write_begin+0x408 iter=&{.inode=0xffff8c67aa031138,.len=4096,.flags=33,.iomap={.addr=0xffffffffffffffff,.length=4096,.type=1,.flags=3,.bdev=0x… pos=0 len=4096 foliop=0xffffb32c296b7b80 ! 4us [-ENOMEM] iomap_get_folio iter=&{.inode=0xffff8c67aa031138,.len=4096,.flags=33,.iomap={.addr=0xffffffffffffffff,.length=4096,.type=1,.flags=3,.bdev=0x… pos=0 len=4096 This is likely a regression caused by 66dabbb65d67 ("mm: return an ERR_PTR from __filemap_get_folio"), which moved error handling from io_map_get_folio() to __filemap_get_folio(), but broke FGP_NOWAIT handling, so ENOMEM is being escaped to user space. Had it correctly returned -EAGAIN with NOWAIT, either io_uring or user space itself would be able to retry the request. It's not enough to patch io_uring since the iomap interface is the one responsible for it, and pwritev2(RWF_NOWAIT) and AIO interfaces must return the proper error too. The patch was tested with scylladb test suite (its original reproducer), and the tests all pass now when memory is pressured. Fixes: 66dabbb65d67 ("mm: return an ERR_PTR from __filemap_get_folio") Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com> --- mm/filemap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)