From patchwork Mon Feb 24 14:37:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Raphael S. Carvalho" X-Patchwork-Id: 13988291 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 F40FDC021BB for ; Mon, 24 Feb 2025 14:38:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 941ED6B009D; Mon, 24 Feb 2025 09:38:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F2286B009E; Mon, 24 Feb 2025 09:38:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7B9D76B009F; Mon, 24 Feb 2025 09:38:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 5D13F6B009D for ; Mon, 24 Feb 2025 09:38:29 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 7AE68C171A for ; Mon, 24 Feb 2025 14:37:40 +0000 (UTC) X-FDA: 83155091880.18.267AE49 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf09.hostedemail.com (Postfix) with ESMTP id 331B3140013 for ; Mon, 24 Feb 2025 14:37:37 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=E3LN97iY; spf=pass (imf09.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.214.171 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=1740407858; 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=tr5NrMy0t1nSuRnqeN8ZOfvTg64bXP6rdk8GuFGDbik=; b=ybtRVcaStGlFCwtMJABQRkq7Xs+uZxg3akusjN7rMG/t2sPWDeEMJjItDB7uB4CcVpwu3W Lp+k0/SdbrAt6WWDxCVgD4O2Dqly8YmG6ryhW54W/sD83GCDr0tvspbj/a7eh6n/Adx33P 46XmfIeRM1mddIv1072EwjAXW3g/MZE= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=E3LN97iY; spf=pass (imf09.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.214.171 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=1740407858; a=rsa-sha256; cv=none; b=cd4nKbRVAWSfd+TXYjOSboimozKTwyF+mLjLPniByRiQmA5kauCFWs35YUtTq0PiWezdzM CUVHD8CkmRZAu/ll2HoV4d1GRfqSCBIhYCHBB3pi/NDzyPpWjZhTByGbO4yvMH6D66DgmG 4A/EfWKuRHkou58/PsfF9ah3XUT4nuk= Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-21c2f1b610dso130931195ad.0 for ; Mon, 24 Feb 2025 06:37:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=scylladb.com; s=google; t=1740407857; x=1741012657; 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=tr5NrMy0t1nSuRnqeN8ZOfvTg64bXP6rdk8GuFGDbik=; b=E3LN97iYrqv0Czjej/0Wdly02GmfUH5RSpXlMU6waOb7lqEgK5pwol80EWQFZB9KJH 8BDr05za1rkWgdvulUk3NChZiBuZFWnlZjt3YJqKkBtAiq+EM9GhzQTZ61BDycwcvnH+ WAV+lG9cllZ+1sUn3jXN0shTsoeC2I8nFlEgGuigUBQLOd5wIL4aMXBbWwmfqsfkhHgb 29BrFInnPyq/1mkZap+ScZ1a9D9QHkV2k8jDoEWp8Hi0laadSYhAfRpoM0uCCsguxlVT rZPlQOqH38Lv42AtnS76uIZwHT9sC2TyUtrJY7q+mV6xumYMkB+9g59qCEpSAsE5i6lD c1Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740407857; x=1741012657; 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=tr5NrMy0t1nSuRnqeN8ZOfvTg64bXP6rdk8GuFGDbik=; b=gEv6xt1TwMSuUXvjiJupovWHwTN6K8A2nitL+g5XpoRna9ZU5uzh/KXu9mXvrRVmG/ Ivj9RYiGVoGKFPJODBVBLfxKxVi7SQBqyl0SOJ6ISz2lYauzk2qi/OHQ8CHLRba4Mqdx +Qpi/haOrHM0fAg2/Kc3NWPj+oj3bBNZQS4YGg+Ly8lj2oU5RGvXJmQ3LZXRKOPoCypQ gO2OLHEaVHfAeNe9s2n7aiHR4o4MlKFeEMOhZxvcJE3H1LwUTyhqNtvosh686LwGAVoN kXj6bX8jm0syFmCqtl+dcPTaH1nmQDd5ITV/eEMAKZ5facIhcsYRL5c4Y8Kpej62bbOE 397Q== X-Forwarded-Encrypted: i=1; AJvYcCV8LswdzTf7YOeKn15KUZr1fkMZUk4OdayybdfQVmRnLRaV8IrRP8iqyubMyxKU8zwVuQi4K+cAng==@kvack.org X-Gm-Message-State: AOJu0YxAVLSEoRQFcCXqykiWIVQto9k4M905P8XGjZ6yoPWTv5+wS9S/ Am14T2K85dCxGrYVwS0LInltOolQT9Y6JrIYy0r3c1+Ufmfv0IjPjpxHQD+HDLuVDaMAsWe9IXD Qp498UARjIbPshVC7nbkSbIvfCcA9mY1XL0WeesYRfX0XgfaiM75c/daL2Q+mq1IgP3QG1S3TOg he5uPyQPHw/2yg0S05yKGBzSknlcUs0NQZPnEd26IHkYlDTFSWH1Kqko0HgIiSDekbxkxxilNhM +fOKJgqNMsf3ASyJE0Sxfvyd8L/V97TPEksqYdFSCe0jchJqz40tR+kvqNUNQpsI9vrFfmnidmz M39xlk88sGtRy0NCoxM= X-Gm-Gg: ASbGncueWoaohiYg1m7GE+aRb/oflzBGKNsN04BSBOblwswnNZqmPvMfZq9MGfOb3gk wM7KPlXjd3n1ZNzb21fqIl/k1ASWO533KuOSXcTzNP5Qk34XtZcdh1XslIdW6ooEREitVPQu3+1 rXKMk/EjBDdYbZ4tdEn8dW7lbUsSLGMtJSjI8AJm6tfXDN51vqnSm9K5QCnFRXeSLAsUI6SrAdv 8AZ3o/SfGUC3WSM+KMLocwAn7nZvm0DtK3EFFNPFnAhEyIMpWg9PTSb/Hkqhl0vT3QplWmts8ro naqavUzuzaGuvWdTHfUdEFhAzPw= X-Google-Smtp-Source: AGHT+IFpy3+E5cMzJqqit+IUZQ9CCf4tM5IGjll5j8aYvpZK6kzjNSVYR9yVXPP52A1Zj8pouSbmXQ== X-Received: by 2002:a05:6a00:4b4f:b0:732:622f:ec39 with SMTP id d2e1a72fcca58-73426c7c77cmr19802356b3a.1.1740407856561; Mon, 24 Feb 2025 06:37:36 -0800 (PST) Received: from localhost.localdomain ([2a09:bac5:7a2:878::d8:ed]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-732575e055dsm19294949b3a.68.2025.02.24.06.37.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 06:37:36 -0800 (PST) From: "Raphael S. Carvalho" 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 , hch@lst.de, willy@infradead.org, "Raphael S. Carvalho" Subject: [PATCH v3] mm: Fix error handling in __filemap_get_folio() with FGP_NOWAIT Date: Mon, 24 Feb 2025 11:37:00 -0300 Message-ID: <20250224143700.23035-1-raphaelsc@scylladb.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 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-Queue-Id: 331B3140013 X-Stat-Signature: jdncuzdw5xwgijfhghtm4dh668idcnbf X-Rspamd-Server: rspam03 X-HE-Tag: 1740407857-709729 X-HE-Meta: U2FsdGVkX18ZdC119i2CR5TY7wF+pQGwwhPfMVxuiwAF6g1rMXA8jbO4VWEjj0afKaCETbCXXr1KJ0L2zjcEme6dBA8TOxhlwbDqBTPyqDNGpbqq87n01kB/7pvj/ApxyJ0eI7rSd0iWdVs10G91QZi4Oe8LyNutQ3shjH50HCWMSfv+tndwe3LtBVNZtAB+gXW0WlDd5lMqw/ItcPAIZ667RFZlVkSQYpe3A9pNO44SvLQUewNNLhVbi9wjuGe9x/K+hxWAfnixXLCNGvV/aOQ5+GyxWMrySq2iDVP/nc5qYaSzTEQsPmsLjl4RSO6qjrsSeq+rID5MWPZTflQwG7s1Ma7txsUkL01J9kLP9vL/ne5Q6bLM8b0PjvkvxkrPiU1fyjpc9Y76ADHj1Nb2AEyO2+h9VJ7F6wdXCFNh958cqHbwiTgJLvREnF5Owfig+gI0iKsCPfI/FG5WiUfNDWl4ptXuF8PpKmfSoVakSs6Li37PzvTd1ayi+J/WYF3qAhpMkQwSwpGluSWU0qiprfavwIklGg0YEyC3crO2dYBEqzYzMIBRDdviXhsmmvu0h8q8EDaD+2iTvrcVyVA7ukbUUJmSWkpCATr47/JkTIPdRaWGiNrW1Fy0ixRfT0SGeiAC2n7YApUjtxnWYyckTOl0sr5KeYXl+TFPpi5oq8w37Dl+V4myP+Hb1e9IJw+dIuM2jUmeZrkU1lmuoLJ5zJmzroFe+qXYVoOnKRu9jMBCoPrcJVOXdpAr2YfrTtZJo4rmJfolPZNTdwovSkhVcVoefWxLrCG6Oiavd17pYPOVO95VU/P9iEZB4d+ismHe4pDHF2uybOf1UJ4jStZUVe4udUlFaKgjLpJazDWt83Vg6CiQoKZd3BQHxn5RV3zEb3ynWaMKcR8CFz9B7jUtOUJUuETmBz+iDz7ePoFvFfXdeW1rzGms15fGYpteXjwkUNwja6dcBN2qScA0/36 zZXgpoN1 QR0cGeg8qQLcRPgj33aInjMjVyyo8S5r41ISwQ9lVZMB1ZVPpDnEI95dcKlFKi7G0QvBYkskDWOs/djFVsFaDaoP8D6gZcbuPD6SaraUF9lSCoUBCT+SAeBCfMEJLZ8JtgHa4fWH5KvPAKMhzRBtBu73jEoQrlNSCPXA81DYBtCHk5bnvdk+Fi0u73uN0qBZNiCF1NaMoijpYYHab+F12QCk+TCV4+mEJP+eX1CofZbB8PFO50LFnUExvLmmG92A6Lh4tz8j020QVIcnppqMQpEpR42ZcF1el0LAhQfjVJVE13BXyp6g7v+Q70aDfasjdNptAP7uNXAwryeMLD/YIITOaiUdhphlJZ3m1bTXqPcQKPkLCQlI1/H0ZGJMHD33SX334CxZEwsLKZlQ21geatBWHeuXeIeV6Ffp7C0TK/wRsjgrEJH+/c66jhl+wV/AqgrzaUXwEffXD86R6MNmz8GI3Ig== 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: 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 Reviewed-by: Christoph Hellwig --- v3: make comment more descriptive as per hch's suggestion. --- mm/filemap.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mm/filemap.c b/mm/filemap.c index 804d7365680c..3e75dced0fd9 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1986,8 +1986,19 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, if (err == -EEXIST) goto repeat; - if (err) + if (err) { + /* + * When NOWAIT I/O fails to allocate folios this could + * be due to a nonblocking memory allocation and not + * because the system actually is out of memory. + * Return -EAGAIN so that there caller retries in a + * blocking fashion instead of propagating -ENOMEM + * to the application. + */ + 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.