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 8DE00C5AD49 for ; Wed, 28 May 2025 16:24:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2EC0D6B0082; Wed, 28 May 2025 12:24:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 29C446B0088; Wed, 28 May 2025 12:24:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 164536B0089; Wed, 28 May 2025 12:24:34 -0400 (EDT) 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 E83CD6B0082 for ; Wed, 28 May 2025 12:24:33 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 8FC425D945 for ; Wed, 28 May 2025 16:24:33 +0000 (UTC) X-FDA: 83492839626.19.0466644 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf15.hostedemail.com (Postfix) with ESMTP id 5392FA0011 for ; Wed, 28 May 2025 16:24:31 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="FV/+li4T"; spf=pass (imf15.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1748449471; 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=H3WfoxKRVcW4Y+DnHDOZBJuxMROGpvocSlXq1ZkIg5E=; b=n1OaN43mjo9+5gSAYxtfD/i1ZBvD09+YontqCuav2jisOR2R1oLFNtUVL/RsvSpB/UWDV8 HjNEc9ucapjYMUe5t1b4E/RiRmM+iK2doH3L5ev0Kp4iqDbxgR7H8A9fPixr2Vs2psXxCt FNw8rJAQMGSdRbSKtUYaUQdOwHR10cc= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="FV/+li4T"; spf=pass (imf15.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748449471; a=rsa-sha256; cv=none; b=l0fjzB5P51ouuVxn1exinF4Bhfmav3B3AF+0oDpe0QLH4yzvjbEH7ERymw8MRNmivPs+ol G9qdqqOOXA3nY2/+v3W814vStgirRBxKEKkNDHd4GS7pBFm1xqQTZ/9iOCQHKc0dFxHdVf C4JjDeb5V08UGwXgLTFwpWlr3tFu0GI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748449470; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=H3WfoxKRVcW4Y+DnHDOZBJuxMROGpvocSlXq1ZkIg5E=; b=FV/+li4TWgmTQ7xQVtbvh+PJAVGtxQuVooFV8o5yDejKOHFsaWEBTQQsoZ7/Owpw6TkIyl tvLisBDEOTK0v1WqCWUcB2rryIeyVn8rqsVWySuFwyiRwAVJxIfll2P49/Fzb1c0fCZF+K lwvaaml8QlT7zdbPGYeWk4tsvQW16h8= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-294-Y30xJh9tMeuZQIMWVgpbaw-1; Wed, 28 May 2025 12:24:29 -0400 X-MC-Unique: Y30xJh9tMeuZQIMWVgpbaw-1 X-Mimecast-MFC-AGG-ID: Y30xJh9tMeuZQIMWVgpbaw_1748449469 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7c5c82c6d72so815176885a.2 for ; Wed, 28 May 2025 09:24:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748449469; x=1749054269; 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=H3WfoxKRVcW4Y+DnHDOZBJuxMROGpvocSlXq1ZkIg5E=; b=NBxxf7vaJTWi8fGXAcWOjjTSZy3uAue86kcgw6bn60cc0NpZjVa0BH/WU9jn46A/wb YvtZnxyp9LZk8IPHdeVI/+7nl9z1nzjZ8nz1ZCTmiU8lVWDgpD83nrJs2qbpZLMOJJCT TMrCCzOw9rKqT0YjIwF0bNQUbekhVXDvwxiUwxZxacppLGPH0UyqP5Ea0t1n1uniChF4 vAYGB98bHiGIeeVJI2gSYbSkbGbZG5Aaengb6dGRTmjIg8GD1XSO7qAVmdqAfratBdEh 5q44UUj0SRtwGqO85IO7O9YFYD25N+QwNOtgc7FkuGrU46BCWoUUQfdP2J3safPMWQjU RSJQ== X-Forwarded-Encrypted: i=1; AJvYcCXkrQrCyLnBp/zbkJa1TqTq4Lpa5mcBQNA4GoWqYod6S3VtKAqGiJ9O/rUQZPzn8+9OXEB4qv7p1Q==@kvack.org X-Gm-Message-State: AOJu0Yy5l/yJ2nuceb4OGCwgkk1HW5k+LwaDeusIqJcUc+C81Z7n5K3f xf0BPE8HKzo8fSG+/O6XMLqdnKdRQKKtIqiV3YAZ7a9sV5u4czXJx6obqEsjom38JoTMuNeBnP2 2W3T3E4Z7g9pvIHWL3HyX5RehM0i2fZHHlm6hJU0A9ZCVbKRsq9cc X-Gm-Gg: ASbGncvhoovN6iMdDexuvRdM0ugYek9UKFsNg/h2LbrXelsIFltxZ1rn8QVDf3ZSUrl nvjxLKLgDpKATcYD8VEkRxMV5Ft7gAkL6u+bOYypbFh7Y5CqoV3nC2RfXkXudAaavMfl4P1wj/g IT2TcWcxoUWuR5TJmKY2AvDHGybHFXuey2ZCsS9b5f4iyzPsSmI/7LHhftfZIf8QT4SgD9Hl+HF 7HxyDtdAU4sfdrTiWVKrPboH+qLRfp0LwHe8i068PEsuYMIi8MOAsnaaEBpaQT8o+3L44Po6JYw 8Lw= X-Received: by 2002:a05:620a:8804:b0:7ca:f447:c676 with SMTP id af79cd13be357-7ceecc7b357mr2983879085a.43.1748449468986; Wed, 28 May 2025 09:24:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHAnXf43b6H4MlK1EjDvv8V/BsoyuWSWPUUzmroPDps16PFlFqzdhDpePuXhUVM/nmAt1nS0Q== X-Received: by 2002:a05:620a:8804:b0:7ca:f447:c676 with SMTP id af79cd13be357-7ceecc7b357mr2983875185a.43.1748449468640; Wed, 28 May 2025 09:24:28 -0700 (PDT) Received: from x1.local ([85.131.185.92]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7cfc5d3a361sm87712085a.87.2025.05.28.09.24.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 09:24:28 -0700 (PDT) Date: Wed, 28 May 2025 12:24:24 -0400 From: Peter Xu To: James Houghton Cc: Oscar Salvador , David Hildenbrand , Gavin Guo , linux-mm@kvack.org, linux-kernel@vger.kernel.org, muchun.song@linux.dev, akpm@linux-foundation.org, mike.kravetz@oracle.com, kernel-dev@igalia.com, stable@vger.kernel.org, Hugh Dickins , Florent Revest , Gavin Shan Subject: Re: [PATCH v3] mm/hugetlb: fix a deadlock with pagecache_folio and hugetlb_fault_mutex_table Message-ID: References: <20250528023326.3499204-1-gavinguo@igalia.com> <629bb87e-c493-4069-866c-20e02c14ddcc@redhat.com> MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: d4ED0WE8eRV46NhB5yxsI8BPPDBPDlSgFdOmuPVgLv8_1748449469 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Rspamd-Queue-Id: 5392FA0011 X-Stat-Signature: nkx74f6egxd4379a7iod3adnp5zh8hxb X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1748449471-428000 X-HE-Meta: U2FsdGVkX1+jsShONuwAl3UhoisI+LM7d2f6fHy7s5Ru+1VZi3LPXaF31vUeiJagtrVgFjPKDDBfozAfITABBP4Ckzj61AFQhClLgaqp4g79ziEoCulODbIvmCMkr3jj8Yrus9lXanXtYeC5tUwRRln2VGPjpzV5f3FyTBs6ntN6zwDDc59Cvt1JAhjFxW6MGp8cQj4iuTRwnEZtmU+3koziTDzW3KCQ1pvDAkM3Jzkmq2tNH2rbs8uZaRU/hkaAaRxhrJL2fr65t1GB9XMKnCzjE7hq/XINnxUnO/1agoqsRj/RIfmbYESmv1FvYdRmQlt+s3nJJ31A9i7ejEIEl4kgdxVZBOkezE2PD+CB2sKP3czb/JA4n+ek4b6KUJmYsAnaeUxCmaiZMNu6gd9TvO96VvV97lNmM+pNUXGbUERsZ71wQGfLdNbKzArU3x+Em1hnt1ZVVzKYEM+ZZEwFjIGPg4vH9EAVd/WZAwvs0NHSaeyxfHPzAdy67NL3aPmQjHPBwkxziPeAhM1aLEHKnmtlxsbK7049RA/KQ2JFver0ZIewEyI6xckaVL566JtzRiJ55Qv8WYOqio50JCGXlCFCbdbpLWayp67nq4vsV10f+aHmndK/MDWiiVg05tG8F7tIAT0U2JPRV7yzgaIRGPyRrTe7FBOuJzNsUuZ+QDL3aANQk2eGT/clAColyhHuF9N8aXgh462w97UZaYGEQzE1i093XydqhjwLkwdXF0kWBnC7WIlsouXKIDHecH7MiNzP+9+QeT84JuuECtwBcrGKHA/Zfbl0AQO67yOCtED39j3mQ9gVONDr9Tdtjoz8h8R9tLaW/W24Zw+iBLWRgYzp4H2OiTHBLKtj7rN3//affyNp5iiuf4mH8p+t24QKOvD482xzucKuuhpsQtjbuZ9nstQHDSAsAAVtcdvqQbUJbdbgdsgxLdWkfVEWtXW7B6LdgaDfprJRgTpQxDJ 6DHpGSgi Vy+8Lrisx6EbZRo5wkq+c92iOkl9FJ1wrXRiE/18UgaNuM22HziUE44K3h6F9D0cITzSv5EDdlEDBO6A6Io0lfrkJ1hQch8HC1PLOoUyeo1Ww+mV8D9i4Grsvs27atYTqSXxdckViyk7kntVPiv5nzWMXBefc6d1jDWQkY7wuZhrfwJ6xb4NF2EJD8ArgODPuYJ+Iaby3yssIJGwmoNe2rfbJBF+Fl9Kcl18vdJWGRqOlUTZgodsx4/W7nED5FUt51o1IOh4QkT7ODuZTU+wZ+u4eCK4P6BzEb1XLAdazS5q45QTuNLqakYCiFRZ3StvK6Dz0mrTx4xe5T+gi8qYuSt0g8eSKfOQRw4LsCNTL8TIBifSHHeufOGHXo5nXMtS75gcSOzMw4/J5jsI= 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 Wed, May 28, 2025 at 12:14:28PM -0400, James Houghton wrote: [...] > > > For 2) I am also not sure if we need need the pagecache folio locked; I > > > doubt it ... but this code is not the easiest to follow. > > > > I have been staring at that code and thinking about potential scenarios > > for a few days now, and I cannot convice myself that we need > > pagecache_folio's lock when pagecache_folio != old_folio because as a > > matter of fact I cannot think of anything it protects us against. > > Hi Oscar, Hey, James, > > Have you thought about the UFFDIO_CONTINUE case (hugetlb_mfill_atomic_pte())? > > I'm slightly concerned that, if you aren't holding pagecache_folio's > lock, there might be issues where hugetlb_mfill_atomic_pte() proceeds > to map a hugetlb page that it is not supposed to. (For example, if the > fault handler does not generally hold pagecache_folio's lock, > hugetlb_mfill_atomic_pte() will see a page in the pagecache and map > it, even though it may not have been zeroed yet.) > > I haven't had enough time to fully think through this case, but just > want to make sure it has been considered. AFAIU we're talking about two separate code paths. IIUC you're talking about a fresh new hugetlb folio being allocated, but then that's what hugetlb_no_page() does. Folio lock required there. Here IIUC Oscar's context is only in hugetlb_wp() where there's a niche use case to compare whether a VM_PRIVATE has already CoWed once from a pagecache, and whether we need the folio lock for the pagecache lookup. Aka, this one: if ((flags & (FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE)) && !(vma->vm_flags & VM_MAYSHARE) && !huge_pte_write(vmf.orig_pte)) { if (vma_needs_reservation(h, vma, vmf.address) < 0) { ret = VM_FAULT_OOM; goto out_mutex; } /* Just decrements count, does not deallocate */ vma_end_reservation(h, vma, vmf.address); pagecache_folio = filemap_lock_hugetlb_folio(h, mapping, <--- vmf.pgoff); if (IS_ERR(pagecache_folio)) pagecache_folio = NULL; } Thanks, -- Peter Xu