From patchwork Fri Feb 14 09:30:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Barry Song <21cnbao@gmail.com> X-Patchwork-Id: 13974665 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 75260C021A4 for ; Fri, 14 Feb 2025 09:30:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D9D976B008C; Fri, 14 Feb 2025 04:30:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D24C66B008A; Fri, 14 Feb 2025 04:30:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B9F63280001; Fri, 14 Feb 2025 04:30:40 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 95BA76B0089 for ; Fri, 14 Feb 2025 04:30:40 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3C728C230C for ; Fri, 14 Feb 2025 09:30:40 +0000 (UTC) X-FDA: 83118030240.28.4D8DEDE Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf10.hostedemail.com (Postfix) with ESMTP id 4AABEC0006 for ; Fri, 14 Feb 2025 09:30:38 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Oeoae509; spf=pass (imf10.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739525438; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=MYd38P/88z4Le/gu2ZsWRGcpuaJyiGCRxbJw4vPtU7w=; b=Ra0BVOoG/woC0ph5VvpvTvMUK0sIWuQv6h/Hz9ZrQR6784LnnAi3rnx6NSNYnhcRNg7vdK zAPFZowYiXOzVYYmQTdu12kfOaPYy0zC1hS75SmrGwQ/6CRYMNQJgXHtXQ70InGJJgTgoP xHQ6d99xvoqJGozG5LrgWl7AuMKHaAo= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Oeoae509; spf=pass (imf10.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739525438; a=rsa-sha256; cv=none; b=hV+9Jr+uLG8CLRifWwDk+9Kzh7d//Wdh5lKOWavlpNocqXjlKRIlATg5POLt6/Pi+sJFKU GulkhatsNzGL9kkfnebfDkZb2U6Tmf5USEhHm7yvF8SsA2z1qyZaQwuWwcMf2IMgHlXKR5 tciOl+hTmLddcYRA/5hckkWZ607fqE4= Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-220ec47991aso8555765ad.1 for ; Fri, 14 Feb 2025 01:30:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739525437; x=1740130237; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MYd38P/88z4Le/gu2ZsWRGcpuaJyiGCRxbJw4vPtU7w=; b=Oeoae509T87Bdd8KKit+l1UlLRuPDXeLCsj0EVJoOnI/pCytUPkagwjEBtzJ4beer6 rrnU+7IwgmIlIqnOdH3MraKnCRnXiCkJ/E4fu201LImtk/e9jVejCchsiWPRIUIEf68Y fMpEc43+0Aaq3qy0mi+sKaFNpGFVZwIhmwxn+S/o+hPWa9PeIJp3lV8j13AMW2ZXi1Yq AtXkvLcywC7wA3fzLQfJpo3TfqhlhPihwexY5m6uf6FVfHd1M9E87ALMl9PlwXRZgenI znn05FocPxiLfCZ1ci6na5fe4cYCGnbc5UbN6UbgUmVs4p+/K1ps93hytrKsbAJR8gwu zrHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739525437; x=1740130237; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MYd38P/88z4Le/gu2ZsWRGcpuaJyiGCRxbJw4vPtU7w=; b=dkDdBA61CCyhKSd/iTJjgyOzV8wx/eizciHTGcXYz7nYi9PAavv+MBoNZuP5SRYwQ5 zHt1gYFkobQq3421SmUcfguLs+4z05tpQ9M0rFFHCQ8jveeAYEHrygj3HkTmxD6sqNug oBoZGQlXPt0GrVCst0oQbz7JcjinboowARkthZIxN3Ab7hzQJrWOm2cSnr7aQMYfqznk 76xXjV3Nm7QpqqwLslDXb1BRidLQ+0qlSQkVq2EUIUw3Bi5G/4E8YgQPcgPgQ/fCAqFC o1ATnORnuW+CbAWPvv+KvFPA5915K1J9L6brU3lvbI4jGn2WmVC4iTinC6IKEc4anDAG dxAA== X-Forwarded-Encrypted: i=1; AJvYcCUAKVX1/5R/E+j8RsZrf+fM0cvNbrlj0EUqk3j3IJBKGE5Wb7tdAH1n3c+A5wvhjEPqFYu6KEIy3Q==@kvack.org X-Gm-Message-State: AOJu0YxTgRPh5T/dKriFHnQng2upVyO4g+Iqdoh6r/FyXHmX/Kf0R7dD mGie73gqG0cRkjgMrSlac03snMyV0qVslfIghZ0yBm2/fXYPOS+O X-Gm-Gg: ASbGncs+2Shz9DN9AVAMKMr7UQyZxeYkSk11OcLdEzVzYP4tC+f0fV7b9OvPQcZhYoX cPD0lRWNzxQkyE5maOCaMU/yaX4fBoMNCZ2POl8slwATqmJ5yhzjxOcHxKYDwDH6Yhjvva2r/Lz hjHn9K3XGOk6ilUHiQBCDKZSxIK/QjIt6Gu5a/Tj1z6nbcgThgJg9pVU2CHPULY5Yih/ZBPNBow GRSfYYc39ltONfDjBVWPG9CwCVpG7sMqvskA+upL8H6blOTbMGYPR5LX3OaB+vdaKKe9PvdqsA6 +64fip5iQOqTg3t75JpJ463SoL75mvc= X-Google-Smtp-Source: AGHT+IF3R6sEv2yv6agqEs7T8nVlI0vjyVGMx4hRl93qDBPx5Nld8wdX+5D8keuWm8hulHGB8fPZdw== X-Received: by 2002:a17:902:ecc2:b0:220:d6be:5bba with SMTP id d9443c01a7336-220d6be5e03mr81713945ad.33.1739525437158; Fri, 14 Feb 2025 01:30:37 -0800 (PST) Received: from Barrys-MBP.hub ([118.92.30.135]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d545c814sm25440515ad.148.2025.02.14.01.30.30 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Feb 2025 01:30:36 -0800 (PST) From: Barry Song <21cnbao@gmail.com> To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: 21cnbao@gmail.com, baolin.wang@linux.alibaba.com, chrisl@kernel.org, david@redhat.com, ioworker0@gmail.com, kasong@tencent.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, lorenzo.stoakes@oracle.com, ryan.roberts@arm.com, v-songbaohua@oppo.com, x86@kernel.org, ying.huang@intel.com, zhengtangquan@oppo.com, Mauricio Faria de Oliveira Subject: [PATCH v4 1/4] mm: Set folio swapbacked iff folios are dirty in try_to_unmap_one Date: Fri, 14 Feb 2025 22:30:12 +1300 Message-Id: <20250214093015.51024-2-21cnbao@gmail.com> X-Mailer: git-send-email 2.39.3 (Apple Git-146) In-Reply-To: <20250214093015.51024-1-21cnbao@gmail.com> References: <20250214093015.51024-1-21cnbao@gmail.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4AABEC0006 X-Stat-Signature: t1ouicna3caq9bjs9q797zd16pw8pztb X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1739525438-547776 X-HE-Meta: U2FsdGVkX1/FatI5FgeJXHpsHPf2BrfFigP5oO8TbB/jf6MOzJHKMMqJhKMoisoHby9AKQUTaDzNMFyaQR/Lt2U3vMZM7TKZK4UXW6PTwoJ18ZbsUJeuw1PsF6n7kuBmvzw7gVFoO9Qrv7v+J/b/LW2CZK3E0mHx1Ab1z5Z1Xfca+PhsqEvyZ3EeISR9Bh/ybCxSc5sXCn27MdRVfYi60FbpU0tkMxmzNbRWgqOMtl3i9Vco3ibMhmJD2zOvPxQXhI2wKrGnA3jgE8f8Fk5p2RZvYhh5k+BKTXc6QJXJEB7hS4WdQK1AMEv9WOx0SQ0V6sNUkYjZGnKyyf6ybgS+1NQ/aCxFUPfJhTrKD0MYHqcsSGgG1r5aPssGwACxK+YDkyivfmPxJV4LDBdQlUcSH1bY5z9MVDPcjJAzVwyInqMFU0CwLyzGFfdxJGD+8NBaLcs9QJ8bryGUlZArD2PRbEdFhbvZ03tKtW0SVxh1ArGiQwZAgOAIsARSJCVDrQomsMTy0etTJ+d1dFdXQCPkBdoOlyTXspS0iVfw0/6IT/KlzGQiwqw9izKIkiTadaOg86V5j1vRrKQ820xpFILzV/mEsrpn9oWGcjFgq6FYrG0u5hiirh4Bc2qVIataetDgYz13U756UKktkrTRZfp0Olxac4KOZP/cTv4niiwh+i7X8FtxaqU00s8ywXBHEOKxKSxlkDp/jKQ9sBpqsCR3GZnf0N6OYdnJDkHLdBm3DTo2qQqn8wXAzF2bQaFzQi2D57FjqFlxAoYgDhRMDeNxzW7kTNyOK7yUgo78JzQAk1JnFD9E1SvGmDkCP6nWaflVe0G50SLzFA9vmg5erdQtfnu6PHl58UIuxksOldtTmTOJJk0pDeLSGcuJ3tDRIMkVUWP1B5Wa6SrqAZUDGBrpy2hXPqN8ofdFLi7Ade2BwY4/eC9fDj9Y1EJ3tXdRktFRHDGGVGvvyvXb9uo4SZl 7HuNg5wM P4gr6/KXRwheCm5iFVPR4aZTANUg2D7FJbwisv9RMnYONUyp8Pxu+4dPYb646LAMeb6uyOVhqEcHdb6I/9OCXuLTWZcbxgvHt6CtuL5aPAYFWHvi5GdsJZk0T3ySRse+CGtKQewPIRt64hWmVtOddB5SLsKEJDuKZgQaqGTNZonEi9vNoB0NRaii064CcIb1x+TnUSUMibH6QGXkGsGXS9KqFPCupMuAvQ0b26nzaZVAWOD+HRx/ncZFWh35r0YNM1M6/Fof3eaP/fyCL6H20Ni60qT3nmVo+ADVcgy14iNW5KaymzA1B0nsmm11aE6EJ6Hvfu2z91JbCHZ7w+7rGXPGQx3VlIv/mUGG8KBNMsiaDtSl8P8f1l3NdcCD8BYAisTqdDg4VtKH+asMZ0eQawcaRczxJIfOCrC22XVmTdShjAeIws+meElmFe7ZHRW4CNXCDhKCgLM0TOtII33BzNyOM2dX/A4AETljha0IA9jXZ5TSF5/Av7qk8W96kNb7fL8cy0IscQhXRinmLlBPynvtq1c6qpw5YaYHSpMMozZKd5zY= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000044, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Barry Song The refcount may be temporarily or long-term increased, but this does not change the fundamental nature of the folio already being lazy- freed. Therefore, we only reset 'swapbacked' when we are certain the folio is dirty and not droppable. Fixes: 6c8e2a256915 ("mm: fix race between MADV_FREE reclaim and blkdev direct IO read") Suggested-by: David Hildenbrand Signed-off-by: Barry Song Cc: Mauricio Faria de Oliveira Acked-by: David Hildenbrand Reviewed-by: Baolin Wang Reviewed-by: Lance Yang --- mm/rmap.c | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index 25a8a127f689..1320527e90cd 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -2022,34 +2022,29 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, */ smp_rmb(); - /* - * The only page refs must be one from isolation - * plus the rmap(s) (dropped by discard:). - */ - if (ref_count == 1 + map_count && - (!folio_test_dirty(folio) || - /* - * Unlike MADV_FREE mappings, VM_DROPPABLE - * ones can be dropped even if they've - * been dirtied. - */ - (vma->vm_flags & VM_DROPPABLE))) { - dec_mm_counter(mm, MM_ANONPAGES); - goto discard; - } - - /* - * If the folio was redirtied, it cannot be - * discarded. Remap the page to page table. - */ - set_pte_at(mm, address, pvmw.pte, pteval); - /* - * Unlike MADV_FREE mappings, VM_DROPPABLE ones - * never get swap backed on failure to drop. - */ - if (!(vma->vm_flags & VM_DROPPABLE)) + if (folio_test_dirty(folio) && !(vma->vm_flags & VM_DROPPABLE)) { + /* + * redirtied either using the page table or a previously + * obtained GUP reference. + */ + set_pte_at(mm, address, pvmw.pte, pteval); folio_set_swapbacked(folio); - goto walk_abort; + goto walk_abort; + } else if (ref_count != 1 + map_count) { + /* + * Additional reference. Could be a GUP reference or any + * speculative reference. GUP users must mark the folio + * dirty if there was a modification. This folio cannot be + * reclaimed right now either way, so act just like nothing + * happened. + * We'll come back here later and detect if the folio was + * dirtied when the additional reference is gone. + */ + set_pte_at(mm, address, pvmw.pte, pteval); + goto walk_abort; + } + dec_mm_counter(mm, MM_ANONPAGES); + goto discard; } if (swap_duplicate(entry) < 0) {