Message ID | 20250223235719.66576-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 2E433C021B2 for <linux-mm@archiver.kernel.org>; Sun, 23 Feb 2025 23:57:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5CAD56B007B; Sun, 23 Feb 2025 18:57:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 57AAD6B0083; Sun, 23 Feb 2025 18:57:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 441E76B0085; Sun, 23 Feb 2025 18:57:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 26A086B007B for <linux-mm@kvack.org>; Sun, 23 Feb 2025 18:57:57 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id AE4921604D1 for <linux-mm@kvack.org>; Sun, 23 Feb 2025 23:57:56 +0000 (UTC) X-FDA: 83152874952.11.AE4BDB5 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by imf28.hostedemail.com (Postfix) with ESMTP id 6C583C0002 for <linux-mm@kvack.org>; Sun, 23 Feb 2025 23:57:54 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=BdkCj7am; spf=pass (imf28.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.216.41 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=1740355074; a=rsa-sha256; cv=none; b=CM+HHb2DLJvmx5BtJMikRCUo/HhOVT2nVux2LeJdFfcvrsCvwLQl0CaHJ6ISgkToVMtUQg a2kggoADItaCZ3PwI02NdoJre+juYowSRdsuiDqX/uScBY3YposLPtJ8kmPJL2dn0XxnCh snuoEXcq+0VeAyoEdUIUItC9Kk+ylFw= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=scylladb.com header.s=google header.b=BdkCj7am; spf=pass (imf28.hostedemail.com: domain of raphaelsc@scylladb.com designates 209.85.216.41 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=1740355074; 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=sE2GEpXJe9EB8mr89rPCKxGhWxzC9G93uMNlCaajPCo=; b=8cnIZigHeBeyCzJHseN05ssAsr5yZJ/JEXdjn1ivkaqk+18YAGKaS/IjutUsaFjcSOXq83 eDdjts9KoVZ2MKfXBxa15LNlbHoSZTn0uep7ddFV+ZDV94IHhYIpF4jn7hhvtzDRUj8B+9 wRVsFMI/7mtxkF2c5RQrY2rU8AVaTQo= Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-2fa48404207so7848751a91.1 for <linux-mm@kvack.org>; Sun, 23 Feb 2025 15:57:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=scylladb.com; s=google; t=1740355073; x=1740959873; 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=sE2GEpXJe9EB8mr89rPCKxGhWxzC9G93uMNlCaajPCo=; b=BdkCj7amrZfs7GMqykXT/3/cq1GZMWJI3P3hrOevWmdf1yn8nI3e2VY9t7qz2YHGEa PK1y6elmLQW/ZtWzktU9gTMgr3v0qcrIsChoLsev5RyMz6PTuXF+hJsEQ4fzAfze2bPG CJi80HiXhPpsXt0UGgxHyPXSYCd4UcMzLWD3E5gIaUuLoB54w0o8QIA8gg+cX/rfJOBI zEqxdr7qZynX8xoVWiV339AtHh1MrsEueeEpFiE1Uwc+/WmLnXea44frkNYQjwcjwQFD 6jVlylESan39A9ipCBG+p1SVbKKU5DOX2NmPvwAIZIi4S7ieBoX+XtY6Byw0KU853aRW ZTbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740355073; x=1740959873; 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=sE2GEpXJe9EB8mr89rPCKxGhWxzC9G93uMNlCaajPCo=; b=C7Ml5o4yi6kF4irb63g1P1kNOe3aeXSi3e6xnRp3v0i06bhEjt6HrhDqCvg/BBbaxH PCDxYs5zFyYLjehd7VoNZZqGWsKInsXN14rvp+S5Lo/qLfrUWLxH0GMzzzZofSfjrip1 3ssbjYdV3xHcKN6/Y+dCEDiEzEQJXwyQ0x/RonktnTlc6o2XbsLDn4e/hMnVgUtWC85d utZy6tboOKwk4yzhuwsJkMQ4J8WKqq9uOzmV9vuytulv7wGno3h5MXumcpqy/IJurxWB qt11d4GvsKgiH7litUCgcMlBb9i9eUfalnkNUs/PMfWsrcCY4tsC7tZc3pXGmLYHjIW4 Twqw== X-Forwarded-Encrypted: i=1; AJvYcCVITbodxZtuPjfvLdfuepXz2uK/VyP8ljkbk1PM8TUOfhM3sfvacvuiDOauVBoAGj8WUw28Ert9bQ==@kvack.org X-Gm-Message-State: AOJu0YxL6z4xNmZ/vZqewLABht6I7eFe/SFVt56mWx4UGuLNf2OjPwep cVuvPNjTvajhq85ug8TcpXaP1Yg2X0Qv2Z2P4ZjrIJ6CUh40ORCaMDdtFjjNU/mWRUEKuUXeGjQ h2fALkFsFx1eIBs1tEdFGKhopTSqoe5yQVlBBHI70X6aScZDaWNiOdgYRNKTC5cZnm2Wbhex6CX fD73F0i3TmzjqZCOCmDoPv9iQxitHr3ZSN7iuxAtEUhireTEpYq1TPozsNogyxcclipkTyRPyGK DLvHdu/ZS5VUCyR8qnBYEqGnYd57ZpC98MPmMM0ReMXxjA2BODO2PytY4KbMzdhGHE2fAF1gStg vy44OA== X-Gm-Gg: ASbGnctPmZ4H/6etxZqIQNOjNpbYRvzkuyfURgKd06im7y8NjpwwC+XFUWXF2ply+wa AmqjIDxPk5hZIm2yML5K+FdQMxDwYZURvJVyG5t7PgXHF1MMobDAZHYO6BDTTIs1il9P9du0BqL AGkboaREwuwEzNzC8Ln9n0vjd/Q602tt5iiym4R7M+vcAcEsLS+ae11esHEXdlq+C/f5a55JayT Ots+1DWKMtqOu6S3zJlvWAGzA8pe8UhD9E6ayvtHnmKMGbHSWk3F/fIoIEDfA9yuEYg602Q/3QE dRmrJ8pjg+c/73rWFw9FSnsYl38xfg== X-Google-Smtp-Source: AGHT+IHw7//riiQsuVb5lGlLqWGLYjjfKu88D1cSIxhylJZNIWrjx2825KOCcROlA96N4e6VRrJx6A== X-Received: by 2002:a05:6a21:6004:b0:1ee:c6bf:7c59 with SMTP id adf61e73a8af0-1eef3cdcb24mr19667494637.23.1740355072878; Sun, 23 Feb 2025 15:57:52 -0800 (PST) Received: from localhost.localdomain ([2a09:bac5:7a2:24be::3a9:14]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ae0950ecb95sm9641091a12.41.2025.02.23.15.57.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 15:57:52 -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] mm: Fix error handling in __filemap_get_folio() with FGP_NOWAIT Date: Sun, 23 Feb 2025 20:57:19 -0300 Message-ID: <20250223235719.66576-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-Rspamd-Queue-Id: 6C583C0002 X-Stat-Signature: mqutt4z1ijnod7w7to38q6f8boptafey X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1740355074-431450 X-HE-Meta: U2FsdGVkX19dHVYiTi2gfQGckp7Zv2K2yUdyT2H96wdFcYoU3ag6W1a09B5Jo9M2DaJP4nhMQpa8c/B/1n4NOXFuLEMBLenZuVFoLa5jYucabfIaKnuvtQd31KdRtdjpOCkJNKAuw2Ko44fBR8PlVYC9q7+f9BKwXkmBGW7KP+TuvSEeHlNua1q0LNvrS/ba0bc062QZ3e9cG8QO3V0yDvcyCoDOOCBUW9LmiSbvG6t4IiCvUoMaZuK3uaxhe1xVoeQ+wYeH2274PoAojpQRo+/rIu+ggzYtgE66pvBMUvNaFZRTd6A2arj0gDo5fQYeD+RX/d/Utl8xMfPnT2ynmi15gEDVqeO4TvNeHRj/enO2dpv2b97icYXNDbcwrJmW2GPWMfTUWecyakS1tggsq/Sipt082WsBmT9n2dMcTFmcxlnyQAqW5mAsy8XEbssuXLOueWHjGFytBi2OYnXKbAKvq0nJtq6l7ZJLiQdoNUmysOPeWU8KwqlYOn3hU9RbMuMZnUM1jeiF8lIScAiG6zWmIqC6p1uWaKVwWV0ezVKfBmuASOXgDt56Q1evO2bxz66EgeHh/1nHR5YCzvHhC7jHB24oo9kLPyb40Rr0b6F72pUhr5yzfS8Qy+819H1CNqakDgskkjFbvnbheQhPF8CPRjqdNnaIsBcjJ1EJ8qJRRbadCpfFwJkJcGOl+0SA4kqAHBTr5YD0wnFs3RyThdkhkbdvLyVMoj5fvdDHXxUOTPtri5n/QPXt5yX6rY37qdPTPiAVQannO4PrY6udtccwumigdWhYbYlTqlNKJdApDgmc9RHFqTZukFmuY3n6UqIaDp7T0KoyrZgOMRBRZJz2hs5sLS1Z+b3Mr916HyF2F/v7laeM67XxCeee6eAczOGZS/Nf3M5jfQAIcwbzSlkwQpkZG9odC5QVoLZWhkNi3brB40YdBCS5veslG619hICYzHN2SLJArA9jTPy AvPsPADg USXcaCld9snZSl9GS9GIdggaHR33k6b2ZHaeQwRs0XpVi80DDFJMJsWFpfcBdN2s38mrX2OCgHt/2kvuJfABmZIKkrhZBBs2RtqM/shqh78i3d1F8kQ57v8HQdRoGL/IUYT27iqM3pdOAlGxbxirnmhVX7c212Y0iAL91C0zRCYoAZttNEbLJU1zkfTQNP3QuRgvLuptlNzC7sRdQO4FLCAds0QxFVIJjzDo9pVJzhQzrB/W9Z1l+6Fh/HoyNWarMS4dfbsxZWT0FvmoTtgb3/SF6mzY8Ajk7Y7kcwLR/ukLN5ArYtLBXSXodxHW2WqRK+Fg5IZgqAc3zyDpeVA47CQ0kWtuYsKC7KRNrSQjcjbOYE7CqgE0RfNfr70JZlXkyXzSA0GQYrBgxJDxrWe7+y37NXqHzlb3J9rnLwljlm7SOHBR5B8ofkdIanKWR7kyleQalP6W127jYUxkCIB6fNxSRVw== 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 |
mm: Fix error handling in __filemap_get_folio() with FGP_NOWAIT
|
expand
|
diff --git a/mm/filemap.c b/mm/filemap.c index 804d7365680c..b06bd6eedaf7 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1986,8 +1986,15 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, if (err == -EEXIST) goto repeat; - if (err) + if (err) { + /* + * Presumably ENOMEM, either from when allocating or + * adding folio (this one for xarray node) + */ + if (fgp_flags & FGP_NOWAIT) + 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 was plenty of available memory. 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 performed the following changes: --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -468,19 +468,12 @@ EXPORT_SYMBOL_GPL(iomap_is_partially_uptodate); struct folio *iomap_get_folio(struct iomap_iter *iter, loff_t pos) { unsigned fgp = FGP_LOCK | FGP_WRITE | FGP_CREAT | FGP_STABLE | FGP_NOFS; - struct folio *folio; if (iter->flags & IOMAP_NOWAIT) fgp |= FGP_NOWAIT; - folio = __filemap_get_folio(iter->inode->i_mapping, pos >> PAGE_SHIFT, + return __filemap_get_folio(iter->inode->i_mapping, pos >> PAGE_SHIFT, fgp, mapping_gfp_mask(iter->inode->i_mapping)); - if (folio) - return folio; - - if (iter->flags & IOMAP_NOWAIT) - return ERR_PTR(-EAGAIN); - return ERR_PTR(-ENOMEM); } Essentially, that patch is moving error picking decision to __filemap_get_folio, but it missed proper 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. Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com> --- mm/filemap.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)