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 AD5B1D42B82 for ; Tue, 12 Nov 2024 14:09:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B4C76B00D5; Tue, 12 Nov 2024 09:09:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 23C806B00E1; Tue, 12 Nov 2024 09:09:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 08DF46B00E3; Tue, 12 Nov 2024 09:09:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id D7F926B00D5 for ; Tue, 12 Nov 2024 09:09:07 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 832288019B for ; Tue, 12 Nov 2024 14:09:07 +0000 (UTC) X-FDA: 82777623138.06.4E01EBE Received: from mail-oa1-f52.google.com (mail-oa1-f52.google.com [209.85.160.52]) by imf27.hostedemail.com (Postfix) with ESMTP id E434A40009 for ; Tue, 12 Nov 2024 14:08:22 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=kernel-dk.20230601.gappssmtp.com header.s=20230601 header.b=Lu2FynnG; dmarc=none; spf=pass (imf27.hostedemail.com: domain of axboe@kernel.dk designates 209.85.160.52 as permitted sender) smtp.mailfrom=axboe@kernel.dk ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731420416; a=rsa-sha256; cv=none; b=JTIBXM/O9IfFMzFZuBdFnOzEt8kcb0EkqyiaTP+FHnvE7D6JbCtuMLBHBV0VQO4UKCLN3m k4J0RXrfw5HtmjivTJB4FDhUznlzWMwhRihaz/T8U8Oz3TIy6h7zGBNO4rRigBfS1KGotk jVfwd0qPtkiZ8wQaU2qO4Au981VCRoQ= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=kernel-dk.20230601.gappssmtp.com header.s=20230601 header.b=Lu2FynnG; dmarc=none; spf=pass (imf27.hostedemail.com: domain of axboe@kernel.dk designates 209.85.160.52 as permitted sender) smtp.mailfrom=axboe@kernel.dk ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731420416; 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:in-reply-to:references:references:dkim-signature; bh=2VTmM5QSlq1n4SzNFjqKKxkTqt3/4ndegS1abSdzblw=; b=oQVKpNxNNhSe96Gef2HNX1oVFmODkefWl7qqIX/vX1SqsCYiXPL6XknqwJ+yqoic8LEhBU H10v5VxRkzDnJWfbkHgyC5Agdx3eYY7Iz8/Eqs0Ru4F46QtlvX/gaE4jo/DFqBHqdyHkBi AINe5BYrsnxoJ4p+DAjbGVmko/rX+C4= Received: by mail-oa1-f52.google.com with SMTP id 586e51a60fabf-29538198f2fso2808489fac.1 for ; Tue, 12 Nov 2024 06:09:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20230601.gappssmtp.com; s=20230601; t=1731420544; x=1732025344; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=2VTmM5QSlq1n4SzNFjqKKxkTqt3/4ndegS1abSdzblw=; b=Lu2FynnGHFLes1E3fC3HjUjl9c2H1K8i0YHsjQIkKzX+DzXW5G/poPhRluoKY5EUex OojlXF+5eNqwPkjaD8ISz4m1HoednJMjaHr9J4rdq6SMNFH1d4sGbeCQ9ql+aO7nxvah /UD0nhdQtmZb56k2wnhIVhXg22mWYSAJgsNMOgrvP4MW3I6cnTVMdfBu+ZwD2edF0sBV hk71L9mdLpehtKWyJ3zb00ccEumWDU6+D8kbfMCyxZEuKZhNV/GZHmZ6MiBrC+8PM+vW tk1ZLW2aUHJfZWGjZauqTN1BGrRuzjaEI+dae4mrHI4afGHCSZRyVeg3XBIw9xnvl+Bp fJLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731420544; x=1732025344; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2VTmM5QSlq1n4SzNFjqKKxkTqt3/4ndegS1abSdzblw=; b=wW7qV7339sZWKSXm2ubvlZaoTjilSMUgP7ZGpc87+KM7Jw3cTRb58SaZXqCiUYtlfp /kksjf8l+hxl0hwf8uJ3jNMusOQklfe4W+GXvCT3lh1KMbZb5edHlxTGH4Pi/1LBv9+M 8TYWDxYclCUMNYn9bGxbBKve5wIOnmopXa1qwo8DwmAixn/3Mgx0jZq6IRR7HyJvLhwx xE0B+zfl7k1yKbWeO45fkSFYquldBwoFU3Y3X8js17BN9HFG0v1bAzjOz+xVHcrFJF2w 2NW+0ljN4OQuzAIpPEUON8vksApWyBHeCIIxpT8LmzdaCgVJNqKlqwOnjZgp2PCvG7Jq CPow== X-Gm-Message-State: AOJu0YzC2KIK6BoqrMmSrldpXXAVPq5jvdxtA7ewazeokbPbKC9ojJy7 ERcOetFNekAJFYWpOvkXKhkd2MNNvJ0zbOK48IxY34DPXFR52lVJuDjVZVTfxSI= X-Google-Smtp-Source: AGHT+IGKZws8A8A6GExZpeIFWIve06Wn6yTSLfUbW410QSZ9Z8ht/7ABpd8OcL3b6MeePGxUd8BRIw== X-Received: by 2002:a05:6870:f603:b0:288:60d3:a257 with SMTP id 586e51a60fabf-295603e193dmr14748452fac.40.1731420544420; Tue, 12 Nov 2024 06:09:04 -0800 (PST) Received: from [192.168.1.116] ([96.43.243.2]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-29546c40039sm3431688fac.2.2024.11.12.06.09.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 Nov 2024 06:09:03 -0800 (PST) Message-ID: <9a5474b6-aaac-4567-9405-351d6755f947@kernel.dk> Date: Tue, 12 Nov 2024 07:09:02 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 09/16] mm/filemap: drop uncached pages when writeback completes To: "Kirill A. Shutemov" Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, hannes@cmpxchg.org, clm@meta.com, linux-kernel@vger.kernel.org, willy@infradead.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org References: <20241111234842.2024180-1-axboe@kernel.dk> <20241111234842.2024180-10-axboe@kernel.dk> Content-Language: en-US From: Jens Axboe In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: E434A40009 X-Stat-Signature: gxa1zxnhjuremm74d6brt7wpnx5rxxc7 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1731420502-431323 X-HE-Meta: U2FsdGVkX1+lAGWd25p/Xq1Fa9C7UPQu73JjzwlrgQ8SIrI5t/b9Dbld+Wr9cyLaJx0EZPcQMeIcw8xBuYJM284vm/ARUNVYxFTN/tf7XbfkzGPWBBir3XstuHAG4IU+bhGfPI91WuIuMbdHH7EYQ2213M5SzLTIm4NDDnZtSdnocxHzm9jip2rfB79mN9stfMVA5Hqvs61Z0EutYfOZ6WxItqPXD+dyFKjXW2k+FYTsRkThjiCs0K37dMX9gXaIio/ADJ1WZ2JmNSvwaE1S0opGgTkLuY2i2UNcjZUv1eF2SdjMbc/dswM8BS9zq+6zDpP7nqXt4YLMGZporCQgtcpiwZC0IWopqRsXrSgdfbHtdwoQZ+O9PjuMm3kNUOvK6H0mnA0MHm31acex8ebhVCL3aGLsvM0Kp7WLKbAXmu9Nen3OoQYygkEBOOqhEGfUV/ctV6EX6eGILlBKrT0Nh0QFUSE1ja9e0UyQ9PeaOHsAN9ZORP5nfnEKp8olaoK6G119PhHWFvBFL9gs3wFYyCoVSzZBULrqsfS8xYGDpZR/QUKVbeF/J7TFvHqVkE/RS5kdWTHgfCLVehMO5yUVjfjeDRijjnURa9RjInVzo4KexSSgsupjPduWs5tdcjxW04dTqFIx14CTgGOMH+dZkneyL5FIrgSur5ECJcXGUkYT8vpWJYFkkCFTTbq+CQibdrWXoMN3tO9gsdVf+3KUxeaVGhB35tDure5vN14m21AEwj8ApPg4Y9qGA/uOnmKf9tWc7DC2+Vp62GTQ0mdhEacRVEHOjlp3FUaeWkeHCMC5v9YtHKSK59JyqWt/qZuna4fS9wIM/8DzlzlmXbVIPsz6/CTIJ9TtBwLw2z34PytNoZzI1o4+LW9nON8U0Or3JWv/Ts17flcIitwzXZskoWQ8WPYefZAqcGGuHJsLIYXeNYabUXC8AbsSuyEc2PL8CBlbcvUTj2wzYVYf2bN xY4n312L T+s7snEC0OtT+uSrgIGH69oxw5LQ+aWle5VHt3p741PtSIXV+E4myBn70RQCTSSIDrZYNM7ugt7kbOuYPFXaSlX9KNsNPXdMG8QVrQzXa6mH0KzZx1OjzvKUjBa+TM4+zjNtSOUsYNhiMY2SSGiBk4PW8ZFD2Xi6LtGM/oPiFA05QvQxRqi+ASunBP4jpKtgTftPvsV26PkUsBu3QVUHZSI4vdtvqHcAUBPLZpmXRgScGEw7+gn7faUmAasyGEcukmxTmcnGADnZORizyZH83oDebwjkCYSQV0PNg7Hss4TqkbcQPV722xsBpJeQGVnAaurh3gwigPdTZ6AaqzTaroTu5f+sLSwzCrKpu 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 11/12/24 2:31 AM, Kirill A. Shutemov wrote: > On Mon, Nov 11, 2024 at 04:37:36PM -0700, Jens Axboe wrote: >> If the folio is marked as uncached, drop pages when writeback completes. >> Intended to be used with RWF_UNCACHED, to avoid needing sync writes for >> uncached IO. >> >> Signed-off-by: Jens Axboe >> --- >> mm/filemap.c | 28 ++++++++++++++++++++++++++++ >> 1 file changed, 28 insertions(+) >> >> diff --git a/mm/filemap.c b/mm/filemap.c >> index 3d0614ea5f59..40debe742abe 100644 >> --- a/mm/filemap.c >> +++ b/mm/filemap.c >> @@ -1600,6 +1600,27 @@ int folio_wait_private_2_killable(struct folio *folio) >> } >> EXPORT_SYMBOL(folio_wait_private_2_killable); >> >> +/* >> + * If folio was marked as uncached, then pages should be dropped when writeback >> + * completes. Do that now. If we fail, it's likely because of a big folio - >> + * just reset uncached for that case and latter completions should invalidate. >> + */ >> +static void folio_end_uncached(struct folio *folio) >> +{ >> + /* >> + * Hitting !in_task() should not happen off RWF_UNCACHED writeback, but >> + * can happen if normal writeback just happens to find dirty folios >> + * that were created as part of uncached writeback, and that writeback >> + * would otherwise not need non-IRQ handling. Just skip the >> + * invalidation in that case. >> + */ >> + if (in_task() && folio_trylock(folio)) { >> + if (folio->mapping) >> + folio_unmap_invalidate(folio->mapping, folio, 0); >> + folio_unlock(folio); >> + } >> +} >> + >> /** >> * folio_end_writeback - End writeback against a folio. >> * @folio: The folio. >> @@ -1610,6 +1631,8 @@ EXPORT_SYMBOL(folio_wait_private_2_killable); >> */ >> void folio_end_writeback(struct folio *folio) >> { >> + bool folio_uncached = false; >> + >> VM_BUG_ON_FOLIO(!folio_test_writeback(folio), folio); >> >> /* >> @@ -1631,9 +1654,14 @@ void folio_end_writeback(struct folio *folio) >> * reused before the folio_wake_bit(). >> */ >> folio_get(folio); >> + if (folio_test_uncached(folio) && folio_test_clear_uncached(folio)) >> + folio_uncached = true; > > Hm? Maybe > > folio_uncached = folio_test_clear_uncached(folio); > > ? It's done that way to avoid a RMW for the (for now, at least) common case of not seeing cached folios. For that case, you can get by with a cheap test_bit, for the cached case you pay the full price of the test_clear. Previous versions just had the test_clear, happy to just go back or add a comment, whatever is preferred. -- Jens Axboe