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 E5C2EC433F5 for ; Wed, 6 Apr 2022 10:49:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5A24D6B0072; Wed, 6 Apr 2022 06:48:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5524B6B0073; Wed, 6 Apr 2022 06:48:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 419BF6B0074; Wed, 6 Apr 2022 06:48:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0069.hostedemail.com [216.40.44.69]) by kanga.kvack.org (Postfix) with ESMTP id 332A06B0072 for ; Wed, 6 Apr 2022 06:48:50 -0400 (EDT) Received: from smtpin23.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id DFB2EAB299 for ; Wed, 6 Apr 2022 10:48:39 +0000 (UTC) X-FDA: 79326130758.23.3FEF5F3 Received: from out2.migadu.com (out2.migadu.com [188.165.223.204]) by imf30.hostedemail.com (Postfix) with ESMTP id 46A588001A for ; Wed, 6 Apr 2022 10:48:39 +0000 (UTC) Date: Wed, 6 Apr 2022 19:48:45 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1649242117; 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=GlJegRaWIWRi2qaVP1uQ9KPmOqT5qYHEzfoN4ogLKH0=; b=qnepNMSRt9a96sZuHXujzA4fb5F8MjI8SlJ9FrPVv9ymsaWEtvbBB/1j8gwFPXs+CY20nD MqZ4VbKlgS+J7TwNe49+H8djzBvJrPlGYxll8BS7vsAU4dmjFQzxC80vPPEYbL8zMDNPUw aqjdLaSxCtMwpOjtdvaS6AM9ZEEbrWw= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Naoya Horiguchi To: Dan Carpenter Cc: naoya.horiguchi@nec.com, linux-mm@kvack.org Subject: Re: [bug report] mm/hwpoison: fix race between hugetlb free/demotion and memory_failure_hugetlb() Message-ID: <20220406104845.GA1150878@u2004> References: <20220406063809.GA27775@kili> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20220406063809.GA27775@kili> X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: linux.dev X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 46A588001A X-Rspam-User: Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=qnepNMSR; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf30.hostedemail.com: domain of naoya.horiguchi@linux.dev designates 188.165.223.204 as permitted sender) smtp.mailfrom=naoya.horiguchi@linux.dev X-Stat-Signature: h897utp9p79rp7jcnippip8jstaekkdi X-HE-Tag: 1649242119-277813 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: On Wed, Apr 06, 2022 at 09:38:09AM +0300, Dan Carpenter wrote: > Hello Naoya Horiguchi, > > The patch 3b325af8e5fe: "mm/hwpoison: fix race between hugetlb > free/demotion and memory_failure_hugetlb()" from Apr 5, 2022, leads > to the following Smatch static checker warning: > > mm/memory-failure.c:1537 __get_huge_page_for_hwpoison() > warn: sleeping in atomic context > > mm/memory-failure.c > 1515 int __get_huge_page_for_hwpoison(unsigned long pfn, int flags) > 1516 { > 1517 struct page *page = pfn_to_page(pfn); > 1518 struct page *head = compound_head(page); > 1519 int ret = 2; /* fallback to normal page handling */ > 1520 bool count_increased = false; > 1521 > 1522 if (!PageHeadHuge(head)) > 1523 goto out; > 1524 > 1525 if (flags & MF_COUNT_INCREASED) { > 1526 ret = 1; > 1527 count_increased = true; > 1528 } else if (HPageFreed(head) || HPageMigratable(head)) { > 1529 ret = get_page_unless_zero(head); > 1530 if (ret) > 1531 count_increased = true; > 1532 } else { > 1533 ret = -EBUSY; > 1534 goto out; > 1535 } > 1536 > --> 1537 lock_page(head); > ^^^^^^^^^^^^^^^ > Sleeps. But this is called from get_huge_page_for_hwpoison() with > a spinlock held. Thank you for checking/reporting, I'll move this lock_page() outside hugetlb_lock. - Naoya Horiguchi > > 1538 > 1539 if (hwpoison_filter(page)) { > 1540 ret = -EOPNOTSUPP; > 1541 goto unlock; > 1542 } > 1543 > 1544 if (TestSetPageHWPoison(head)) { > 1545 ret = -EHWPOISON; > 1546 goto unlock; > 1547 } > 1548 > 1549 /* keep locking page. */ > 1550 return ret; > 1551 unlock: > 1552 unlock_page(head); > 1553 if (count_increased) > 1554 put_page(head); > 1555 out: > 1556 return ret; > 1557 } > > regards, > dan carpenter >