From mboxrd@z Thu Jan 1 00:00:00 1970 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 47BB4C02198 for ; Mon, 10 Feb 2025 21:10:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BC1C7280032; Mon, 10 Feb 2025 16:09:59 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B7169280001; Mon, 10 Feb 2025 16:09:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A38F9280032; Mon, 10 Feb 2025 16:09:59 -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 850F9280001 for ; Mon, 10 Feb 2025 16:09:59 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 51DF5A0721 for ; Mon, 10 Feb 2025 21:09:39 +0000 (UTC) X-FDA: 83105276478.11.F15FB59 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf14.hostedemail.com (Postfix) with ESMTP id 5610E10000F for ; Mon, 10 Feb 2025 21:09:37 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=12KiLtBS; spf=pass (imf14.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=david@fromorbit.com; dmarc=pass (policy=quarantine) header.from=fromorbit.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739221777; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IXPg0jyHha5GFH3/W3a7yg3C3ItOrmF5W6ykDVRgdZQ=; b=5apKKLhwDj6SIJYFF2j4q6TxFDOo5kkrEOmW8jlr2ozHW9S45ozCRFEnQV1nn0nEzkM5oD H08NentzIusxiiLCN9p4M/dCzyUu38Dz4XsvnqoD1JtBFSaSof0t7pBuFLhnzOykIQhaJI ARlq+2nCBc6KRm+QuUSfWzX1rL1T7f8= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=fromorbit-com.20230601.gappssmtp.com header.s=20230601 header.b=12KiLtBS; spf=pass (imf14.hostedemail.com: domain of david@fromorbit.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=david@fromorbit.com; dmarc=pass (policy=quarantine) header.from=fromorbit.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739221777; a=rsa-sha256; cv=none; b=G+OZptlHClANOtsxqfgy2WjqN3X76Nrn5G9JqA95Ky1KTQfa4IeE2aM3Sf//fWZP26SHEJ Gb9lI4n0fwG2iK+haK9HD1dT8xToU8Hh2VslvbNr/fVovVkrs/JXAqDrozhJksTLvRs94G c8UqTdT9ArOc1RN2z3azkc4V1Aq38kQ= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-21f7f03d856so35966095ad.1 for ; Mon, 10 Feb 2025 13:09:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fromorbit-com.20230601.gappssmtp.com; s=20230601; t=1739221776; x=1739826576; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=IXPg0jyHha5GFH3/W3a7yg3C3ItOrmF5W6ykDVRgdZQ=; b=12KiLtBSP/PLqXKYeSJQVlTBNnPUZZVr4UbYfDEbxX3k0DGscaxmEjYKamgqUbRRYM CrTBFRRU1Icsgmrh6o0HxiKqqV6TvwC4loYdSoK/SmPTnRmNSzGAZsu4EN+QZGdQLocD 50vDW6X4pUMhsOGRUIY2Jp4FleCNphb/feGRfXeAl4WO7dTdkmNMVzAzARvtTFKmY8GC bGZGwNTOX/PvxDX6C/0W+RhsgwEyehqv3r/CNDwcr0jyM88SPcVcM+u4xbMucwzJAoR/ 4Q0Y6l+HP8EDP8Kx+UQQsgvGUfth40cGv3kspMXSFFeKLI7qlduMi26dLeJ6QXMfSW3U dA8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739221776; x=1739826576; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=IXPg0jyHha5GFH3/W3a7yg3C3ItOrmF5W6ykDVRgdZQ=; b=xFw8WMu+soDYY5JTMVc/oukhlBdDqiDXUGG6gOU5x9NWVrGd/+319wuabuqgrbc65G jJxvAGkCUCs7y+9M/3i2/TtIlxNRPxrqMkx2LyuQF5RKDj+vUp1QwzJJxSv3kXyxWgFj vpYVIFTtmZJm0a05lQL55vEO9/uy+tpVSqsdfmVRAQWmLkh0VaJscXPhWaYCcHpAeh27 iLol28ebDERgWKVmsRVPVJs/n0M70ngbRr5/R6K5GyBbeMF+YV4EPahGfe6JBFcO3CWD YiHKbSW6pWHPnzcmnVEq4Z3p1jbbK5KZB56aP2VFQOYJetpbXK4SDH9fShmFcuE7m6VM ZXPQ== X-Forwarded-Encrypted: i=1; AJvYcCVwqREls0+8/S+j3BiH3xpePvVqD2otseeupUOWQ+V3AD8tOlPlBYkobq330c/RyvGcpjFiCcf7/Q==@kvack.org X-Gm-Message-State: AOJu0YwdcLKXXFWkCG3pIydFbGGJD788F2ae7r/ssOk0ZQBwNAoVtNbh bn8oghX+oZ5BIblr7m59OQTI+FQ1NCFCeovhlEynIcJ0TGcKEvm9nod1t7wqyq4KQ0F3hex6IhX Y X-Gm-Gg: ASbGncsrGLjW24uQpQ2n2ePAPFpXBMbImcXWsJpgy8hEtOrRQu8LkW+wA7ynUqSaU8V A4j7D0ELwlzhE5O2ucoV2luSlUQmORwLo4OZVtvo3/c77Ggz3JE8CJNrsI4dLq2NHQ7Xi3prgyH yaRYdgT1wcRhz4GnQX2BZt4O+8sE77RE+fA6UtFs8D+PXIH7NNp2k8c0iYPIh7wwY+P1Dpwaolx H9dvqyvWCc0BiMuqPDAphBI1WbJWrUTj2vtWp/mVmvPGHaGX9S2JDkDmbgPJUBE2d46HgcEup1/ P3QTtQvy9F0zotyHYp2ig7GtCXXm0xyJcmgxYW6dWfiL1WQWsu5F8Wh1tT+X4gtsyZ8= X-Google-Smtp-Source: AGHT+IHBUF1XZswRKHhmiD8Z1Iyf4SRQnxGXx/l+ZuM390GPZQvY5eu9U/7UQ4xzyam2eKtVd1YJRQ== X-Received: by 2002:a17:903:2451:b0:21f:6c81:f77 with SMTP id d9443c01a7336-21f6c81116cmr167613195ad.23.1739221775261; Mon, 10 Feb 2025 13:09:35 -0800 (PST) Received: from dread.disaster.area (pa49-186-89-135.pa.vic.optusnet.com.au. [49.186.89.135]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f9a712da8sm23063155ad.246.2025.02.10.13.09.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 13:09:34 -0800 (PST) Received: from dave by dread.disaster.area with local (Exim 4.98) (envelope-from ) id 1thb23-0000000HCCS-3TVd; Tue, 11 Feb 2025 08:09:31 +1100 Date: Tue, 11 Feb 2025 08:09:31 +1100 From: Dave Chinner To: "Raphael S. Carvalho" Cc: linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, djwong@kernel.org, hch@lst.de, Avi Kivity Subject: Re: Possible regression with buffered writes + NOWAIT behavior, under memory pressure Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 5610E10000F X-Stat-Signature: e1nfwmkc8kjmemnt98cynd5cj1dpjbyu X-HE-Tag: 1739221777-10445 X-HE-Meta: U2FsdGVkX1+1vy6cxKjJe+//yTJdnPXOTWIove0nwwGfyTUawofi0myrAs1xLpaZqWbUMHJYgypIUl/jhnX4rddvcmu8hkuzIwioSTLg3ypeTT03dagoFgsjdG4t/tFvrfrK1BakmYcyQTB9iedVvypU1v9+S/SxfBCh9Uf8wG5Qjycu173ZV4EZ7uqr3Eg7bRokvTlwtTcfoA4qZ81EAEDZa3fzxbTKxvCAiq4il+seS5P+wI9fM092epu4I60A4SDb8KDXRJ7eCbhsOTPl08fO7raIQUUJEtM/4ltgVRINzTVQogRQy6m7QrFJv1G0uRbrnQNU84d67XDiMcZLIRtPt7A7pYyvztuFlgStwBylmeiJMWNctGRYrNIzZAYtYvt5hKaiGNBZyl5qTneR2rxvUKK6WKWAaTv6lNpqHIiU3kGgDtnfT7DWV8hmoRUnqOqY5QpzMzte+t5frtgGFvSU/JAvwIeNIL8Ps502h/rZEuYoDYlFgZpqwe2yMSPzle0x1LA9NYxXd/RsKtxxaz8gbxrj8Ml2BIRWuc1udd5jdgzP/4z02khhVF8OqcnGYgVf1ZC6LS81goyt+oikCAfMJ+Tmiy/OobbO5mDf7ZWl+1dPGSEvg0pwJ2cDumLaqKXAeJmxq10WfVJRkKLi/ZYHmYqMIfEc2m0INWOlK/CbkjAdHaQrorPtxMP71TsnQWH8Y2KSuzkhqSnnFCwMzOPSxC2lsA4AlEfCmm4Myz923BlGXVpzZvAUKEqH/dt3+jssDac9E6wcE1PDFaykAd8KZvpk7EU91LE5ZgFgygWETr3+otOq5WdKC+kzubYYVfXLJWxI8hbUwqfzs/PGMmoPEspXLmjCW4+Cpp15zXlNI5LfV99O0D+b6tD1fnkcj/JZE5RoDGGbRk2jzhLAcdINyYljOirYBPFvKz+NG8BjFb1EEL38p+chzB341eOFfwMKGhioNIuzOasINAk E9N9dI3Q qC7snQPrO5Asi1npTsXmCn5UZ6S2vmopW69qjYEz+YB/D4ynbBMb5U1Mw7nM3ROARPl7iUHBLwplqJMlGQW4UM5Naw8IltwtW5C/ewih8Xryji9yiEsIB82yU0UXhOD45XJA1HOQ36PMI14xkacbU7HGjzKZt8I+j6jatcxFkPRjA9z7IP6r+9bc4AzVU89Pd0yFRRLAcEK0/PoX/BCAvU7mqXw82k5gqtmrp1u6njhyTzW/qjhtWhevRbXBfbp52j26g3Zz2QUt5Gy40Dwya1xwOJ01NCdDU51XhGBH99wwlCafqkl/IGFEgCJvhWMJG/XHGv9tRf3aq1dN+FD7WMEA8DaMjpBMCYTfyTHm5N9USij2HnJPEmGs83AgliCuQDn0PJxxv/ejgtGOKXOzkMV/eBV2ns5rN2vyq 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: On Mon, Feb 10, 2025 at 03:12:24PM -0300, Raphael S. Carvalho wrote: > While running scylladb test suite, which uses io_uring + buffered > writes + XFS, the system was spuriously returning ENOMEM, despite > there being plenty of available memory to be reclaimed from the page > cache. FWIW, I am running: 6.12.9-100.fc40.x86_64 ..... > In the patch ''mm: return an ERR_PTR from __filemap_get_folio', I see > 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); > } > > This leads to me believe we have a regression in this area, after that > patch, since iomap_get_folio() is no longer returning EAGAIN with > IOMAP_NOWAIT, if __filemap_get_folio() failed to get a folio. Now it > returns ENOMEM unconditionally. Yes, I think you are right - FGP_NOWAIT error returns are not handled correctly by __filemap_get_folio(). > Since we pushed the error picking decision to __filemap_get_folio, I > think it makes sense for us to patch it such that it returns EAGAIN if > allocation failed (under pressure) because IOMAP_NOWAIT was requested > by its caller and allocation is not allowed to block waiting for > reclaimer to do its thing. > > A possible way to fix it is this one-liner, but I am not well versed > in this area, so someone may end up suggesting a better fix: > diff --git a/mm/filemap.c b/mm/filemap.c > index 804d7365680c..9e698a619545 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -1964,7 +1964,7 @@ struct folio *__filemap_get_folio(struct > address_space *mapping, pgoff_t index, > do { > gfp_t alloc_gfp = gfp; > > - err = -ENOMEM; > + err = (fgp_flags & FGP_NOWAIT) ? -ENOMEM : -EAGAIN; > if (order > min_order) > alloc_gfp |= __GFP_NORETRY | __GFP_NOWARN; > folio = filemap_alloc_folio(alloc_gfp, order); Better to only do the FGP_NOWAIT check when a failure occurs; that puts it in the slow path rather than having to evaluate it unnecessarily every time through the function/loop. i.e. folio = filemap_alloc_folio(gfp, order); - if (!folio) - return ERR_PTR(-ENOMEM); + if (!folio) { + if (fgp_flags & FGP_NOWAIT) + err = -EAGAIN; + else + err = -ENOMEM; + continue; + } -Dave. -- Dave Chinner david@fromorbit.com