From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f174.google.com (mail-dy1-f174.google.com [74.125.82.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 188C9264614 for ; Tue, 16 Jun 2026 01:23:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.174 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781572991; cv=none; b=l3RnX8js23LQMcaTPHwOCWExexv5RIYCRKiDj2b3r/tEdL+mKYDOj37gYoovwMHcjUekfTIRxU4HEKRPe9Z6ZNEBPb0dsUChaBb1qadJ805nbdAffxY/csGerLAkwjvmoGE9VuBh10JE6kkSBSttiZLheDqm/IsoyFMENtkesak= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781572991; c=relaxed/simple; bh=T0cFc8XuanrDe7z/GOqgn+tKtxaFtzk423q9EMcoDKY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=YZGqWlNTeZBnznyNEZCf6vQKaKYg/xRJscp+zbroyYUyCKvmXRtphkZ/Cba4yR5HLuTOQmsH4IXlzXpmt2F8o3fVfsvfZqkBYL80iQsqCrJVI8xfkp1gDnC7H0qhN84+8rhZVFtZ1nArzUM8CjHzGmhEw435b+CtdAqx9HItYx8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=HimaacrJ; arc=none smtp.client-ip=74.125.82.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="HimaacrJ" Received: by mail-dy1-f174.google.com with SMTP id 5a478bee46e88-307631dbfedso8490303eec.0 for ; Mon, 15 Jun 2026 18:23:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1781572989; x=1782177789; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=wr8x7Btw7/lIBXNPDxdKz96WwpOPU88J4lyb6t0tnrA=; b=HimaacrJHgvppGu8+Nt5c7H4/h/Gz5VCANNTgvLsgf8lRmgXnK/k+iJbVtuCbrGa9n jjRzejiStQ/HA/O1FFSPqrQiT74V47vJ+wou6ptOz93NiD9OFANFLYmM0VtWotYKOfIo UlW7uQWGAnke/PdmG9j9UWUqfLMUfJldDljWk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781572989; x=1782177789; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wr8x7Btw7/lIBXNPDxdKz96WwpOPU88J4lyb6t0tnrA=; b=rcjWar1gZ+9omTXl5AzR02P48fqM3+zL4wX3YJLJJBSZJMwqjLoou7J4rrVWsGDhzq 6j5FB6V0oyxHciE2ksuYg597Xu1y5Xz9gCZIU0nqQE1eyEGtgpMKW2TNBjXG50zDWBBO /UL5qvvQ8xYYkCIex3i4PavVKZmKBnbmRJDfGm5MZsWOdFcoWDeqHeWrKsLmGybUAiCb 0Jshzvwvjkq3CuJZ7cwGoh6azxWpsACaJjpgQpmgXBSzchrVvOl3XKzg29vrml54MA6D DEJaqoyP/d1II2P19s30r1deGUuyEIafXz9slXcMbIsLs3bNmj1DUyZRxqSc/SWZmJ7B rUzA== X-Forwarded-Encrypted: i=1; AFNElJ/M8MSjNEWQnX9vQ4EFwCnlhLP5oFK6e/ejeMIpvzCdk1LDYDlgCopOWVUTf13NOvJ8tMvulPurxzro3sY=@vger.kernel.org X-Gm-Message-State: AOJu0YxJ4R72faIhvSFT1/DdnS1VdWRvpWKpx3LWc+kJ7QMV+u4vgm7u uXvPhxs6tZcfvY8ABcCOw4CyaSgbgQVdrGD6YIaKJnLeJIbn2U3xWpohrU3WMG6wAA== X-Gm-Gg: Acq92OHbd2V9MK/hw1OksagZd2Ya9A+oz+vd03lEDDv8sek1Ut3FM8w7R19oojzHWNt hVPlZGJoji4Rc/p+iLZYbn/2k+adsd8Sr3KkJfkN2QvZZGZQRcnOBOJpCztYclX/pypPVzBgo31 Hlj5/Vml/bxjAxso2o9T7I/ZDTsTHh4iZqM3Y6THynrFOrmcZnXSdhzHpNNMSX2fksc8od8oY2u 9t8IbZmkaxE3XZisXuREabKR6JcthAC0hRdCaM98waTqZk+aRnxBrzRfOVSjE6Xvof9ubbFT9UH D0lKoRIOeE4SBvX/GKYCQxKt75SexIGqkmzdreFGuHN6HiPsfq9hDi1OT0GsZD66kzWZS6+So9D SKLS6mbjYlPmqA2D8cafkM+EA3XxkydOxicvr+RBncKmAU7ixbkBmx3inpeOS1nqbvQBqTky05F WdSbtP066Vvrz273vHk6f25v05TK55bY/A7FT7605/H31oXf1HsE6kbagOVa42sKKunLs80EfXT hpzLorOzPBWv14= X-Received: by 2002:a05:7300:fd15:b0:2ea:3370:6e51 with SMTP id 5a478bee46e88-30ba598ceebmr1041380eec.4.1781572989152; Mon, 15 Jun 2026 18:23:09 -0700 (PDT) Received: from khazhy2.svl.corp.google.com ([2a00:79e0:2ed2:c:7c58:c9c5:4e49:5476]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30ba6b7f840sm1838535eec.19.2026.06.15.18.23.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2026 18:23:08 -0700 (PDT) From: Khazhismel Kumykov X-Google-Original-From: Khazhismel Kumykov To: Andrew Morton , Michal Hocko , Vlastimil Babka , Christoph Lameter , Tejun Heo , Dennis Zhou Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Khazhismel Kumykov Subject: [PATCH] mm/percpu: avoid IO dependency in alloc_percpu Date: Mon, 15 Jun 2026 18:22:36 -0700 Message-ID: <20260616012236.3799518-1-khazhy@google.com> X-Mailer: git-send-email 2.54.0.1189.g8c84645362-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit percpu_alloc users within noio context may block on other percpu_alloc users doing IO due to the shared pcpu_alloc_mutex. pcpu_balance_workfn already grabs under noio context - update remaining holders to also run under noio. Lockdep reported this as a circular locking dependency, with one caller having entered fs_reclaim holding pcpu_alloc_mutex, and the second caller (elevator init) grabbing pcpu_alloc_mutex in noio context. Fixes: 9a5b183941b5 ("mm, percpu: do not consider sleepable allocations atomic") Signed-off-by: Khazhismel Kumykov --- mm/percpu.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mm/percpu.c b/mm/percpu.c index b0676b8054ed..50057403ae79 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -1749,8 +1749,13 @@ void __percpu *pcpu_alloc_noprof(size_t size, size_t align, bool reserved, size_t bits, bit_align; gfp = current_gfp_context(gfp); - /* whitelisted flags that can be passed to the backing allocators */ - pcpu_gfp = gfp & (GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN); + /* + * whitelisted flags that can be passed to the backing allocators. + * + * Allocations must be GFP_NOIO, else users in noio/nofs contexts may + * form dependency through pcpu_alloc_mutex + */ + pcpu_gfp = gfp & (GFP_NOIO | __GFP_NORETRY | __GFP_NOWARN); is_atomic = !gfpflags_allow_blocking(gfp); do_warn = !(gfp & __GFP_NOWARN); -- 2.54.0.1189.g8c84645362-goog