From patchwork Wed Jul 12 21:10:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119353 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1424145vqm; Wed, 12 Jul 2023 14:24:25 -0700 (PDT) X-Google-Smtp-Source: APBJJlErLQSiblMEayowDjEj1aWjfKBlogs7zBu/4Q9pCmK+gfScKgv32ZFIyvSRlx2p5Pbo6NUN X-Received: by 2002:a17:903:482:b0:1b8:a2af:fe23 with SMTP id jj2-20020a170903048200b001b8a2affe23mr15177048plb.2.1689197065089; Wed, 12 Jul 2023 14:24:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197065; cv=none; d=google.com; s=arc-20160816; b=ghv9jZC3+NJ8/kEkvftZFT6xNrBw1EMPG1YD5wtsUUKAa0cIP7lD3CGKI/68b/TBLC gXdESPSAh09OQrL+mUnasIIC8BL/qkcUZ3Ma4nbPR4dK7XhC8hyeQdkfuJDyy5OGZOWM jnnoi5U6AWBly81/fgA/g17qRVQjMMW5vuSYAKFB0q4SAumJR9TTjWw6hR+YF2zTxpBf ibvjVnAO3K0luQJHiAYTCqRmIBlTU5a37zKr7FFEzr9MHnmmGns6cCX0vJL6g3p3gPDg O+H35TI6xFPnBnqY7JhbXvbC9hP03Z9zabaFne0ogPRiXr1Ug/c7OsoMJT4N0tjwfXDW wiag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LRjSY9kpVwgW2a61i7EdjuyktV0StcLh7oZx6fNGjZ4=; fh=P3I/q8AXtufdbDEuwU3X3r4rEeyC1YLzTYbBZiW6KIw=; b=B0OUNP34YFhVIoMpuk6ymnjYYOtJ5343yUc0XsNN5kvk7V6AT/75A02m0aU7N5CBuH CyswEqpp0KDo8GB/wnM4bKcO5QYg2NoA2beR3oPhYx3KnvJcZql7xgLw7KhtCLhY5wD7 uTw5VCXT9ydcasK+LufY4N9y6qfuOi52RlAWyoyHM55kpYoQKcPrknQOT0/L8uzNtCG1 MIB/YIxJH47N+I6jchKpnx7zeXgEuLE0RiYADzSMa3LSeIGcIg0Fbvet2NierJcAdF2M GHEoSigYzCoaXu55oM971UCOoHdQ55Eukoj9VXnpamlf91ri6OG6gpcxrp8tMzRkUTBw f/ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=qgNofqLd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x4-20020a170902ec8400b001b025aba9f2si4070525plg.22.2023.07.12.14.24.12; Wed, 12 Jul 2023 14:24:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=qgNofqLd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232588AbjGLVLo (ORCPT + 99 others); Wed, 12 Jul 2023 17:11:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231675AbjGLVLj (ORCPT ); Wed, 12 Jul 2023 17:11:39 -0400 Received: from out-52.mta1.migadu.com (out-52.mta1.migadu.com [IPv6:2001:41d0:203:375::34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 82A181FCC for ; Wed, 12 Jul 2023 14:11:32 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196290; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LRjSY9kpVwgW2a61i7EdjuyktV0StcLh7oZx6fNGjZ4=; b=qgNofqLdr5BBXuH8Eyt7wUXxAF8PRNvIR/SEb1CrJKD54or6HkTiHAUbrs054ayDAGg+t9 WRkLIGLeI4fHnaEc/atC1J47nVj0bwHMOhVhaky+/ViUJJUo7jAOxPZheDYjiFSv1G1uII IIUADGn1prNv6ipJUzXnh9p3V5ddirM= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet , Jan Kara , "Darrick J . Wong" , =?utf-8?q?Andreas_Gr=C3=BCnbacher?= Subject: [PATCH 01/20] sched: Add task_struct->faults_disabled_mapping Date: Wed, 12 Jul 2023 17:10:56 -0400 Message-Id: <20230712211115.2174650-2-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251501788483232 X-GMAIL-MSGID: 1771251501788483232 From: Kent Overstreet There has been a long standing page cache coherence bug with direct IO. This provides part of a mechanism to fix it, currently just used by bcachefs but potentially worth promoting to the VFS. Direct IO evicts the range of the pagecache being read or written to. For reads, we need dirty pages to be written to disk, so that the read doesn't return stale data. For writes, we need to evict that range of the pagecache so that it's not stale after the write completes. However, without a locking mechanism to prevent those pages from being re-added to the pagecache - by a buffered read or page fault - page cache inconsistency is still possible. This isn't necessarily just an issue for userspace when they're playing games; filesystems may hang arbitrary state off the pagecache, and so page cache inconsistency may cause real filesystem bugs, depending on the filesystem. This is less of an issue for iomap based filesystems, but e.g. buffer heads caches disk block mappings (!) and attaches them to the pagecache, and bcachefs attaches disk reservations to pagecache pages. This issue has been hard to fix, because - we need to add a lock (henceforth calld pagecache_add_lock), which would be held for the duration of the direct IO - page faults add pages to the page cache, thus need to take the same lock - dio -> gup -> page fault thus can deadlock And we cannot enforce a lock ordering with this lock, since userspace will be controlling the lock ordering (via the fd and buffer arguments to direct IOs), so we need a different method of deadlock avoidance. We need to tell the page fault handler that we're already holding a pagecache_add_lock, and since plumbing it through the entire gup() path would be highly impractical this adds a field to task_struct. Then the full method is: - in the dio path, when we take first pagecache_add_lock, note the mapping in task_struct - in the page fault handler, if faults_disabled_mapping is set, we check if it's the same mapping as the one taking a page fault for, and if so return an error. Then we check lock ordering: if there's a lock ordering violation and trylock fails, we'll have to cycle the locks and return an error that tells the DIO path to retry: faults_disabled_mapping is also used for signalling "locks were dropped, please retry". Also relevant to this patch: mapping->invalidate_lock. mapping->invalidate_lock provides most of the required semantics - it's used by truncate/fallocate to block pages being added to the pagecache. However, since it's a rwsem, direct IOs would need to take the write side in order to block page cache adds, and would then be exclusive with each other - we'll need a new type of lock to pair with this approach. Signed-off-by: Kent Overstreet Cc: Jan Kara Cc: Darrick J. Wong Cc: linux-fsdevel@vger.kernel.org Cc: Andreas Grünbacher --- include/linux/sched.h | 1 + init/init_task.c | 1 + 2 files changed, 2 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index eed5d65b8d..bc7b61305c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -871,6 +871,7 @@ struct task_struct { struct mm_struct *mm; struct mm_struct *active_mm; + struct address_space *faults_disabled_mapping; int exit_state; int exit_code; diff --git a/init/init_task.c b/init/init_task.c index ff6c4b9bfe..f703116e05 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -85,6 +85,7 @@ struct task_struct init_task .nr_cpus_allowed= NR_CPUS, .mm = NULL, .active_mm = &init_mm, + .faults_disabled_mapping = NULL, .restart_block = { .fn = do_no_restart_syscall, }, From patchwork Wed Jul 12 21:10:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119359 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1428340vqm; Wed, 12 Jul 2023 14:33:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlFnOD/MOJLfaBALztiftfnk++nG4cstG83gOFb2ppHkbdzjphjWJOHnOAutOPyHJlh7FIqA X-Received: by 2002:a17:902:ef95:b0:1b1:9218:6bf3 with SMTP id iz21-20020a170902ef9500b001b192186bf3mr14682791plb.37.1689197629422; Wed, 12 Jul 2023 14:33:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197629; cv=none; d=google.com; s=arc-20160816; b=bQgvRCYTryeNiGYiwmm+37H4D8t0epG++BsPNFHcpsaczLJU6N7nnFa8wa90cLnMTf dlsXJImrOF4reOLbQt/xaAarQz1MDJ7b9hsLoP4ePj9q5YtS7plrmavmF3TEmvoP0ZI/ 3tJ2JJa7HO/s0EdC+Ns/RRpv5wD6AfBFi1y9BwxbVPe+xrhWu/6RcWl6c0xWqfY+b8lO eIcGKJw3S2DXLbznwx3VAGNOHGKwSwUstJv9nnhydvrzSBR5F2s7+jrv/me99DLXdMhM OHsjowrXiThNi2yr4byjEgNOQ6zbRpDCF63a3+CWEjJr7ahr1gMyE4ZVn8nzgNKvgs6L H8HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3fmI1GsqhKc/VjkbsmLsO1lPQkBpUyPyeZNLX2gLM4A=; fh=mwarQsDQeCRP+pKtJkNTDmQmOkPemgFTgQR9vzuXJgA=; b=KsUkh92C0cO4bxPxzq8inUwG9jFFr5fWsg2vLFdi8zN9LUVRwpjtov/HH5ayjhK1dL y7C3aAcyTECFHo/uDPy3yd93LSYFGKxgvNHMscsxJff003iEPW4t6eEzM/GdscQOOfUm TRCv+CpDFiA0m4pfcCq9bXWdoWSni+Ccs4j2S0J3Uk6i3Otm5UquWpsDUuW+pg6UIv0r r0sqO/ywDmAlbRcioJkMgYqurOGEc49Dq+Q6GbQy3Jut+DQOUwWf7CQNGnNcDfPuRXqY eNr5uR1Nc4ObhShfslAY6dlNzI4Kx/SmaTXFx+RKNuk21oel/aWUySPliwh60Om7Ehlu 2awQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=bPNFe3A2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j14-20020a170903024e00b001b69de1eae1si4001192plh.620.2023.07.12.14.33.36; Wed, 12 Jul 2023 14:33:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=bPNFe3A2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232276AbjGLVLy (ORCPT + 99 others); Wed, 12 Jul 2023 17:11:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36838 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232587AbjGLVLj (ORCPT ); Wed, 12 Jul 2023 17:11:39 -0400 Received: from out-15.mta1.migadu.com (out-15.mta1.migadu.com [IPv6:2001:41d0:203:375::f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 853571FF1 for ; Wed, 12 Jul 2023 14:11:33 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196291; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3fmI1GsqhKc/VjkbsmLsO1lPQkBpUyPyeZNLX2gLM4A=; b=bPNFe3A2K+uwYhacSeB0u/UF3RLJmghTljTzeWYzUwEz8gPSAu9bEDngGXsvQBKCcWpEIn UeWECG1oMpp5uA3/WoUcbncHXvGEluUxUZuuCpRHlPTjk1oeshTm6+y7j4LbES1C6DuGJ1 sMi0vX6oOHkFvZjnaA9BojtuXNsiw28= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet , Alexander Viro , Christian Brauner Subject: [PATCH 02/20] fs: factor out d_mark_tmpfile() Date: Wed, 12 Jul 2023 17:10:57 -0400 Message-Id: <20230712211115.2174650-3-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771252093105588554 X-GMAIL-MSGID: 1771252093105588554 From: Kent Overstreet New helper for bcachefs - bcachefs doesn't want the inode_dec_link_count() call that d_tmpfile does, it handles i_nlink on its own atomically with other btree updates Signed-off-by: Kent Overstreet Cc: Alexander Viro Cc: Christian Brauner Cc: linux-fsdevel@vger.kernel.org --- fs/dcache.c | 12 ++++++++++-- include/linux/dcache.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index 52e6d5fdab..dbdafa2617 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -3249,11 +3249,10 @@ void d_genocide(struct dentry *parent) EXPORT_SYMBOL(d_genocide); -void d_tmpfile(struct file *file, struct inode *inode) +void d_mark_tmpfile(struct file *file, struct inode *inode) { struct dentry *dentry = file->f_path.dentry; - inode_dec_link_count(inode); BUG_ON(dentry->d_name.name != dentry->d_iname || !hlist_unhashed(&dentry->d_u.d_alias) || !d_unlinked(dentry)); @@ -3263,6 +3262,15 @@ void d_tmpfile(struct file *file, struct inode *inode) (unsigned long long)inode->i_ino); spin_unlock(&dentry->d_lock); spin_unlock(&dentry->d_parent->d_lock); +} +EXPORT_SYMBOL(d_mark_tmpfile); + +void d_tmpfile(struct file *file, struct inode *inode) +{ + struct dentry *dentry = file->f_path.dentry; + + inode_dec_link_count(inode); + d_mark_tmpfile(file, inode); d_instantiate(dentry, inode); } EXPORT_SYMBOL(d_tmpfile); diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 6b351e009f..3da2f0545d 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -251,6 +251,7 @@ extern struct dentry * d_make_root(struct inode *); /* - the ramfs-type tree */ extern void d_genocide(struct dentry *); +extern void d_mark_tmpfile(struct file *, struct inode *); extern void d_tmpfile(struct file *, struct inode *); extern struct dentry *d_find_alias(struct inode *); From patchwork Wed Jul 12 21:10:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119336 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1418745vqm; Wed, 12 Jul 2023 14:13:35 -0700 (PDT) X-Google-Smtp-Source: APBJJlHqrbJSiV816Ae9KcA8qURLDDNsOS3Wv+we0dFDxU6ioc0pV5Gzo1uu3in3u1whwjU0wgTG X-Received: by 2002:a05:6a20:38e:b0:126:81ef:f18d with SMTP id 14-20020a056a20038e00b0012681eff18dmr17999373pzt.40.1689196415442; Wed, 12 Jul 2023 14:13:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196415; cv=none; d=google.com; s=arc-20160816; b=mwKctm1GpDdeia0As6KYLvnNU9f2enw4pRmHnDbzttGDChX0KxJIxJMo2LpbAKiYdf sQqn2HVeCuIoex44lh2mzOKWUhJqO5ZtEkO5ogO03cgbHt6BcNyZTQtWh+94rT3krXCR 2+SfA0Lo/Th+F19zi5cQ5RAY9zdV6HvN621TZ13K6h+jLVi+ErALYZK0OuuPVyS7z16Q 7WAVIDkAgcyCurOfP88+Y5fyKLniyTNnbIbHT+TLA1ShdWD7wq3KEgGv0w5lqc6N5vSk hDNhlED4GsjfDEv+6kAkq5FengDBX0OCA404h813fuv8K+oUUGtWk6unsDsbKqZX9kjA T15A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VDLK1ONggBB+eFfykVjGTBwfVG7SE70wyxw3cDrS9g4=; fh=Xuq39RQGwcEwJQVQ2YPvjPZEVg+wrkfqKkHwu53FPTE=; b=yjLvIjvvjkwkjgwrtn++cbxXjjW3g4OufJfjpu2SHuWzQqqEFI3X6zfiXQn4itEwwu oJc7LOO7yuUU7gDQaEXTw4q7INlJtwQ2L098C97wwyOABQyu54RQk2x9SCW72WKKXUvX 4bw3PzkgWeBp0v34i/1v7U0wY4vQ4jK2lPw0Xc6Z+7z4Ui1e0W0Wct8u8pBSDMHGoJx+ yU/SnnPJoiDKFoIjIgEuohEiSDGApZWzN9q7+RPUkiZJt79N2/BHSMOTCx7Rb/e0T1/P qKhrzrROhmYZCwujfhZv4rm00S2Vi88ex/KTh9atyPJS2JlpH4u9q0jEvF9E+/sERzUm 90Ww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=nT353abG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bv191-20020a632ec8000000b0053ff2b1be42si3603446pgb.113.2023.07.12.14.13.18; Wed, 12 Jul 2023 14:13:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=nT353abG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232779AbjGLVMC (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232603AbjGLVLk (ORCPT ); Wed, 12 Jul 2023 17:11:40 -0400 Received: from out-29.mta1.migadu.com (out-29.mta1.migadu.com [IPv6:2001:41d0:203:375::1d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D84B210C for ; Wed, 12 Jul 2023 14:11:33 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196292; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VDLK1ONggBB+eFfykVjGTBwfVG7SE70wyxw3cDrS9g4=; b=nT353abG+gbYP6wNNp6mG4LtZUQRLG3e0cPhL1rQKv2kf3gbONxLaGbqeV3CzmCE0QZL67 VUDWogb/VvrW+h5sxU9GWjtZp5r01ye1GW3+eEZ/HLw2o6WAprjFLVvqgeJaGqyLLKxSSk mMD13c0PBmafrfMPWBAUk6sz4OJS+VY= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: "Matthew Wilcox (Oracle)" , Kent Overstreet Subject: [PATCH 03/20] iov_iter: Handle compound highmem pages in copy_page_from_iter_atomic() Date: Wed, 12 Jul 2023 17:10:58 -0400 Message-Id: <20230712211115.2174650-4-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250820473295812 X-GMAIL-MSGID: 1771250820473295812 From: "Matthew Wilcox (Oracle)" copy_page_from_iter_atomic() already handles !highmem compound pages correctly, but if we are passed a highmem compound page, each base page needs to be mapped & unmapped individually. Signed-off-by: Matthew Wilcox (Oracle) Signed-off-by: Kent Overstreet --- lib/iov_iter.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 960223ed91..f9c4bba272 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -857,24 +857,37 @@ size_t iov_iter_zero(size_t bytes, struct iov_iter *i) } EXPORT_SYMBOL(iov_iter_zero); -size_t copy_page_from_iter_atomic(struct page *page, unsigned offset, size_t bytes, - struct iov_iter *i) +size_t copy_page_from_iter_atomic(struct page *page, unsigned offset, + size_t bytes, struct iov_iter *i) { - char *kaddr = kmap_atomic(page), *p = kaddr + offset; - if (!page_copy_sane(page, offset, bytes)) { - kunmap_atomic(kaddr); + size_t n, copied = 0; + + if (!page_copy_sane(page, offset, bytes)) return 0; - } - if (WARN_ON_ONCE(!i->data_source)) { - kunmap_atomic(kaddr); + if (WARN_ON_ONCE(!i->data_source)) return 0; - } - iterate_and_advance(i, bytes, base, len, off, - copyin(p + off, base, len), - memcpy_from_iter(i, p + off, base, len) - ) - kunmap_atomic(kaddr); - return bytes; + + do { + char *p; + + n = bytes - copied; + if (PageHighMem(page)) { + page += offset / PAGE_SIZE; + offset %= PAGE_SIZE; + n = min_t(size_t, n, PAGE_SIZE - offset); + } + + p = kmap_atomic(page) + offset; + iterate_and_advance(i, n, base, len, off, + copyin(p + off, base, len), + memcpy_from_iter(i, p + off, base, len) + ) + kunmap_atomic(p); + copied += n; + offset += n; + } while (PageHighMem(page) && copied != bytes && n > 0); + + return copied; } EXPORT_SYMBOL(copy_page_from_iter_atomic); From patchwork Wed Jul 12 21:10:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119335 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1418732vqm; Wed, 12 Jul 2023 14:13:34 -0700 (PDT) X-Google-Smtp-Source: APBJJlEtHk8VqcT0E4Xxy8zoqnGrbIGfpJ2zE5M5kGAkYHrj7A+aBm3sqgY7djnmXmpXegZSgHsy X-Received: by 2002:a17:90b:4017:b0:263:d249:9b7 with SMTP id ie23-20020a17090b401700b00263d24909b7mr20305547pjb.25.1689196413743; Wed, 12 Jul 2023 14:13:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196413; cv=none; d=google.com; s=arc-20160816; b=sHhuL7IWRiUu3UQr3a/I5kX1wqajcbVEO1wipHiRd8+rKBxUZojfS/ogwn86Izs0T0 VnVymkVq/GFKpZ8LzrHfPdu2W6y47GkKeLA9S9bX7oUDJT8Mz4qg8k5DxZGkC/9/vxfc jceO7PkHphtbaPVmXTONEjtG0J30X6GEGPsCkjGK/iSMJcN4SulZGvgyQAvVfyaSX7PL rAoPUlefeTYfWZYvbpHXvBoSsX4yJhyeecFSqYKyG0t4Nx2Mlu4IClx3xJvnxulNSa1H wiHJ6Acm/6npBrIQlM60ObGe0bqCOdid5KWFZGxF7B8+ZbiHpnoDcA97/eLA8g8jgkNx GzBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1JvFlUnJNg/19MdiHLNUIX73kgMJww+dfgCblmEcu1U=; fh=X1xVsMjCte3zcvuWzalFIVtHJR6TxO9Ve1o2n77k4FI=; b=gjBVcL5VVNAAkPrJAtnPfHw3yryjU0lhHITm/SBqyrmNl7ox42yUpiomBpnW3yABUw UjdfZt+stw+8saDNtAuSB5LxmhzRWOt7y1RoKpL9Z99Ty25xSzooq9USlfrBGa1KUWcT ZnkVD0oYFl8GPNnEHNBuLRyBcnrKCe8Qd6xWbB76ljg6tKDv952AnAdtaNjpFQpE6ywm ykIJ4xSKu1ngUSTU+8xRYWNU9RB6dZksntP7bMKmHopOkUsw5+M0x5eNZmmGngiQiSFq iEMnuKMIpugWTZhOKoDbydvwOp1OQ3g+erZZs1/3kIxk0LUO1d2ZTPG6GesQzep7AAt9 WcEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=ioo7Hlb0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c6-20020a6566c6000000b0051b70b1f1f5si3831955pgw.608.2023.07.12.14.13.17; Wed, 12 Jul 2023 14:13:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=ioo7Hlb0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232334AbjGLVMJ (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232373AbjGLVLn (ORCPT ); Wed, 12 Jul 2023 17:11:43 -0400 Received: from out-41.mta1.migadu.com (out-41.mta1.migadu.com [95.215.58.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7DC82116 for ; Wed, 12 Jul 2023 14:11:35 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196293; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1JvFlUnJNg/19MdiHLNUIX73kgMJww+dfgCblmEcu1U=; b=ioo7Hlb05gzTDWYnW+QeyN9R+3fGtpTq8//vnD2VrzbgJKDTQEkVCE4P4f2TYbuiCQhSbu sec4FOu9SqqU17hb0GbaFF3qcgRtj0mZbf7jTv8vr/R9kAlIggYzlRhurx6BhRUWxiUewA qPzUxqlRuNs66nkA93vgzfPg3zuiRmw= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , linux-block@vger.kernel.org, Jens Axboe , Kent Overstreet Subject: [PATCH 04/20] block: Add some exports for bcachefs Date: Wed, 12 Jul 2023 17:10:59 -0400 Message-Id: <20230712211115.2174650-5-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250818745320441 X-GMAIL-MSGID: 1771250818745320441 From: Kent Overstreet - bio_set_pages_dirty(), bio_check_pages_dirty() - dio path - blk_status_to_str() - error messages - bio_add_folio() - this should definitely be exported for everyone, it's the modern version of bio_add_page() Signed-off-by: Kent Overstreet Cc: linux-block@vger.kernel.org Cc: Jens Axboe Signed-off-by: Kent Overstreet --- block/bio.c | 2 ++ block/blk-core.c | 1 + block/blk.h | 1 - include/linux/blkdev.h | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/block/bio.c b/block/bio.c index 043944fd46..1e75840d17 100644 --- a/block/bio.c +++ b/block/bio.c @@ -1481,6 +1481,7 @@ void bio_set_pages_dirty(struct bio *bio) set_page_dirty_lock(bvec->bv_page); } } +EXPORT_SYMBOL_GPL(bio_set_pages_dirty); /* * bio_check_pages_dirty() will check that all the BIO's pages are still dirty. @@ -1540,6 +1541,7 @@ void bio_check_pages_dirty(struct bio *bio) spin_unlock_irqrestore(&bio_dirty_lock, flags); schedule_work(&bio_dirty_work); } +EXPORT_SYMBOL_GPL(bio_check_pages_dirty); static inline bool bio_remaining_done(struct bio *bio) { diff --git a/block/blk-core.c b/block/blk-core.c index 1da77e7d62..b7b0237c36 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -205,6 +205,7 @@ const char *blk_status_to_str(blk_status_t status) return ""; return blk_errors[idx].name; } +EXPORT_SYMBOL_GPL(blk_status_to_str); /** * blk_sync_queue - cancel any pending callbacks on a queue diff --git a/block/blk.h b/block/blk.h index 45547bcf11..f20f9ca03e 100644 --- a/block/blk.h +++ b/block/blk.h @@ -251,7 +251,6 @@ static inline void bio_integrity_free(struct bio *bio) unsigned long blk_rq_timeout(unsigned long timeout); void blk_add_timer(struct request *req); -const char *blk_status_to_str(blk_status_t status); bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio, unsigned int nr_segs); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index c0ffe203a6..7a32dc98e1 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -854,6 +854,7 @@ extern const char *blk_op_str(enum req_op op); int blk_status_to_errno(blk_status_t status); blk_status_t errno_to_blk_status(int errno); +const char *blk_status_to_str(blk_status_t status); /* only poll the hardware once, don't continue until a completion was found */ #define BLK_POLL_ONESHOT (1 << 0) From patchwork Wed Jul 12 21:11:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119349 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1421750vqm; Wed, 12 Jul 2023 14:19:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlG5oUhSUF3jx9bEZvqSnHllYt34+LvUdKpQ1DS3dWbhpM2rWvE7iUCQryljbfqWh6S5jMhA X-Received: by 2002:ac2:58ca:0:b0:4fb:925f:8be1 with SMTP id u10-20020ac258ca000000b004fb925f8be1mr15858279lfo.45.1689196758506; Wed, 12 Jul 2023 14:19:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196758; cv=none; d=google.com; s=arc-20160816; b=gYoS8jBBKcKuoGJXbyoyQiVOQaJA4VGtqBXdGLGVBEjjiAu/U6lYQADf9UUHpGR1TK 3521j+3ZTunRkGeMiOaETnztaf6rzJDOXNZ30CWImZ6RYoJAzEC/3wk2a9XpXS70vgkw tMuuUUxqUzea1a4OQP1K2I7RFtLvVtoFORFwq4121zV30/bqSUDhMsE5DlOT+U9RLT4T tlTjYeMDk4ZNPhp6V8sI9vogKa4Ren7nJBhsudVaq5qJv+E+Im6bWak8YrUw7NwRtaxX ic4kVXRy8ijuCjLcaAbpYOIP9LuWnwS0s4inSXdvP7oCD/lUfavfJ3uYpDnTl5Rlltov MWqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=t8R8a1McseA9yHEzYOxyXGPVlvlW3Oa2+9zEDFiMSek=; fh=sJsWSBWPIJkgSwI17z85AO/Im+IjRvWcbiPnY4aG1N4=; b=GySjrAksm5Tpqov6YCaEppyhgX6kDFRQHxfYyvhmw+xo8eFWp8CvonWmbIvCS7CKU8 ay7aQzF8ROM2UvMyYnthFcNPZdI62AcE46BuAv2Y2UVF6sFAA8QfIukeVHYdrPoESZ0H /je6MdARoPkNx9zQOFL6QnODlxVI28iAr1m23pqu2LJQb2Qsra4gCXqC8PueLhe0TEf/ zXqWtL/mArhi1kiuN1aYX+A/dN3QDh2oyVE3sTIINyD3CebD+ygwMhhj5tBg5LBf1GGI twlKgf/VJqI86ywWOD9D0J3uIsvLPe264QkuaAKmKe6sxaSRvnjo2ZmlnGgt6XnKHi5t Xydg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=RDJY9bec; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w10-20020aa7cb4a000000b0051e0ea53eafsi5513962edt.558.2023.07.12.14.18.53; Wed, 12 Jul 2023 14:19:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=RDJY9bec; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233090AbjGLVOK (ORCPT + 99 others); Wed, 12 Jul 2023 17:14:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233100AbjGLVNr (ORCPT ); Wed, 12 Jul 2023 17:13:47 -0400 Received: from out-56.mta1.migadu.com (out-56.mta1.migadu.com [IPv6:2001:41d0:203:375::38]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C339430E8 for ; Wed, 12 Jul 2023 14:12:07 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196294; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t8R8a1McseA9yHEzYOxyXGPVlvlW3Oa2+9zEDFiMSek=; b=RDJY9becWM6dp5APPe+W3+AhHdTbbxSheD0BdlQawbutc1QKgpGpErxhWourqz2W7amicS WJCuzEQEwd4JC+IWugS9xG/53kT6/mGiN+z6NXn9BRb98AaQoFAnpkW6neybyy/w9YpJ41 9JHr1hZHa7hMbqYWmdClwFy3NRwx89g= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Jens Axboe , linux-block@vger.kernel.org Subject: [PATCH 05/20] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset Date: Wed, 12 Jul 2023 17:11:00 -0400 Message-Id: <20230712211115.2174650-6-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251180116392020 X-GMAIL-MSGID: 1771251180116392020 bio_iov_iter_get_pages() trims the IO based on the block size of the block device the IO will be issued to. However, bcachefs is a multi device filesystem; when we're creating the bio we don't yet know which block device the bio will be submitted to - we have to handle the alignment checks elsewhere. Thus this is needed to avoid a null ptr deref. Signed-off-by: Kent Overstreet Cc: Jens Axboe Cc: linux-block@vger.kernel.org --- block/bio.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/block/bio.c b/block/bio.c index 1e75840d17..e74a04ea14 100644 --- a/block/bio.c +++ b/block/bio.c @@ -1245,7 +1245,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) struct page **pages = (struct page **)bv; ssize_t size, left; unsigned len, i = 0; - size_t offset, trim; + size_t offset; int ret = 0; /* @@ -1274,10 +1274,12 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) nr_pages = DIV_ROUND_UP(offset + size, PAGE_SIZE); - trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); - iov_iter_revert(iter, trim); + if (bio->bi_bdev) { + size_t trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); + iov_iter_revert(iter, trim); + size -= trim; + } - size -= trim; if (unlikely(!size)) { ret = -EFAULT; goto out; From patchwork Wed Jul 12 21:11:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119337 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1418784vqm; Wed, 12 Jul 2023 14:13:39 -0700 (PDT) X-Google-Smtp-Source: APBJJlFLnz7pB2e+agA14nLEdCchQMR9urd+L268gPgPPUMIAOpwqeuxJd5k1YbfluJ8RxtQuYsI X-Received: by 2002:a05:6a20:8f03:b0:12e:64e3:8e65 with SMTP id b3-20020a056a208f0300b0012e64e38e65mr19793986pzk.21.1689196419260; Wed, 12 Jul 2023 14:13:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196419; cv=none; d=google.com; s=arc-20160816; b=j3ZmA8UQlTlYozgOhp9E6xKOamN5J46aDpxzQUcdP19xzVGDMQk2I4NtA6u3YEBrv5 inlVOeZtFNWL6ivfPb3d3wntLth4ia8bUavT9RB9nOdM23Nue0as5niCP0LS5OFuXo/D yzy7qnF69Cu8YSI3MBF/r0goUk69JRZVu5H9sAPCEqdy+JZ8haC8fjaftlFWnUhkEHI6 OI2RhSse2UcXUtWh6BLpVg+5xvx3A/kbI95i2hr7QJh9xvuN+HUdqFRa66bMrhtV1/XL b/8u0bjNOVjkRRAPxL8L94Qc3JeXLcFktjErAV8VPGkuEKqIa/DRH1E+t0tK1Of1WUne kJ5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0hovXn5ip36DS/VfaxiJk0ApcnzjAAiHK50gEPXD0AU=; fh=Ej6fbvPOzWqd0bLtxhbY7g77cUGKgBTw5FTszBHv0PA=; b=v7KJJ8zZ/+66EOkSgmWRi4SXE9J8wes9839Dx1zqzhRpjVSjh4h4V476m1vLdf5E+l 3A8HuKcPizReDQ8iu7opDABF+L4be32hy3NusiKxLrYjDTZkycyKZGDdjVqSirgo5l4P GGTVPRazC+uhrSg1TBISNiy7BkFYfpjG0Aizbbv084RbhUozRFhQFrd7SSn3YS15r1sX LPLPNTRDPq+kxW1xh3aLTDUORa4Vk69dTHM5drlqslp5WD/WG5Zm9ygWsD6yhkY/YXgV 3j+8iLlj7ucauuFaEqBhxtcZfsYNNeFRtFDcyA08dj9DugCyBFPb+fm7aox22BZb+qIE jXuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=WcemNL3t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d13-20020a170902e14d00b001b000b3f132si3822320pla.298.2023.07.12.14.13.26; Wed, 12 Jul 2023 14:13:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=WcemNL3t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232648AbjGLVMP (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36838 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229506AbjGLVLv (ORCPT ); Wed, 12 Jul 2023 17:11:51 -0400 Received: from out-47.mta1.migadu.com (out-47.mta1.migadu.com [IPv6:2001:41d0:203:375::2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F08E2130 for ; Wed, 12 Jul 2023 14:11:36 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196295; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0hovXn5ip36DS/VfaxiJk0ApcnzjAAiHK50gEPXD0AU=; b=WcemNL3t7opXlf9AhNpewUVTMjWvJl+V8SwttlLTiaj6COPlMXyPbeCKoU9XJvFnhhNOa9 roGp+n2upHMzzwVHvO+a6XfY+n/LuQyLHaxs/1510WsHWDp3rxHTHr7XUAw4xTJ6tWIquM F6FxDnRwkEQJVObpHKdZtYvQYn4pPD0= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet , Jens Axboe , linux-block@vger.kernel.org Subject: [PATCH 06/20] block: Bring back zero_fill_bio_iter Date: Wed, 12 Jul 2023 17:11:01 -0400 Message-Id: <20230712211115.2174650-7-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250824327320293 X-GMAIL-MSGID: 1771250824327320293 From: Kent Overstreet This reverts 6f822e1b5d9dda3d20e87365de138046e3baa03a - this helper is used by bcachefs. Signed-off-by: Kent Overstreet Cc: Jens Axboe Cc: linux-block@vger.kernel.org --- block/bio.c | 6 +++--- include/linux/bio.h | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/block/bio.c b/block/bio.c index e74a04ea14..70b5c987bc 100644 --- a/block/bio.c +++ b/block/bio.c @@ -606,15 +606,15 @@ struct bio *bio_kmalloc(unsigned short nr_vecs, gfp_t gfp_mask) } EXPORT_SYMBOL(bio_kmalloc); -void zero_fill_bio(struct bio *bio) +void zero_fill_bio_iter(struct bio *bio, struct bvec_iter start) { struct bio_vec bv; struct bvec_iter iter; - bio_for_each_segment(bv, bio, iter) + __bio_for_each_segment(bv, bio, iter, start) memzero_bvec(&bv); } -EXPORT_SYMBOL(zero_fill_bio); +EXPORT_SYMBOL(zero_fill_bio_iter); /** * bio_truncate - truncate the bio to small size of @new_size diff --git a/include/linux/bio.h b/include/linux/bio.h index b3e7529ff5..f2620f8d18 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h @@ -484,7 +484,12 @@ extern void bio_copy_data_iter(struct bio *dst, struct bvec_iter *dst_iter, extern void bio_copy_data(struct bio *dst, struct bio *src); extern void bio_free_pages(struct bio *bio); void guard_bio_eod(struct bio *bio); -void zero_fill_bio(struct bio *bio); +void zero_fill_bio_iter(struct bio *bio, struct bvec_iter iter); + +static inline void zero_fill_bio(struct bio *bio) +{ + zero_fill_bio_iter(bio, bio->bi_iter); +} static inline void bio_release_pages(struct bio *bio, bool mark_dirty) { From patchwork Wed Jul 12 21:11:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119355 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1424795vqm; Wed, 12 Jul 2023 14:25:54 -0700 (PDT) X-Google-Smtp-Source: APBJJlEXcLlhJpRm0BQlUq+c3/CR1W3SsovWWEYxGGaO4m1hlt+2dMZXm18ImWC4g4zzwethgIDL X-Received: by 2002:a05:6a20:3c91:b0:132:f11e:6db0 with SMTP id b17-20020a056a203c9100b00132f11e6db0mr2476902pzj.4.1689197154587; Wed, 12 Jul 2023 14:25:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197154; cv=none; d=google.com; s=arc-20160816; b=1IlFcJKlbryhqWJ/rcL5zv5ZviBRdEtuL5fCPJEyyoOAB1dfVbSsFGETScf7T7C+e9 LP/+q0hm6kEFkKFMpO8tWn02RnD1FK21QxFNd3ogjtFYZUEbwUmQNepldZV41vOjwMHm w2TM9pddYvbIKf3cKLpp2tXW8faVwfOSDhSnldGt2zcdUWMfvATIMh/Sb1PQTd6o9wYR TU5B7dW2fFrz0ykDJfDM/aq8/LM9b/RVkO6pLxOwJ+L6KckQiSmIT8u2nuDdCkOmfIro Z3/rdc9BQX5MyOjRBLxuXEGobpqPV0FNHMoyo3jY7g5NQvre5tDENKYn3jMAd8gbq7DV Xh1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Jc2SO8yppwSj4LTOdw7pEtUw5DPvO0BD0neLLA1eie4=; fh=0qYLQ6xqZKk4DUiOynbUOs+PmHMyZyX+0jdx5rgjldU=; b=fltBMVmjQExoArLVUjrbLF/LY9mMQ+4fDnia2PtSLcAXCCFyY3BDuMCKSh9FPeAFJA uW4R4g4xsAmTykpCR9Qk2Q+jSjEj7+u8McD/7Aimfjh7DfHVCCn2wL6c3qWKuNd2e9pJ FmXHvoGpvFiv+cIAVQ5gdOOkcu8a2P+n1174Hz5/weipOJ6mw4XGOzSJgHMwY13F+/Ee OE9WG9xK/oLACfcIzW4R6mo8KwZ/wpamODtDVoTtwJYUXrMyT0BzLZsx8uscyAymj0VY EENWEpTg0KPvv5NY+o29J+Y/UFhdajekVPe7cAOLkExJuP8q6+sfXviu5Vakpg7ifNvk cPbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="s1P/VlJC"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x4-20020a170902ec8400b001b025aba9f2si4070525plg.22.2023.07.12.14.25.42; Wed, 12 Jul 2023 14:25:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="s1P/VlJC"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233026AbjGLVNe (ORCPT + 99 others); Wed, 12 Jul 2023 17:13:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233065AbjGLVMb (ORCPT ); Wed, 12 Jul 2023 17:12:31 -0400 Received: from out-17.mta1.migadu.com (out-17.mta1.migadu.com [IPv6:2001:41d0:203:375::11]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B1B5273F for ; Wed, 12 Jul 2023 14:11:53 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196296; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Jc2SO8yppwSj4LTOdw7pEtUw5DPvO0BD0neLLA1eie4=; b=s1P/VlJCkP6nWpZXb8P2qpMrK2E5GptKP03iEZZ+5S69GPw6QK9wR1D+R8zg54inmhxoZA oDrk+4rwKdSWH7Gh5Aw/mk4bS31lJHTNRpCVgZikGAik0uItELZCV0/ZzZyl6JQKCH8A60 1/8tXjhPPZD0zOgu/ZM8kEpqDmsBokw= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Christian Brauner , Jens Axboe Subject: [PATCH 07/20] block: Don't block on s_umount from __invalidate_super() Date: Wed, 12 Jul 2023 17:11:02 -0400 Message-Id: <20230712211115.2174650-8-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251595662473674 X-GMAIL-MSGID: 1771251595662473674 __invalidate_super() is used to flush any filesystem mounted on a device, generally on some sort of media change event. However, when unmounting a filesystem and closing the underlying block devices, we can deadlock if the block driver then calls __invalidate_device() (e.g. because the block device goes away when it is no longer in use). This happens with bcachefs on top of loopback, and can be triggered by fstests generic/042: put_super -> blkdev_put -> lo_release -> disk_force_media_change -> __invalidate_device -> get_super This isn't inherently specific to bcachefs - it hasn't shown up with other filesystems before because most other filesystems use the sget() mechanism for opening/closing block devices (and enforcing exclusion), however sget() has its own downsides and weird/sketchy behaviour w.r.t. block device open lifetime - if that ever gets fixed more code will run into this issue. The __invalidate_device() call here is really a best effort "I just yanked the device for a mounted filesystem, please try not to lose my data" - if it's ever actually needed the user has already done something crazy, and we probably shouldn't make things worse by deadlocking. Switching to a trylock seems in keeping with what the code is trying to do. If we ever get revoke() at the block layer, perhaps we would look at rearchitecting to use that instead. Signed-off-by: Kent Overstreet Cc: Christian Brauner Cc: Jens Axboe --- block/bdev.c | 2 +- fs/super.c | 40 +++++++++++++++++++++++++++++++--------- include/linux/fs.h | 1 + 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/block/bdev.c b/block/bdev.c index 21c63bfef3..a4d7e8732c 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -934,7 +934,7 @@ EXPORT_SYMBOL(lookup_bdev); int __invalidate_device(struct block_device *bdev, bool kill_dirty) { - struct super_block *sb = get_super(bdev); + struct super_block *sb = try_get_super(bdev); int res = 0; if (sb) { diff --git a/fs/super.c b/fs/super.c index 04bc62ab7d..a2decce02f 100644 --- a/fs/super.c +++ b/fs/super.c @@ -791,14 +791,7 @@ void iterate_supers_type(struct file_system_type *type, EXPORT_SYMBOL(iterate_supers_type); -/** - * get_super - get the superblock of a device - * @bdev: device to get the superblock for - * - * Scans the superblock list and finds the superblock of the file system - * mounted on the device given. %NULL is returned if no match is found. - */ -struct super_block *get_super(struct block_device *bdev) +static struct super_block *__get_super(struct block_device *bdev, bool try) { struct super_block *sb; @@ -813,7 +806,12 @@ struct super_block *get_super(struct block_device *bdev) if (sb->s_bdev == bdev) { sb->s_count++; spin_unlock(&sb_lock); - down_read(&sb->s_umount); + + if (!try) + down_read(&sb->s_umount); + else if (!down_read_trylock(&sb->s_umount)) + return NULL; + /* still alive? */ if (sb->s_root && (sb->s_flags & SB_BORN)) return sb; @@ -828,6 +826,30 @@ struct super_block *get_super(struct block_device *bdev) return NULL; } +/** + * get_super - get the superblock of a device + * @bdev: device to get the superblock for + * + * Scans the superblock list and finds the superblock of the file system + * mounted on the device given. %NULL is returned if no match is found. + */ +struct super_block *get_super(struct block_device *bdev) +{ + return __get_super(bdev, false); +} + +/** + * try_get_super - get the superblock of a device, using trylock on sb->s_umount + * @bdev: device to get the superblock for + * + * Scans the superblock list and finds the superblock of the file system + * mounted on the device given. %NULL is returned if no match is found. + */ +struct super_block *try_get_super(struct block_device *bdev) +{ + return __get_super(bdev, true); +} + /** * get_active_super - get an active reference to the superblock of a device * @bdev: device to get the superblock for diff --git a/include/linux/fs.h b/include/linux/fs.h index 133f0640fb..bd5105bc92 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2897,6 +2897,7 @@ extern struct file_system_type *get_filesystem(struct file_system_type *fs); extern void put_filesystem(struct file_system_type *fs); extern struct file_system_type *get_fs_type(const char *name); extern struct super_block *get_super(struct block_device *); +extern struct super_block *try_get_super(struct block_device *); extern struct super_block *get_active_super(struct block_device *bdev); extern void drop_super(struct super_block *sb); extern void drop_super_exclusive(struct super_block *sb); From patchwork Wed Jul 12 21:11:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119345 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419500vqm; Wed, 12 Jul 2023 14:15:04 -0700 (PDT) X-Google-Smtp-Source: APBJJlH1ivKK/6oVBq901CwKswvI++h2kLt8ah1gHauMQhR91BbkPUcQaqRbmixp9ixonQduf4o2 X-Received: by 2002:a05:6358:440a:b0:135:6d9:2399 with SMTP id z10-20020a056358440a00b0013506d92399mr20448276rwc.30.1689196504681; Wed, 12 Jul 2023 14:15:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196504; cv=none; d=google.com; s=arc-20160816; b=ZFyoA85pExTfoC3pCuYffFLC4V8yKiLmhpdC+bp9mkrq/qq9A15T8m7PikPYiFnSWO NWwTJp/VHU5XrzD7VayntbgE7enI11AGKpI8QA1DNTLlimmWyM07t327WyMgLqXSMNQN TdNyde1R2xQgcmJgyJB4RQbfEnmwmS5upwLQ9W1n6U76IXR7vff4oy7Iy+fsYyloWoTr g53neJIw0t3ZtykdhfTFopFCOMHhi0eu0qF9U3GJvARIqdVW2qcoHiADiGrKIXTlsDGD a/gYRbHpLfwl5QU2nFKm18gTilP7OA8x8HDail6HfH8JgU4SXakwmfxV8ZiLtsRWIIt2 Xd4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=R1CKn2DNdt+nUP3OEYLc0FEKerxTzeneNiYGijAjw4w=; fh=xpPT5DdtUzghAaHlmq9cGg6HfMBtQTQEi7H4Z3XK1aU=; b=ERwRdMc9ZAAd5qnWB/6BzXuINaIUEVyjLERnAT8GZnnm6UvQsQlHngL/c+5YSJgORm ZRNnrKE0JZguDLZ/wDIs4bFVopRbNgSPR5YIuTbU/6GUjhsJ3aBZ1E9Oh1/Llphv8SzN Wrf/NzIr4zA2C9fic1W39xdN6KD4Eh38SDSVg1BfOT0l+Tt4uSkKKiwcmUDQIBUhmsN0 0yRPNlkyRKIskRiOVJoeaa0iokt9Dfy9TmdZrVR2a+QQBppEA7f040sWAaNrJ2ZCcztD hUFUpFP1sCrAKDAP0n0QcHWaKI8NS+H+dFb41LzUhzojAhoE6GSs+2SQS0Jai5X9FGw/ Hlzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=iMqu0obz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c6-20020a6566c6000000b0051b70b1f1f5si3831955pgw.608.2023.07.12.14.14.51; Wed, 12 Jul 2023 14:15:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=iMqu0obz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233059AbjGLVNh (ORCPT + 99 others); Wed, 12 Jul 2023 17:13:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37830 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233072AbjGLVMc (ORCPT ); Wed, 12 Jul 2023 17:12:32 -0400 Received: from out-19.mta1.migadu.com (out-19.mta1.migadu.com [IPv6:2001:41d0:203:375::13]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B814E2D41 for ; Wed, 12 Jul 2023 14:11:54 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196297; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R1CKn2DNdt+nUP3OEYLc0FEKerxTzeneNiYGijAjw4w=; b=iMqu0obzSgUxk8RiueeHDbBtL62R5JTfm/Rvt3yepO0VtiMBp2l9Pe+w+ub+Aw7y5oxkGP x1hANWCxxV7ZCUopFQ47MI2eh+jhp8aajnfxmeDl+kcmMOlLXZSm6g7U++/vMuDWbKwC4e saeHq0eVtW/Fnowq3D8gC5RqnLQVeX0= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Christopher James Halse Rogers , Kent Overstreet Subject: [PATCH 08/20] stacktrace: Export stack_trace_save_tsk Date: Wed, 12 Jul 2023 17:11:03 -0400 Message-Id: <20230712211115.2174650-9-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250914315238499 X-GMAIL-MSGID: 1771250914315238499 From: Christopher James Halse Rogers The bcachefs module wants it, and there doesn't seem to be any reason it shouldn't be exported like the other functions. Signed-off-by: Christopher James Halse Rogers Signed-off-by: Kent Overstreet --- kernel/stacktrace.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index 9ed5ce9894..4f65824879 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c @@ -151,6 +151,7 @@ unsigned int stack_trace_save_tsk(struct task_struct *tsk, unsigned long *store, put_task_stack(tsk); return c.len; } +EXPORT_SYMBOL_GPL(stack_trace_save_tsk); /** * stack_trace_save_regs - Save a stack trace based on pt_regs into a storage array @@ -301,6 +302,7 @@ unsigned int stack_trace_save_tsk(struct task_struct *task, save_stack_trace_tsk(task, &trace); return trace.nr_entries; } +EXPORT_SYMBOL_GPL(stack_trace_save_tsk); /** * stack_trace_save_regs - Save a stack trace based on pt_regs into a storage array From patchwork Wed Jul 12 21:11:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119338 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1418842vqm; Wed, 12 Jul 2023 14:13:45 -0700 (PDT) X-Google-Smtp-Source: APBJJlFQQmMkS0i/RRtefnJ1axL1j3fZa/qmuCh09Wq+oH+ZKogDEO3eHHJTkI6Hs45no2acIAsK X-Received: by 2002:aca:241a:0:b0:3a1:e85f:33ee with SMTP id n26-20020aca241a000000b003a1e85f33eemr17206622oic.56.1689196425473; Wed, 12 Jul 2023 14:13:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196425; cv=none; d=google.com; s=arc-20160816; b=ZJQyEBHiGUWYo/Jq1Jte7BYCSu9sibWrIrx3zjOePmopslDeYHFNjzv+ZD1KN/JP/A wFDy/ez8OMfIWBaBwwE8AE9Ghe5erdI5fV3cbyUaxivy7Gg4GYN8qVIcxCicZ2lRxuTl 8jNX2sU/j2TJpIuHJOmo7cws0eR0uBt5AOpgbtUYvYd8Ht04PmENpBujSSEPHL2478Hw PqbblvEJGLD3SyhpsCfQtO0Eot/WAOQuAcvjEJfRJL7YzNwHXJNTa68MOD7sqNTl6WE4 OTVkt/Lx8bXifI2JNirdT3BNEZvr5zaYwb9PHF13fPS94PJVts6ANBB67DSKsP6H1juI oIOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FQIFhUqpaGDOWzE1yHnvTxX4EVy7v8panA3oqA36kSA=; fh=62OdPrF/gCdQkD+I1rh/oiSz2CPC/MeKrKL1hL+29TY=; b=EYvqaYkzcLsLYQBt9enCAnuztz8ef4R36141bB9Nk9YgiwqRwQ3q5j64ONGx4hZxBd 05JH11EdJy/UutvJQeUre3lM+hALlXH92EAi7qSwEJCNXxV+6RXzxSTsgTyLMA6Z/H60 Q5r2dViZ65nGi9ewxxI6UazHs9vSHjAx00ophrZ158X9+JspZfBf9zU4mhv96M2LmBZ/ EiY6mTYf2FSAvnN/qrm8McrnzE10Hna1f+7CZklu8TNQFGDbhV8e20wpavRiyDhrvuXR DgXYGMWPO2/BGrmHSuqTlRKdlghjCZRbj8+oNDPfnckQqNdDRM1fcy15VCYhl9lFFZAU T2gw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=DuRaDz8o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h9-20020a63df49000000b00553ebb05d23si3740492pgj.70.2023.07.12.14.13.32; Wed, 12 Jul 2023 14:13:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=DuRaDz8o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232714AbjGLVMX (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232726AbjGLVMA (ORCPT ); Wed, 12 Jul 2023 17:12:00 -0400 Received: from out-51.mta1.migadu.com (out-51.mta1.migadu.com [95.215.58.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC266211B for ; Wed, 12 Jul 2023 14:11:39 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196298; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FQIFhUqpaGDOWzE1yHnvTxX4EVy7v8panA3oqA36kSA=; b=DuRaDz8oKa7WhaBdL3TSBM/C20dZYJhltRM8sbfKp0t5CEqxOQnbhbTXHDch0TXpNWiWOT HlUoONNwjSA+t9fvp5k6w8fyp6pxL22ZBoYPwa/dEQbLxoOU4KkMCjUs8O3BOmo1pQ0O20 sqWLZy4zHvQG/vEpVSvzhmTPJei8u+w= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet Subject: [PATCH 09/20] lib/string_helpers: string_get_size() now returns characters wrote Date: Wed, 12 Jul 2023 17:11:04 -0400 Message-Id: <20230712211115.2174650-10-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250831006460621 X-GMAIL-MSGID: 1771250831006460621 From: Kent Overstreet printbuf now needs to know the number of characters that would have been written if the buffer was too small, like snprintf(); this changes string_get_size() to return the the return value of snprintf(). Signed-off-by: Kent Overstreet --- include/linux/string_helpers.h | 4 ++-- lib/string_helpers.c | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h index fae6beaaa2..44148f8feb 100644 --- a/include/linux/string_helpers.h +++ b/include/linux/string_helpers.h @@ -23,8 +23,8 @@ enum string_size_units { STRING_UNITS_2, /* use binary powers of 2^10 */ }; -void string_get_size(u64 size, u64 blk_size, enum string_size_units units, - char *buf, int len); +int string_get_size(u64 size, u64 blk_size, enum string_size_units units, + char *buf, int len); int parse_int_array_user(const char __user *from, size_t count, int **array); diff --git a/lib/string_helpers.c b/lib/string_helpers.c index 230020a2e0..b9a34eb386 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c @@ -31,9 +31,11 @@ * giving the size in the required units. @buf should have room for * at least 9 bytes and will always be zero terminated. * + * Return value: number of characters of output that would have been written + * (which may be greater than len, if output was truncated). */ -void string_get_size(u64 size, u64 blk_size, const enum string_size_units units, - char *buf, int len) +int string_get_size(u64 size, u64 blk_size, const enum string_size_units units, + char *buf, int len) { static const char *const units_10[] = { "B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" @@ -126,8 +128,8 @@ void string_get_size(u64 size, u64 blk_size, const enum string_size_units units, else unit = units_str[units][i]; - snprintf(buf, len, "%u%s %s", (u32)size, - tmp, unit); + return snprintf(buf, len, "%u%s %s", (u32)size, + tmp, unit); } EXPORT_SYMBOL(string_get_size); From patchwork Wed Jul 12 21:11:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119348 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1421579vqm; Wed, 12 Jul 2023 14:18:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlHfEeCs6/jIeIUWESbMR/AQ6vZXiXgCTpaDZQ9UOUAaksVqa6JsTF2OTYIQnpmZyR+JP9XA X-Received: by 2002:a17:906:17cc:b0:988:9ec1:a8c5 with SMTP id u12-20020a17090617cc00b009889ec1a8c5mr21473943eje.55.1689196738086; Wed, 12 Jul 2023 14:18:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196738; cv=none; d=google.com; s=arc-20160816; b=RKRkjj3oSeV0iOiSIvkHtT0g26BOOunCqbNANyndZJrCTU060KA3ZH9EyHu+UHNYCE ougHFv29OyS/JTeTo5TUx190YemZJ+TUhFe67jQMn/BSfeWf0nwET7abZJPSykNV0EXo Yc6iWyUwyaro2zNhpVw1iky5g9vef4ve0lZDbMgodNfM26nKGRf4xqwWIVo0QVqqnJlE Oumia4G2AVpmZcnsTgxGoM34UycYyfrH+uj1LsyXueuF7Ci8iK+S0etz3l9s31oBe/7Q SkPJHBV8hPPiSsQqtACyWjXkfOIPb3TPc3I/h8hN4XNP8887oQ140HePhltnbj506yja ma+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FgPTsx8pxcoWZIr644eHDkqshUBzFFLPFWwXDp/ZtBk=; fh=zxOuvRXbiLqBYqS3N3sFdzaijbMtuaLtE23QOX6Mdd4=; b=QmDWNI0bv1jG+tpHcUn/mpIbSjuiaFc0w06Uy74s6DgH4M4fownVKibtkFSz8nr6HS Gt3CmH+O4O2MYN3aOxEKg/abYcxW71cl5buzf2BMhsbSrWleDwG18sj0E8cPW7T0gy8h 78pUJA3cZg6ZhgTOJjl/oYuY3/9cJXzmJAF/0rUyZBWVIdly4PMqwgKdATTLIbRojODm 43m/Glyk52ZKKkDWAx0q1zoN3gl+wd+Ggz0v+rZF5ETk1Nhhug3RmDM3LhrXBKSCNXbi wUYJPvThpIHTBmaiyxyBCCdpSJI3TkDPtEgLlHRPkneEinpxe8QDKDlizJGc6hF9CxbS miYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=MaadSe8H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qq5-20020a17090720c500b0098283e90548si5051811ejb.570.2023.07.12.14.18.33; Wed, 12 Jul 2023 14:18:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=MaadSe8H; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232769AbjGLVMl (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232504AbjGLVMB (ORCPT ); Wed, 12 Jul 2023 17:12:01 -0400 Received: from out-22.mta1.migadu.com (out-22.mta1.migadu.com [95.215.58.22]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B877E2123 for ; Wed, 12 Jul 2023 14:11:40 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196299; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FgPTsx8pxcoWZIr644eHDkqshUBzFFLPFWwXDp/ZtBk=; b=MaadSe8HAdi5l+GroqZDTiy6Zc9HYZcts9hC2RyMeG8K2XIJm69E1XG5u6QYQa+hjTLtHP e24oHmWBgTXlsCfT77PoeFe276ZwnbrDfympEOTD60FMh5VFXOsxQtMVjae4CxTiW9/zv2 Tw9k+sD22DrofRML8nSy90QSwb5I7v4= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Christopher James Halse Rogers Subject: [PATCH 10/20] lib: Export errname Date: Wed, 12 Jul 2023 17:11:05 -0400 Message-Id: <20230712211115.2174650-11-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251158898168482 X-GMAIL-MSGID: 1771251158898168482 errname() returns the name of an errcode; this functionality is otherwise only available for error pointers via %pE - bcachefs uses this for better error messages. Signed-off-by: Christopher James Halse Rogers Signed-off-by: Kent Overstreet --- lib/errname.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/errname.c b/lib/errname.c index 67739b174a..dd1b998552 100644 --- a/lib/errname.c +++ b/lib/errname.c @@ -228,3 +228,4 @@ const char *errname(int err) return err > 0 ? name + 1 : name; } +EXPORT_SYMBOL(errname); From patchwork Wed Jul 12 21:11:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119344 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419380vqm; Wed, 12 Jul 2023 14:14:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlE9QhDelgyetWiLvF35dAcPAPJyRUA9xgejKZKNN1bQ6EJ/o3tQ4huE18wRT7Vg47faOIuH X-Received: by 2002:a17:90b:384e:b0:262:e821:b3f8 with SMTP id nl14-20020a17090b384e00b00262e821b3f8mr19759512pjb.38.1689196488814; Wed, 12 Jul 2023 14:14:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196488; cv=none; d=google.com; s=arc-20160816; b=g2EQM68dO1LwIRcnn8MKrHH6/gIF+VoztEmmgWc5l0JcI4wdnDeyMsxqxs40Gt/Kjr oIUnw6cWKZrmU5MeLANNHucB6JAe9GXphUNqQRydzFc85H3kcR/FgQGzT4kEqTlP+DCi ITLTCmMTlXLMgmYMf7IjkY9auNbG+PGjFL1yCX4P3dFeFR2bXy2L2MjjuHmSglEnxzUD DM406hnBoiOYYPQfJLPggZ2nTwq6Vk9H9AResJFU37QvQeEkiTqxjFEMJ3Sz+Gu0q2Zg BxwyiV5SL6Sitn4AKCeX9wyAOnshMxAPHr5I3ylL35w2D3pUHCz0GK/Clz8lqPtpFL/e mM5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/zrRAhLqNEKhRrIoVgPZyeRn+CDbvH7B3D4IIgSyFSc=; fh=dmtM+oJxYHkPqRZ2HFgrV1pqUbL1V/FoDlFt2WyrhS0=; b=DurjI4O12+wXmRC3WxSjUG3L++OKlDdSVj9/Bvt5HNKWIhCAGv+JcQpiwfxMOSUMe0 b/usSTa3Ck1TguOU0mn/78UNAFdiPCobfVDTcs7b/RLLlb6h7N27xrmkCIcbkddUITNu ci7+iQF/rPc6WMlcdUURKeWS8QfsT2wjg4yv8zR+lVXJJZ+yT3MZahVcBVy7Ko7fuH/z bvk6QJuWdosqSVCy8yE27veT19hHOU8E/dwrNuz4hR+fh+qvvvYX5L88GhMj3SmnhWOc kltGdGQl5erJz5SHbR6MHOmEV3Axn5jvLrGAXnj/WDqL9ZjXLeBuT/lVlO9XT4IUD+qY 1b4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=H2CyNxWG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bs193-20020a6328ca000000b0054201a3f08dsi3566210pgb.592.2023.07.12.14.14.36; Wed, 12 Jul 2023 14:14:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=H2CyNxWG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232674AbjGLVMh (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232671AbjGLVMC (ORCPT ); Wed, 12 Jul 2023 17:12:02 -0400 Received: from out-13.mta1.migadu.com (out-13.mta1.migadu.com [IPv6:2001:41d0:203:375::d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B46A213C for ; Wed, 12 Jul 2023 14:11:42 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196300; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/zrRAhLqNEKhRrIoVgPZyeRn+CDbvH7B3D4IIgSyFSc=; b=H2CyNxWGCE3tivzrg2wKis0Fi1baP6oPMbzsQ9Vph9f3q/hlsngS4aMYt/197qAIh8IcH1 5SfVqNPTjdnhOXSN3oB7KxOEWArW+m2E5FnG/AzvN/yw14BF1ZU23+aXp6Tp2TfMzTqyX9 aeXA4uTnJ/+mhn5UXz88dfILMGDoxTM= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Peter Zijlstra , Ingo Molnar , Waiman Long , Boqun Feng Subject: [PATCH 11/20] locking/osq: Export osq_(lock|unlock) Date: Wed, 12 Jul 2023 17:11:06 -0400 Message-Id: <20230712211115.2174650-12-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250897817313631 X-GMAIL-MSGID: 1771250897817313631 These are used by bcachefs's six locks. Signed-off-by: Kent Overstreet Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Waiman Long Cc: Boqun Feng --- kernel/locking/osq_lock.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c index d5610ad52b..b752ec5cc6 100644 --- a/kernel/locking/osq_lock.c +++ b/kernel/locking/osq_lock.c @@ -203,6 +203,7 @@ bool osq_lock(struct optimistic_spin_queue *lock) return false; } +EXPORT_SYMBOL_GPL(osq_lock); void osq_unlock(struct optimistic_spin_queue *lock) { @@ -230,3 +231,4 @@ void osq_unlock(struct optimistic_spin_queue *lock) if (next) WRITE_ONCE(next->locked, 1); } +EXPORT_SYMBOL_GPL(osq_unlock); From patchwork Wed Jul 12 21:11:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119340 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419085vqm; Wed, 12 Jul 2023 14:14:12 -0700 (PDT) X-Google-Smtp-Source: APBJJlFaWU+syL3ZVD13IhEf+y4KQqWSAZ6I9Fp4dWcDVzsbfYcqcA0lcY2fFiSabr/mQ168wHuW X-Received: by 2002:a17:902:f68f:b0:1ae:6cf0:94eb with SMTP id l15-20020a170902f68f00b001ae6cf094ebmr19218715plg.5.1689196452255; Wed, 12 Jul 2023 14:14:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196452; cv=none; d=google.com; s=arc-20160816; b=UDwpbuRVdAVmTyQZeTQGbVmcLktjmoxbcEUUAxywyxO9TPajnGPLptP1cnoIp0W3UC a91tsSsdORu2n8eNpm+aOn40QhNMID40hfb0cv+REgXH/R8hr/+n4JXNbLOoQBze+hdr A6YeMfcZLVX7vtbEtOFtRpwk69JHc9aGWrrO66BDOWRUBb4FoX2g7/4AauWHjd/4xswm pb8EbV++sU964rlQDwWQ13n3NuVhhdOcoVdLeabZca8pchmOzSgnLT9VcuH5ic6jqlDx AHhy4YTE1ivfPHgREsPfPC97EJ8dit9fiLjgNx+LUDmd3ZtpKZ/dD2kllFIPhJ8IQro0 R9pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+lo2RRNBnyaoiZ+EfE4rFmefG4+0kR7n+T09cgyOTBQ=; fh=emVezMoj7R8aLfxE8Itu89NE/BT8utnwiAAv3fr0lk4=; b=Fn9Q3E75bHhSDJ34D5gJ2Pb1GRXHqrscuW93q8GdA25Mwk8/Ul6uYtKm84DHHfcvAe HYQULqFMOeq4Fouh2k4uN3UP8b27Q2h7YTds25YegfIelYiqA7bCMAifvjxCgc7RIUy/ asBFgj/5ZaJC8f7zXWkcn/HVMLXL1/D/QOZiLEHZ+Ws7ziycG8khpvYUj8d+XR/A69x0 WrmKyvRFplYyzDhB8sqdtOg+lKOoWI/57Uc48/LzkmFnUeXVcmtexzWAXxITFMW9w7Ez 86kTv0wRzEyuTHJCOYAXbK3wogvfKWnl7jtqRQJ9RhmiTGzCrEHLTwgD/q0EulNa3x6a PYBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=l8EM9EHx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g11-20020a170902c98b00b001b9dc05ec1esi3769225plc.291.2023.07.12.14.13.59; Wed, 12 Jul 2023 14:14:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=l8EM9EHx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231213AbjGLVMr (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232373AbjGLVMM (ORCPT ); Wed, 12 Jul 2023 17:12:12 -0400 Received: from out-32.mta1.migadu.com (out-32.mta1.migadu.com [95.215.58.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 296191FD6 for ; Wed, 12 Jul 2023 14:11:43 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196301; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+lo2RRNBnyaoiZ+EfE4rFmefG4+0kR7n+T09cgyOTBQ=; b=l8EM9EHxBN/y1vZKIFN+DNG488i6JRiZy3MV2koOiyLQz8GFBav8S3PigvkKWFSxiY3hhN M5NnHuRsrs5pn8ULLNO0xh+CVGu2z/YVGpTj/SSdScRfFKJQxPABD2g39OO4IXPCI7EnPP y3naJ0heMwozUr4gKr9BSDBK9wJwISA= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet , Coly Li Subject: [PATCH 12/20] bcache: move closures to lib/ Date: Wed, 12 Jul 2023 17:11:07 -0400 Message-Id: <20230712211115.2174650-13-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250859122927410 X-GMAIL-MSGID: 1771250859122927410 From: Kent Overstreet Prep work for bcachefs - being a fork of bcache it also uses closures Signed-off-by: Kent Overstreet Acked-by: Coly Li Reviewed-by: Randy Dunlap --- drivers/md/bcache/Kconfig | 10 +----- drivers/md/bcache/Makefile | 4 +-- drivers/md/bcache/bcache.h | 2 +- drivers/md/bcache/super.c | 1 - drivers/md/bcache/util.h | 3 +- .../md/bcache => include/linux}/closure.h | 17 +++++---- lib/Kconfig | 3 ++ lib/Kconfig.debug | 9 +++++ lib/Makefile | 2 ++ {drivers/md/bcache => lib}/closure.c | 35 +++++++++---------- 10 files changed, 43 insertions(+), 43 deletions(-) rename {drivers/md/bcache => include/linux}/closure.h (97%) rename {drivers/md/bcache => lib}/closure.c (88%) diff --git a/drivers/md/bcache/Kconfig b/drivers/md/bcache/Kconfig index 529c9d04e9..b2d10063d3 100644 --- a/drivers/md/bcache/Kconfig +++ b/drivers/md/bcache/Kconfig @@ -4,6 +4,7 @@ config BCACHE tristate "Block device as cache" select BLOCK_HOLDER_DEPRECATED if SYSFS select CRC64 + select CLOSURES help Allows a block device to be used as cache for other devices; uses a btree for indexing and the layout is optimized for SSDs. @@ -19,15 +20,6 @@ config BCACHE_DEBUG Enables extra debugging tools, allows expensive runtime checks to be turned on. -config BCACHE_CLOSURES_DEBUG - bool "Debug closures" - depends on BCACHE - select DEBUG_FS - help - Keeps all active closures in a linked list and provides a debugfs - interface to list them, which makes it possible to see asynchronous - operations that get stuck. - config BCACHE_ASYNC_REGISTRATION bool "Asynchronous device registration" depends on BCACHE diff --git a/drivers/md/bcache/Makefile b/drivers/md/bcache/Makefile index 5b87e59676..054e8a33a7 100644 --- a/drivers/md/bcache/Makefile +++ b/drivers/md/bcache/Makefile @@ -2,6 +2,6 @@ obj-$(CONFIG_BCACHE) += bcache.o -bcache-y := alloc.o bset.o btree.o closure.o debug.o extents.o\ - io.o journal.o movinggc.o request.o stats.o super.o sysfs.o trace.o\ +bcache-y := alloc.o bset.o btree.o debug.o extents.o io.o\ + journal.o movinggc.o request.o stats.o super.o sysfs.o trace.o\ util.o writeback.o features.o diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h index aebb7ef10e..c8b4914ad8 100644 --- a/drivers/md/bcache/bcache.h +++ b/drivers/md/bcache/bcache.h @@ -179,6 +179,7 @@ #define pr_fmt(fmt) "bcache: %s() " fmt, __func__ #include +#include #include #include #include @@ -192,7 +193,6 @@ #include "bcache_ondisk.h" #include "bset.h" #include "util.h" -#include "closure.h" struct bucket { atomic_t pin; diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 7e9d19fd21..35c701d542 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -2911,7 +2911,6 @@ static int __init bcache_init(void) goto err; bch_debug_init(); - closure_debug_init(); bcache_is_reboot = false; diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h index 6f3cb7c921..f61ab1bada 100644 --- a/drivers/md/bcache/util.h +++ b/drivers/md/bcache/util.h @@ -4,6 +4,7 @@ #define _BCACHE_UTIL_H #include +#include #include #include #include @@ -13,8 +14,6 @@ #include #include -#include "closure.h" - struct closure; #ifdef CONFIG_BCACHE_DEBUG diff --git a/drivers/md/bcache/closure.h b/include/linux/closure.h similarity index 97% rename from drivers/md/bcache/closure.h rename to include/linux/closure.h index c88cdc4ae4..0ec9e7bc8d 100644 --- a/drivers/md/bcache/closure.h +++ b/include/linux/closure.h @@ -155,7 +155,7 @@ struct closure { atomic_t remaining; -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES #define CLOSURE_MAGIC_DEAD 0xc054dead #define CLOSURE_MAGIC_ALIVE 0xc054a11e @@ -184,15 +184,13 @@ static inline void closure_sync(struct closure *cl) __closure_sync(cl); } -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES -void closure_debug_init(void); void closure_debug_create(struct closure *cl); void closure_debug_destroy(struct closure *cl); #else -static inline void closure_debug_init(void) {} static inline void closure_debug_create(struct closure *cl) {} static inline void closure_debug_destroy(struct closure *cl) {} @@ -200,21 +198,21 @@ static inline void closure_debug_destroy(struct closure *cl) {} static inline void closure_set_ip(struct closure *cl) { -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES cl->ip = _THIS_IP_; #endif } static inline void closure_set_ret_ip(struct closure *cl) { -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES cl->ip = _RET_IP_; #endif } static inline void closure_set_waiting(struct closure *cl, unsigned long f) { -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES cl->waiting_on = f; #endif } @@ -243,6 +241,7 @@ static inline void closure_queue(struct closure *cl) */ BUILD_BUG_ON(offsetof(struct closure, fn) != offsetof(struct work_struct, func)); + if (wq) { INIT_WORK(&cl->work, cl->work.func); BUG_ON(!queue_work(wq, &cl->work)); @@ -255,7 +254,7 @@ static inline void closure_queue(struct closure *cl) */ static inline void closure_get(struct closure *cl) { -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES BUG_ON((atomic_inc_return(&cl->remaining) & CLOSURE_REMAINING_MASK) <= 1); #else @@ -271,7 +270,7 @@ static inline void closure_get(struct closure *cl) */ static inline void closure_init(struct closure *cl, struct closure *parent) { - memset(cl, 0, sizeof(struct closure)); + cl->fn = NULL; cl->parent = parent; if (parent) closure_get(parent); diff --git a/lib/Kconfig b/lib/Kconfig index 5c2da561c5..f78bc8b425 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -505,6 +505,9 @@ config ASSOCIATIVE_ARRAY for more information. +config CLOSURES + bool + config HAS_IOMEM bool depends on !NO_IOMEM diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index ce51d4dc68..3ee25d5dae 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1637,6 +1637,15 @@ config DEBUG_NOTIFIERS This is a relatively cheap check but if you care about maximum performance, say N. +config DEBUG_CLOSURES + bool "Debug closures (bcache async widgits)" + depends on CLOSURES + select DEBUG_FS + help + Keeps all active closures in a linked list and provides a debugfs + interface to list them, which makes it possible to see asynchronous + operations that get stuck. + config BUG_ON_DATA_CORRUPTION bool "Trigger a BUG when data corruption is detected" select DEBUG_LIST diff --git a/lib/Makefile b/lib/Makefile index 876fcdeae3..7798910135 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -248,6 +248,8 @@ obj-$(CONFIG_ATOMIC64_SELFTEST) += atomic64_test.o obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o +obj-$(CONFIG_CLOSURES) += closure.o + obj-$(CONFIG_DQL) += dynamic_queue_limits.o obj-$(CONFIG_GLOB) += glob.o diff --git a/drivers/md/bcache/closure.c b/lib/closure.c similarity index 88% rename from drivers/md/bcache/closure.c rename to lib/closure.c index d8d9394a6b..b38ded00b9 100644 --- a/drivers/md/bcache/closure.c +++ b/lib/closure.c @@ -6,13 +6,12 @@ * Copyright 2012 Google, Inc. */ +#include #include -#include +#include #include #include -#include "closure.h" - static inline void closure_put_after_sub(struct closure *cl, int flags) { int r = flags & CLOSURE_REMAINING_MASK; @@ -45,6 +44,7 @@ void closure_sub(struct closure *cl, int v) { closure_put_after_sub(cl, atomic_sub_return(v, &cl->remaining)); } +EXPORT_SYMBOL(closure_sub); /* * closure_put - decrement a closure's refcount @@ -53,6 +53,7 @@ void closure_put(struct closure *cl) { closure_put_after_sub(cl, atomic_dec_return(&cl->remaining)); } +EXPORT_SYMBOL(closure_put); /* * closure_wake_up - wake up all closures on a wait list, without memory barrier @@ -74,6 +75,7 @@ void __closure_wake_up(struct closure_waitlist *wait_list) closure_sub(cl, CLOSURE_WAITING + 1); } } +EXPORT_SYMBOL(__closure_wake_up); /** * closure_wait - add a closure to a waitlist @@ -93,6 +95,7 @@ bool closure_wait(struct closure_waitlist *waitlist, struct closure *cl) return true; } +EXPORT_SYMBOL(closure_wait); struct closure_syncer { struct task_struct *task; @@ -127,8 +130,9 @@ void __sched __closure_sync(struct closure *cl) __set_current_state(TASK_RUNNING); } +EXPORT_SYMBOL(__closure_sync); -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG +#ifdef CONFIG_DEBUG_CLOSURES static LIST_HEAD(closure_list); static DEFINE_SPINLOCK(closure_list_lock); @@ -144,6 +148,7 @@ void closure_debug_create(struct closure *cl) list_add(&cl->all, &closure_list); spin_unlock_irqrestore(&closure_list_lock, flags); } +EXPORT_SYMBOL(closure_debug_create); void closure_debug_destroy(struct closure *cl) { @@ -156,8 +161,7 @@ void closure_debug_destroy(struct closure *cl) list_del(&cl->all); spin_unlock_irqrestore(&closure_list_lock, flags); } - -static struct dentry *closure_debug; +EXPORT_SYMBOL(closure_debug_destroy); static int debug_show(struct seq_file *f, void *data) { @@ -181,7 +185,7 @@ static int debug_show(struct seq_file *f, void *data) seq_printf(f, " W %pS\n", (void *) cl->waiting_on); - seq_printf(f, "\n"); + seq_puts(f, "\n"); } spin_unlock_irq(&closure_list_lock); @@ -190,18 +194,11 @@ static int debug_show(struct seq_file *f, void *data) DEFINE_SHOW_ATTRIBUTE(debug); -void __init closure_debug_init(void) +static int __init closure_debug_init(void) { - if (!IS_ERR_OR_NULL(bcache_debug)) - /* - * it is unnecessary to check return value of - * debugfs_create_file(), we should not care - * about this. - */ - closure_debug = debugfs_create_file( - "closures", 0400, bcache_debug, NULL, &debug_fops); + debugfs_create_file("closures", 0400, NULL, NULL, &debug_fops); + return 0; } -#endif +late_initcall(closure_debug_init) -MODULE_AUTHOR("Kent Overstreet "); -MODULE_LICENSE("GPL"); +#endif From patchwork Wed Jul 12 21:11:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119339 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419006vqm; Wed, 12 Jul 2023 14:14:04 -0700 (PDT) X-Google-Smtp-Source: APBJJlFffkE6RFSgJkxw2TsLCVIakYhLoG3Y3kmcPM7oXkRMpogZ7V7wwD1ytm4NIGaB3otNLUgg X-Received: by 2002:a05:6358:5e0c:b0:12b:ed77:8b66 with SMTP id q12-20020a0563585e0c00b0012bed778b66mr2449rwn.7.1689196444580; Wed, 12 Jul 2023 14:14:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196444; cv=none; d=google.com; s=arc-20160816; b=A7n873Pf/GuZMZVOBCYK3oZniKC1JeCuZonpUID/TFLvkbM6YvkN70AyKVaH5XgxOi Rdcgj2wFCVqTAnhCEk9Ufr2OMpo4p7U2AQz/wQiaCnm3BufhrYzqb7J7of2g32BMoxvM c6pD4RBF7/12le1aa/ZehadJJMPVUN45aaFfKtXoWA74c9ynoW2I/FKTjOGTM6Xf7KVy TQgNocFbQPJaxq2ZbwXg5Cf82t8DdiJQdZjMWYk3i7V/bygnlyCggz4sFsvsCm/QETbI RqR+fi2cn2NcbDaNdgwTCyAm7PqYjWLjpDlApiYzNMOYrW9IvGVkp8nSOk+gIMJA+44k gW0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fVeF8qdGbozu++IPDLbjjHcaqfjIh8LSWsUSOXCTfos=; fh=Nt6HkeEXek0sNg56urTq46bfzEYT61GVksV3VOo2Sns=; b=ibjFObaTLs3UL9sIw7ay2PnZzbdNcWLaFFckZXXfNUyFoS0IVgV4g1SiuZr0OMMqkZ kXzHwl1LE0mevUAmX3h8hI5uw8TIDm8KkJEPvp+M8Vzu4dSXMlQGHURZ16qrGSRyiBv/ Vj71ACcoXH8gl9S+8JPDg1SW3dD6Sq0mX6uapH+OnyYTtmSOvDN35CyyseS0D61hqoaA nVJ7xoyzRSYX/2UPD/PJsOW8L0MyKerGLbpu0XqgR2Fl4epeZCKTOcWWbzee/5qA6Q0A 8Oy0qWfSMDWeDDH85s8G+1Z4Mlg3IHJi+iZ8LQ8Sv0/10RQedy46Xjfu/Z4rZx6cvtKl vwNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=cFBdAGUI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y8-20020a634948000000b0053fbe7c8d3dsi3804235pgk.632.2023.07.12.14.13.52; Wed, 12 Jul 2023 14:14:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=cFBdAGUI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232876AbjGLVMo (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232835AbjGLVMN (ORCPT ); Wed, 12 Jul 2023 17:12:13 -0400 Received: from out-48.mta1.migadu.com (out-48.mta1.migadu.com [IPv6:2001:41d0:203:375::30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 461E52685 for ; Wed, 12 Jul 2023 14:11:43 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196302; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fVeF8qdGbozu++IPDLbjjHcaqfjIh8LSWsUSOXCTfos=; b=cFBdAGUI4WGMYMyD5ZIqi8uqVLBiG1mhILt6dhQGiDtMmZIkSGIQUNFuRXz7VCGPsTQo9i GiA97XdTwfpkUum+3/ob7kbFuByK5hcAYoa7mn92dBwTlmmZRx+M5jNOVzMyh9KbyABupa b/+9fgWVxkmn3yYqJWHmv3UutkzawsM= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Coly Li Subject: [PATCH 13/20] MAINTAINERS: Add entry for closures Date: Wed, 12 Jul 2023 17:11:08 -0400 Message-Id: <20230712211115.2174650-14-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250851004909123 X-GMAIL-MSGID: 1771250851004909123 closures, from bcache, are async widgets with a variety of uses. bcachefs also uses them, so they're being moved to lib/; mark them as maintained. Signed-off-by: Kent Overstreet Acked-by: Coly Li Signed-off-by: Kent Overstreet --- MAINTAINERS | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 35e1959464..314b55ecd1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5064,6 +5064,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core F: Documentation/devicetree/bindings/timer/ F: drivers/clocksource/ +CLOSURES +M: Kent Overstreet +L: linux-bcachefs@vger.kernel.org +S: Supported +C: irc://irc.oftc.net/bcache +F: include/linux/closure.h +F: lib/closure.c + CMPC ACPI DRIVER M: Thadeu Lima de Souza Cascardo M: Daniel Oliveira Nascimento From patchwork Wed Jul 12 21:11:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119341 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419135vqm; Wed, 12 Jul 2023 14:14:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlH6teZG2H0TNangQilN7Ii4ruffjdrnFBg/ZPobmgZhdWb86R3xU9FBY3sudOKQYKJ8Q2wV X-Received: by 2002:a05:6a20:3944:b0:12d:5b6:7b32 with SMTP id r4-20020a056a20394400b0012d05b67b32mr18583897pzg.3.1689196458563; Wed, 12 Jul 2023 14:14:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196458; cv=none; d=google.com; s=arc-20160816; b=Dr7DUsqOYjGRdSwZIDwe/MSs84IGd/19oG+SOzRQSvhzG0B7JcqDbx1MGzYJKpmJXB jWvmTGcMmJv+6EWSDoc1EeZjQBrUpgofxV0RfZkwRUY4+4mUplgPcrQ5JHOZKDz3IOxU OTzVQ2Su/Z6hlmehvT+RUwOcYiMAUdzyZdGoEXAikAmc3MMkGawq6jD4JhEt3kvBKIXG px0wGHiRqrGldaMvHmSHHcPKWZS/gjJ6zI6TNB2S4vFhSZYtarV4dL/kKEpyU47f24vX QLXO9MaXEc4kaH5AqPNO6G/XV7P5SdPahLMGT53d/iONqxRhZntZl8pHBytef3rJQG8I uVUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ry7U36vaXDdBTb0o6BnFM/rdvkZja/IMfv3muX44WIU=; fh=wnuNdb300kMszrJXG82woRq+Nk+bSKUyiWavcHmP0RE=; b=XPmtETp71HORHrBMxaoSKAywSieocoBv5e9pSdwgNtDn+l1SaADPFKqYgjuX1O6PAc dhbbNxy4stEBx5FHstLn3AaIjDjV/YKFJUtoiflGzeTxqMqL34nmB967T9l41ZJoYalN bdQaaxNJ9T3PssVmanuZx0SdbdczLHI+Cp/hvGlCU5a8H9dCfcHAAImtZ7dfyBTO9wLZ IiiDPnBYNEPV0kURaYUlpFcqXYgqWoLijKucqQH6xSp+JfLrb5Ijhfaihj3GhjqLq2V1 XWyiEpsJGkgkr5y86gKa/tP7o6OdRvofiF+sTM+UcVBwzxwc9kk2D6EYKZypaUZSJX53 +Zhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="H/PcQLzU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n7-20020a63ee47000000b0054405fa924fsi3812448pgk.891.2023.07.12.14.14.05; Wed, 12 Jul 2023 14:14:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="H/PcQLzU"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232984AbjGLVMv (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232877AbjGLVMV (ORCPT ); Wed, 12 Jul 2023 17:12:21 -0400 Received: from out-12.mta1.migadu.com (out-12.mta1.migadu.com [IPv6:2001:41d0:203:375::c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2892F2696 for ; Wed, 12 Jul 2023 14:11:44 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196303; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ry7U36vaXDdBTb0o6BnFM/rdvkZja/IMfv3muX44WIU=; b=H/PcQLzUY9PMMaDMDJwLi0XXcTGO8YvVfT6XKsh1JXOymc2y7ZVnR56snJOlO9Xb/Yz3l4 bRwbeCnPM3wz2EPPnP2d5RVd4IhMeXJvhurNnxpGX0g2cOGsDM/v89gyyMQcqGokab5lzL 7glFmafusrUIz1iPlOtVxrZ1QJ7bs+E= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Coly Li , Kent Overstreet Subject: [PATCH 14/20] closures: closure_wait_event() Date: Wed, 12 Jul 2023 17:11:09 -0400 Message-Id: <20230712211115.2174650-15-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250865833807222 X-GMAIL-MSGID: 1771250865833807222 From: Kent Overstreet Like wait_event() - except, because it uses closures and closure waitlists it doesn't have the restriction on modifying task state inside the condition check, like wait_event() does. Signed-off-by: Kent Overstreet Acked-by: Coly Li Signed-off-by: Kent Overstreet --- include/linux/closure.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/linux/closure.h b/include/linux/closure.h index 0ec9e7bc8d..36b4a83f9b 100644 --- a/include/linux/closure.h +++ b/include/linux/closure.h @@ -374,4 +374,26 @@ static inline void closure_call(struct closure *cl, closure_fn fn, continue_at_nobarrier(cl, fn, wq); } +#define __closure_wait_event(waitlist, _cond) \ +do { \ + struct closure cl; \ + \ + closure_init_stack(&cl); \ + \ + while (1) { \ + closure_wait(waitlist, &cl); \ + if (_cond) \ + break; \ + closure_sync(&cl); \ + } \ + closure_wake_up(waitlist); \ + closure_sync(&cl); \ +} while (0) + +#define closure_wait_event(waitlist, _cond) \ +do { \ + if (!(_cond)) \ + __closure_wait_event(waitlist, _cond); \ +} while (0) + #endif /* _LINUX_CLOSURE_H */ From patchwork Wed Jul 12 21:11:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119356 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1424912vqm; Wed, 12 Jul 2023 14:26:13 -0700 (PDT) X-Google-Smtp-Source: APBJJlF/pRMl+qnv2Id7yXOT3IsP3wCLk7uby+O26hjNUW4Rx80g+vGqxy5Dk7PkIqVfwR6nnuIH X-Received: by 2002:a17:903:230b:b0:1b8:9461:6729 with SMTP id d11-20020a170903230b00b001b894616729mr24127828plh.2.1689197173145; Wed, 12 Jul 2023 14:26:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197173; cv=none; d=google.com; s=arc-20160816; b=lWsNUNIsZsv9QOS80H0L0/ZOMm2+nluMU6YiVAiQscTUY4qEjxxTwMNfyCrMHnn9zl r+TGG1mCTBQqHFkC1vjHCaL/ZH7llNfxMbQC8txk7YSPTDVLa2BsIsMdFSw76mYtK0PJ aoHgnXhsE4kwp9UddsYtdYOxLy3SDUGXpZn64xS6hJkPEkkPYEcBc/m6baQKhH8JY8Jz 48HKggx5/LzZ3RDagm+agaERtmwvxGdg6IvyUMG3sBA9twOd3M3yKmbdvid+v7LPuie3 4Nqbp9f8YQb38ZKqpyD64GG07HxYc28NlXzBRT4/2IGvwYOELwhA2lF3XGucEtUhJfd9 5l1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=5eXxZII/AY+4X/BxaYnmkLZzUciXf9EGOnTBvq8dyQQ=; fh=hlfPiP3mSNcMUH7m+rGSJ6gyLoR35OUgPiMhVneogvk=; b=In45BmkJmLeAnwKugXIF+Ztl5lCCcMZS3pdbCTvhafvIsZsCTZ9BMropkRvfpXbkZp yVFRuZrfC/G57LPfciQ2RBBA/500nMYstbVQq5aQI5jFGLcrbMEugvcQyZIxWtZV2S4k dk0PIESeL6F9VuDNdourKqMsJ0ZWk7ylA5pLCuVG2g1ohknkKyFZW3oDCc99DGrdcKb6 hLwzahCux6A/9e8/UAk7ep26vznZHEOyzXxXOszUuDtY8xyGO7y3rh79XeLaj7Xp8GUJ RW3JFrVFWGpN7UgrjUE6iWlglM36bV3OhWBDa7PQrMVMHz+zZkhmGwaTOjMzakTsYBZV ducg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=JmsjQ2aj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x4-20020a170902ec8400b001b025aba9f2si4070525plg.22.2023.07.12.14.26.01; Wed, 12 Jul 2023 14:26:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=JmsjQ2aj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233142AbjGLVMx (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232888AbjGLVMV (ORCPT ); Wed, 12 Jul 2023 17:12:21 -0400 Received: from out-14.mta1.migadu.com (out-14.mta1.migadu.com [IPv6:2001:41d0:203:375::e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F10DF26A0 for ; Wed, 12 Jul 2023 14:11:45 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196304; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5eXxZII/AY+4X/BxaYnmkLZzUciXf9EGOnTBvq8dyQQ=; b=JmsjQ2ajsBYN3QOblqtRMGTF5kTXZyMU6AdekvlvzukOKlyd/dutSqxvKv5t5RWAgQWpgM 7Gv9ZJdbcozKP4osvPilzfhGaThul1hTjIWDql/qV8P4XoZuQN6CWcA8f/LNhh9yW5ZmMw gB+thTgZixIl8jLYzHr+5vwIp8lR1hs= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH 15/20] closures: closure_nr_remaining() Date: Wed, 12 Jul 2023 17:11:10 -0400 Message-Id: <20230712211115.2174650-16-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251614734711551 X-GMAIL-MSGID: 1771251614734711551 Factor out a new helper, which returns the number of events outstanding. Signed-off-by: Kent Overstreet --- include/linux/closure.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/closure.h b/include/linux/closure.h index 36b4a83f9b..722a586bb2 100644 --- a/include/linux/closure.h +++ b/include/linux/closure.h @@ -172,6 +172,11 @@ void __closure_wake_up(struct closure_waitlist *list); bool closure_wait(struct closure_waitlist *list, struct closure *cl); void __closure_sync(struct closure *cl); +static inline unsigned closure_nr_remaining(struct closure *cl) +{ + return atomic_read(&cl->remaining) & CLOSURE_REMAINING_MASK; +} + /** * closure_sync - sleep until a closure a closure has nothing left to wait on * @@ -180,7 +185,7 @@ void __closure_sync(struct closure *cl); */ static inline void closure_sync(struct closure *cl) { - if ((atomic_read(&cl->remaining) & CLOSURE_REMAINING_MASK) != 1) + if (closure_nr_remaining(cl) != 1) __closure_sync(cl); } From patchwork Wed Jul 12 21:11:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119342 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419168vqm; Wed, 12 Jul 2023 14:14:22 -0700 (PDT) X-Google-Smtp-Source: APBJJlFwefBOgKgnlGs8O7yxid5Bo5GubLUG8hjNQosxeWOf1yT1rfG3JrCmyFPiL+sWkDtO6nEb X-Received: by 2002:a05:6a20:8e0b:b0:132:424c:2c53 with SMTP id y11-20020a056a208e0b00b00132424c2c53mr8762355pzj.42.1689196462293; Wed, 12 Jul 2023 14:14:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196462; cv=none; d=google.com; s=arc-20160816; b=naoiJvkHGF5wiXMdCq+x372VGQaK7xE9Ahmy6CC9ncxVUWraUIL2oGt94bO7fQ0yRI iHzwSQ6t0OeHp7Iib5mTc7uJZVJEHgJ13QocXG3EwT6wCbJKC0J2L4/MqZdfI8S9iJAh Vc3NkvcOT5t5KjO7slpdJC2a1M4KTUbKcW421+rc4FQLUHQLdid8D37tSvs+W31gV6Lc QR3vAt4uTQqeWbPACq3DKnXXXbEKYxGNdmr/syMMXiRRbHnSHwvO/0MBzWmNmpc142lx OeZ0d1tyZtSmPYUQzKtTv90s4L/pljPVAehJX6lzaQdfbEWEIvrafTQK4BRNgxrNClvt VeBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3bOiJuZA7MMn1dUAKvZtsb+DsEd9kjQVDcRKBJgcodE=; fh=hlfPiP3mSNcMUH7m+rGSJ6gyLoR35OUgPiMhVneogvk=; b=oUEbbdtYbxBSSZd2SgZlgz+KWZ8b8g582/Ifybwkp9ZX5hxMnVKMMY0Y7eFtEF/Toh sF5XG4O+ld/Ckyv9QnL/oVQr14+SfW52yoHwsznHswDgLuQs12arT4TAAXmsefNos41b SbTKqaPOPmDXlxROLMzSHOuk5T40L1Iqpxk9tDAkNUo5jgi5TFerOHMJnwFmhKZx4Tg9 Z7INrG+IpXqZaQt9sL/zRxegVfVYUfq9I5C0E9f+pRbcsJR7WkY1MBRTs6ij0MsWuxNR BYltM0s/8v8WVmNwbZrSeeAbLCf7a3RwRZr/sI+PnNQ40WQpbAiUyrha7Is7TqzBiI44 Qj+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="c/TQhQif"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h9-20020a63df49000000b00553ebb05d23si3740492pgj.70.2023.07.12.14.14.09; Wed, 12 Jul 2023 14:14:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="c/TQhQif"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233186AbjGLVM4 (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37498 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232918AbjGLVMW (ORCPT ); Wed, 12 Jul 2023 17:12:22 -0400 Received: from out-54.mta1.migadu.com (out-54.mta1.migadu.com [IPv6:2001:41d0:203:375::36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A53526B6 for ; Wed, 12 Jul 2023 14:11:47 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196305; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3bOiJuZA7MMn1dUAKvZtsb+DsEd9kjQVDcRKBJgcodE=; b=c/TQhQifd2bG9jqyz1yUnKFrIEOakPDHeeO1oK5IBJDq1VPONAP28akM3gIsyeIR854AJG 3qqejI0s0GzfMz4gSD2rvZX7XdPyRuqTYK2mb2P6AXLbnKkGlBkVt+j3Mw8c6BWVgjkaNr PUN0XpbTfIjd+ambQYaCpGpRqSu5TDs= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH 16/20] closures: Add a missing include Date: Wed, 12 Jul 2023 17:11:11 -0400 Message-Id: <20230712211115.2174650-17-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250869803850133 X-GMAIL-MSGID: 1771250869803850133 Fixes building in userspace. Signed-off-by: Kent Overstreet --- lib/closure.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/closure.c b/lib/closure.c index b38ded00b9..0855e698ce 100644 --- a/lib/closure.c +++ b/lib/closure.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include From patchwork Wed Jul 12 21:11:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119343 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1419184vqm; Wed, 12 Jul 2023 14:14:24 -0700 (PDT) X-Google-Smtp-Source: APBJJlEyB133Db/QPNfa4Hf4ufvB4EV88OzoSBTOiueK7LjZEXQS8Fxw8YXE8LuxylwbjEINmm4e X-Received: by 2002:a05:6a20:3d85:b0:12c:9100:362f with SMTP id s5-20020a056a203d8500b0012c9100362fmr25573542pzi.4.1689196464293; Wed, 12 Jul 2023 14:14:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196464; cv=none; d=google.com; s=arc-20160816; b=HYIsmayraxOTy/Ne+9IhPs8yPg7qJ52+luDt/89Rd83fM+ONJWvba7FTuWWO65RED1 u1JjNpYuYhxIHEHw2Pl/Kn4w1UN/g8j/NE8bY5QHKgzkT7m3y8tit56TBjDe+cjQMnac yfGcr4YAozFWO7q/+MJTOm0kpofWYM92UlIt0ySeJkwO2YhK2dAi2Ur3mJ051tTHyxT0 880QddU5iiMcVGi5PhQXo1e4wAsaPlSZhcDXmiaW8smgQ7/YQv6XHOWj6VjoE6LvYwiJ dsd7F3g+rIQ1giQ324L0mXrmbyBBrqSKI5Pc9OOM4OHhsk4q3dWdogf9M4+vcBV1Gorf CZ9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ef7q3qIWjRvFLnHBOoY21BNEfjo+XFx+9y6P/VZtvw4=; fh=hlfPiP3mSNcMUH7m+rGSJ6gyLoR35OUgPiMhVneogvk=; b=Dwk/R1ZaTe1iRBKRMf92q8FVspx212su/D/2jcVIK/cI3OFryfhoT+0u2vjgQuYFUZ eFMvH+pQeu7XqF6LnF1yMsVTXOGOoyTRFkH63MrFslvbt4xa+viJWBMXJTzzIOZ4WGQF vC68upjIOUl0IG9oTklC5Jahy/+YjsPlBqeFJyvhPF1OkKkDTPjDCcEcGfAatUFBrQw9 Y43PwjcWvlmubYfQ0kF0k40H4EBOikiwfwVPuZIZXAgSWaowjtwaewKeCLp6CP51F5jx DRypozzFxgQ+63CXvLIcfxZQkwODsNduRhaxfCQw8f4e6z5BGIuiKoD2kq56sgxr9qbM cEGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=V+35GQt8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w35-20020a634923000000b0055b12581c75si3744554pga.675.2023.07.12.14.14.10; Wed, 12 Jul 2023 14:14:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=V+35GQt8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233207AbjGLVM6 (ORCPT + 99 others); Wed, 12 Jul 2023 17:12:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232952AbjGLVMZ (ORCPT ); Wed, 12 Jul 2023 17:12:25 -0400 Received: from out-26.mta1.migadu.com (out-26.mta1.migadu.com [95.215.58.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6F0326BC for ; Wed, 12 Jul 2023 14:11:47 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196305; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ef7q3qIWjRvFLnHBOoY21BNEfjo+XFx+9y6P/VZtvw4=; b=V+35GQt8y784/HUrNLb+TB6rbsdoyPMrMAfoSNh0ZOhpmrxTYEcTvHj5o3xPH5LnWTcVDY hIHKXccpoOUyGbM1zqOWQp0wmJMNkCFfumVBDtCdiWlukpF7eXYU4l7zS1QZduJsBejmX4 mVjzI2i8jgcaXSz6bB46LCa/wossSq8= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH 17/20] MAINTAINERS: Add entry for generic-radix-tree Date: Wed, 12 Jul 2023 17:11:12 -0400 Message-Id: <20230712211115.2174650-18-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771250872075547055 X-GMAIL-MSGID: 1771250872075547055 lib/generic-radix-tree.c is a simple radix tree that supports storing arbitrary types. Add a maintainers entry for it. Signed-off-by: Kent Overstreet --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 314b55ecd1..c3fd29247b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8670,6 +8670,13 @@ F: Documentation/devicetree/bindings/power/power?domain* F: drivers/base/power/domain*.c F: include/linux/pm_domain.h +GENERIC RADIX TREE +M: Kent Overstreet +S: Supported +C: irc://irc.oftc.net/bcache +F: include/linux/generic-radix-tree.h +F: lib/generic-radix-tree.c + GENERIC RESISTIVE TOUCHSCREEN ADC DRIVER M: Eugen Hristev L: linux-input@vger.kernel.org From patchwork Wed Jul 12 21:11:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119350 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1421969vqm; Wed, 12 Jul 2023 14:19:46 -0700 (PDT) X-Google-Smtp-Source: APBJJlHMiYPeQcbtTysu6l+5oeHTJaUde9b+By8/1XAOSZOSLy5UCSUJL7TL5fqMwgkdI+Ok5D+K X-Received: by 2002:a17:907:c004:b0:988:f1ec:7400 with SMTP id ss4-20020a170907c00400b00988f1ec7400mr19945931ejc.36.1689196786054; Wed, 12 Jul 2023 14:19:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689196786; cv=none; d=google.com; s=arc-20160816; b=WqzLi5fkruuxlaOeu8rE8WEDpFAzuqWcMod8UgjqtLHKqMzKO0hKi770UhS7o40uFm ndNf6r2eOWXBnur743MeebCE2c17CVUgllqSIrGanyIb37yoxZ4iGrG/Pneo4bqAtRvC eVb207+RwYxPTknNBrVTzF6qqeR271DyN+j5+VePbbQS//FodHks7BSZyJgOujEccLGE p4kiD7Gsls1gq/LB3g1NrwBrllkV0pDwXE5VMddI7cnwDsS3U6ig5O8L0SyaOVbZOZQN ew8Gl3lMkxFsx9Ttqyty+ZICGupnWYzNo7lEEUVTIAbat7eOJYsHhhBGakyG+kpq+tpY mqVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Xn5bEL0Ei0eSLZ8JURgH14o2MvwdOSnzFDfE6+pvE7w=; fh=62OdPrF/gCdQkD+I1rh/oiSz2CPC/MeKrKL1hL+29TY=; b=voNWIGsE52BK25hZD3GmE8ae3fsBWVW8upW28dTK91DOa2gb4C7/c7uqny+d1h+I1a jpiYz9rQbiW1Z9Iiv11HYp8JkjIe+YiYU2Go0F2lwwmpwU6JJUV7qVW5KmBqmU4EKEi1 q3+ywvA7ErmCrucNJ5gH2UBM9p4lm+OZmqv/RojBXrIeAU8/2cAje0Vscov6yZ/eli89 UVEe4hIjwZcdZJgesvFNoybZ1bXLjx2/aV+IL2gJssNEUXx67IAk4O3/PshteOS+9VMF UU1wODTe/Kqp8k9ehKaivfyJGvIfg8a9bO9GHoQySjxlcG2J5yCBE+s4W7Gn3f9K4nFi dYHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=prIbZNwB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v25-20020a170906489900b00992e21b04aasi4675562ejq.720.2023.07.12.14.19.22; Wed, 12 Jul 2023 14:19:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=prIbZNwB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233003AbjGLVOS (ORCPT + 99 others); Wed, 12 Jul 2023 17:14:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37970 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233114AbjGLVN6 (ORCPT ); Wed, 12 Jul 2023 17:13:58 -0400 Received: from out-3.mta1.migadu.com (out-3.mta1.migadu.com [IPv6:2001:41d0:203:375::3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A619D2119 for ; Wed, 12 Jul 2023 14:12:22 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196306; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Xn5bEL0Ei0eSLZ8JURgH14o2MvwdOSnzFDfE6+pvE7w=; b=prIbZNwBIuXUnvpfIhn+xwtUcXR88kKXLP66oTPIigPIrhumuCLQrJduYogig9jYymAn14 RT5C0Z9Z2fgqzx9D0ZT4psDitB0sZee9ZmXMHULgGxhF2BBhrC6hk7gmEXdRUtpDGmYUD2 WSFOGJzvpU809KWy3yH6fTc3Wjs/Yw4= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet Subject: [PATCH 18/20] lib/generic-radix-tree.c: Don't overflow in peek() Date: Wed, 12 Jul 2023 17:11:13 -0400 Message-Id: <20230712211115.2174650-19-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251208855417028 X-GMAIL-MSGID: 1771251208855417028 From: Kent Overstreet When we started spreading new inode numbers throughout most of the 64 bit inode space, that triggered some corner case bugs, in particular some integer overflows related to the radix tree code. Oops. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- include/linux/generic-radix-tree.h | 6 ++++++ lib/generic-radix-tree.c | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/linux/generic-radix-tree.h b/include/linux/generic-radix-tree.h index 107613f7d7..63080822dc 100644 --- a/include/linux/generic-radix-tree.h +++ b/include/linux/generic-radix-tree.h @@ -184,6 +184,12 @@ void *__genradix_iter_peek(struct genradix_iter *, struct __genradix *, size_t); static inline void __genradix_iter_advance(struct genradix_iter *iter, size_t obj_size) { + if (iter->offset + obj_size < iter->offset) { + iter->offset = SIZE_MAX; + iter->pos = SIZE_MAX; + return; + } + iter->offset += obj_size; if (!is_power_of_2(obj_size) && diff --git a/lib/generic-radix-tree.c b/lib/generic-radix-tree.c index f25eb111c0..7dfa88282b 100644 --- a/lib/generic-radix-tree.c +++ b/lib/generic-radix-tree.c @@ -166,6 +166,10 @@ void *__genradix_iter_peek(struct genradix_iter *iter, struct genradix_root *r; struct genradix_node *n; unsigned level, i; + + if (iter->offset == SIZE_MAX) + return NULL; + restart: r = READ_ONCE(radix->root); if (!r) @@ -184,10 +188,17 @@ void *__genradix_iter_peek(struct genradix_iter *iter, (GENRADIX_ARY - 1); while (!n->children[i]) { + size_t objs_per_ptr = genradix_depth_size(level); + + if (iter->offset + objs_per_ptr < iter->offset) { + iter->offset = SIZE_MAX; + iter->pos = SIZE_MAX; + return NULL; + } + i++; - iter->offset = round_down(iter->offset + - genradix_depth_size(level), - genradix_depth_size(level)); + iter->offset = round_down(iter->offset + objs_per_ptr, + objs_per_ptr); iter->pos = (iter->offset >> PAGE_SHIFT) * objs_per_page; if (i == GENRADIX_ARY) From patchwork Wed Jul 12 21:11:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119357 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1425551vqm; Wed, 12 Jul 2023 14:27:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlEUKI3iX2C6V9C+2kRKlLGzHXBXaUYTerHXtVfFTchxA5l8xmR87RXZt9dPE9VxmKdWKApz X-Received: by 2002:a17:907:8a24:b0:993:e85c:4ad6 with SMTP id sc36-20020a1709078a2400b00993e85c4ad6mr4514310ejc.7.1689197269328; Wed, 12 Jul 2023 14:27:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197269; cv=none; d=google.com; s=arc-20160816; b=eDtRBVncc0AYjYucS7s0+NhRi/G8cX/TMnMkamRYXLtW26/VNhL/7+rGKWQfLsFu91 Yccr7pFGtxa9yE4OK5hhIOxnYTLHukASXLy/CYg0KODMoQClGW37AqerFG//MRjSCMR/ CyJNPyu0YphnQdnMp9oTDxvJzcza3agJoBN3sI+Y3q+8KYUpbChdqb5RKdzJ6qPd/czz kMQck5MWadjgDaq+yZsuOoGLnOk6kyThaJamsPFdQOuOYVQ1eCSpxE0CLifim2vaNybs 8ujhY1Za1Gcuo5IbMgl1Krg3Vwx2bsqYA7ARSakDJN+mKx/zimKfww7lE9YVUwytoxdm Z/jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=W3IMW7979m4jEebRkm8ameWmv+95K3nEqS903wmmHh0=; fh=62OdPrF/gCdQkD+I1rh/oiSz2CPC/MeKrKL1hL+29TY=; b=wJnhsb+KregfFWm/DA9PQWM6tpD2gQjvndnypQS55PJZN0Ia9nPNjb/3PUpAJuI7oF r5kiWrn5sxjZmQFbD0R+SK+YieGtv22A0gtNZk3OWbmMlUQ4Jhkdgds4k6HzsjU7BX5I 2opAZjqxKUNrRVkgQn3VUCvjkVN6l4G6nPfYJ9qz+j13Fvi0VKTnvPHC4lyvrqHLi6s5 RmRqmMLjQV/cWsNdHV9Y4pzXBH4utiLINV1cTlY2AxD7ijDC9gIbZ3tAFMXukyOBl4zC /yRNFmV4MTOpj9omiuRs2FlEe4Tzn7zJN6NczJebRD4CmFeZzdLkmnJioUgPRSPPj2I8 c89g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=vbep1jNU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v25-20020a170906489900b00992e21b04aasi4675562ejq.720.2023.07.12.14.27.25; Wed, 12 Jul 2023 14:27:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=vbep1jNU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231918AbjGLVNA (ORCPT + 99 others); Wed, 12 Jul 2023 17:13:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232977AbjGLVM0 (ORCPT ); Wed, 12 Jul 2023 17:12:26 -0400 Received: from out-43.mta1.migadu.com (out-43.mta1.migadu.com [IPv6:2001:41d0:203:375::2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E624B271B for ; Wed, 12 Jul 2023 14:11:49 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196307; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=W3IMW7979m4jEebRkm8ameWmv+95K3nEqS903wmmHh0=; b=vbep1jNU0N7Jzwmjd5QsnkyOd0o6hFZhSLceXkvNwltVrEi2Z1ZXTcX6QCSV1gJVOc/WLF h60etV64dRc6xQYpgawuyE30Rsx0NnbZEeeAlB8x6ykzReiSTbh+XjlARtjEa2Mgg33ZbV L1xcl2iw/73hce7GxYCk6Ma+TSfCYEs= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet Subject: [PATCH 19/20] lib/generic-radix-tree.c: Add a missing include Date: Wed, 12 Jul 2023 17:11:14 -0400 Message-Id: <20230712211115.2174650-20-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251715966596445 X-GMAIL-MSGID: 1771251715966596445 From: Kent Overstreet We now need linux/limits.h for SIZE_MAX. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- include/linux/generic-radix-tree.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/linux/generic-radix-tree.h b/include/linux/generic-radix-tree.h index 63080822dc..f6cd0f909d 100644 --- a/include/linux/generic-radix-tree.h +++ b/include/linux/generic-radix-tree.h @@ -38,6 +38,7 @@ #include #include +#include #include #include #include From patchwork Wed Jul 12 21:11:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 119354 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1424555vqm; Wed, 12 Jul 2023 14:25:25 -0700 (PDT) X-Google-Smtp-Source: APBJJlEd2v336VbO8u3bvp+GwJu7YTcUmHQY8WPCX03pI7G7oBk5N/+pETvXvIUeO4riH9vH+0bY X-Received: by 2002:a05:6a20:3d87:b0:12b:e7de:6382 with SMTP id s7-20020a056a203d8700b0012be7de6382mr24502892pzi.34.1689197125572; Wed, 12 Jul 2023 14:25:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689197125; cv=none; d=google.com; s=arc-20160816; b=Fb5ANH8A/dDCePHnWwk1SyAGBRPfoIA4r4INKbqd1xmxb/zeWIKsACRhLhAUD7c3vK mXDI9tT90rCeT/tzk+d1QJytzjUVxyK37TVqJ4LpDp4WDiKMi9ixFhAzeGoZDOPiZ4n4 011/IVZLRHYA5d1sofE+A1+Kx5Kbqu7h1apIx5TX3Vyi7DxTIstbjXB0Eu/A8iAXKB2y XVWKjsxDESVBrIPSjdfB2qtHJVk6yp5JumK/R5yoZ5Pq7M7QpOvas+plvEDztQHfA+OD VGm+WxVw5I1+EtUNMtBvc3KT8DOx6SFvHL/0tOAP/fpLLyryymZln7cnkcPJAW0PXItl EVgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+ZhmCl+n4yHEwTa1THztHgqHnTTx5bTorYdBdx9eWUk=; fh=62OdPrF/gCdQkD+I1rh/oiSz2CPC/MeKrKL1hL+29TY=; b=uCWXh9eFVymBUWTAJQtG6zEWXz42TZ29TlIyjmLUbon5CpnZaqwZxjIFPkbQgDVt/j IrkEgMHQ2VCp34mKmHdA6PSaM8jScgbhGqNlHQ3qg/whoTnnWKkse+ZZsBxVd9yZEN8P IgeOJdvQ6SLKS48DPMrwOK+vz7No9NVWGEksExWjtyLKv6BqPkJ9nHxfs5tC3yCmmLVR jtZx9apwj+FmKpIUT9VT7gz/ySvut2gb8sARB3pCm70xHFjPtxGHwpQ7cGASEnjGN0cv YvT9x7rzl9QrMhK+xqii/IEVERIfJkaxEOSf9Dka9ZGgUIGSsDbzTi1pOvfXtlwCZjZM 9SWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="ar1/5lc8"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k63-20020a638442000000b0054ff42d3833si4098690pgd.336.2023.07.12.14.25.12; Wed, 12 Jul 2023 14:25:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b="ar1/5lc8"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232972AbjGLVOW (ORCPT + 99 others); Wed, 12 Jul 2023 17:14:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232977AbjGLVN7 (ORCPT ); Wed, 12 Jul 2023 17:13:59 -0400 Received: from out-36.mta1.migadu.com (out-36.mta1.migadu.com [IPv6:2001:41d0:203:375::24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91CB31FD2 for ; Wed, 12 Jul 2023 14:12:24 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1689196308; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+ZhmCl+n4yHEwTa1THztHgqHnTTx5bTorYdBdx9eWUk=; b=ar1/5lc8IAM7Z8BzOkLoU2YlkHGHAS4kG+QX0/lExGk2OoopvseIafuYmBhl6W1Zx04myh UrotI8xhx5WzEasXrp5tb/o83g6LqYA7F97RfuOWZzOD0DukizF0612so6eQyI/eC2mleu VRzaexEyVeM+X9m529dxxdoNvTHItdc= From: Kent Overstreet To: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kent Overstreet , Kent Overstreet Subject: [PATCH 20/20] lib/generic-radix-tree.c: Add peek_prev() Date: Wed, 12 Jul 2023 17:11:15 -0400 Message-Id: <20230712211115.2174650-21-kent.overstreet@linux.dev> In-Reply-To: <20230712211115.2174650-1-kent.overstreet@linux.dev> References: <20230712211115.2174650-1-kent.overstreet@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771251565190014841 X-GMAIL-MSGID: 1771251565190014841 From: Kent Overstreet This patch adds genradix_peek_prev(), genradix_iter_rewind(), and genradix_for_each_reverse(), for iterating backwards over a generic radix tree. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- include/linux/generic-radix-tree.h | 61 +++++++++++++++++++++++++++++- lib/generic-radix-tree.c | 59 +++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 1 deletion(-) diff --git a/include/linux/generic-radix-tree.h b/include/linux/generic-radix-tree.h index f6cd0f909d..c74b737699 100644 --- a/include/linux/generic-radix-tree.h +++ b/include/linux/generic-radix-tree.h @@ -117,6 +117,11 @@ static inline size_t __idx_to_offset(size_t idx, size_t obj_size) #define __genradix_cast(_radix) (typeof((_radix)->type[0]) *) #define __genradix_obj_size(_radix) sizeof((_radix)->type[0]) +#define __genradix_objs_per_page(_radix) \ + (PAGE_SIZE / sizeof((_radix)->type[0])) +#define __genradix_page_remainder(_radix) \ + (PAGE_SIZE % sizeof((_radix)->type[0])) + #define __genradix_idx_to_offset(_radix, _idx) \ __idx_to_offset(_idx, __genradix_obj_size(_radix)) @@ -180,7 +185,25 @@ void *__genradix_iter_peek(struct genradix_iter *, struct __genradix *, size_t); #define genradix_iter_peek(_iter, _radix) \ (__genradix_cast(_radix) \ __genradix_iter_peek(_iter, &(_radix)->tree, \ - PAGE_SIZE / __genradix_obj_size(_radix))) + __genradix_objs_per_page(_radix))) + +void *__genradix_iter_peek_prev(struct genradix_iter *, struct __genradix *, + size_t, size_t); + +/** + * genradix_iter_peek - get first entry at or below iterator's current + * position + * @_iter: a genradix_iter + * @_radix: genradix being iterated over + * + * If no more entries exist at or below @_iter's current position, returns NULL + */ +#define genradix_iter_peek_prev(_iter, _radix) \ + (__genradix_cast(_radix) \ + __genradix_iter_peek_prev(_iter, &(_radix)->tree, \ + __genradix_objs_per_page(_radix), \ + __genradix_obj_size(_radix) + \ + __genradix_page_remainder(_radix))) static inline void __genradix_iter_advance(struct genradix_iter *iter, size_t obj_size) @@ -203,6 +226,25 @@ static inline void __genradix_iter_advance(struct genradix_iter *iter, #define genradix_iter_advance(_iter, _radix) \ __genradix_iter_advance(_iter, __genradix_obj_size(_radix)) +static inline void __genradix_iter_rewind(struct genradix_iter *iter, + size_t obj_size) +{ + if (iter->offset == 0 || + iter->offset == SIZE_MAX) { + iter->offset = SIZE_MAX; + return; + } + + if ((iter->offset & (PAGE_SIZE - 1)) == 0) + iter->offset -= PAGE_SIZE % obj_size; + + iter->offset -= obj_size; + iter->pos--; +} + +#define genradix_iter_rewind(_iter, _radix) \ + __genradix_iter_rewind(_iter, __genradix_obj_size(_radix)) + #define genradix_for_each_from(_radix, _iter, _p, _start) \ for (_iter = genradix_iter_init(_radix, _start); \ (_p = genradix_iter_peek(&_iter, _radix)) != NULL; \ @@ -220,6 +262,23 @@ static inline void __genradix_iter_advance(struct genradix_iter *iter, #define genradix_for_each(_radix, _iter, _p) \ genradix_for_each_from(_radix, _iter, _p, 0) +#define genradix_last_pos(_radix) \ + (SIZE_MAX / PAGE_SIZE * __genradix_objs_per_page(_radix) - 1) + +/** + * genradix_for_each_reverse - iterate over entry in a genradix, reverse order + * @_radix: genradix to iterate over + * @_iter: a genradix_iter to track current position + * @_p: pointer to genradix entry type + * + * On every iteration, @_p will point to the current entry, and @_iter.pos + * will be the current entry's index. + */ +#define genradix_for_each_reverse(_radix, _iter, _p) \ + for (_iter = genradix_iter_init(_radix, genradix_last_pos(_radix));\ + (_p = genradix_iter_peek_prev(&_iter, _radix)) != NULL;\ + genradix_iter_rewind(&_iter, _radix)) + int __genradix_prealloc(struct __genradix *, size_t, gfp_t); /** diff --git a/lib/generic-radix-tree.c b/lib/generic-radix-tree.c index 7dfa88282b..41f1bcdc44 100644 --- a/lib/generic-radix-tree.c +++ b/lib/generic-radix-tree.c @@ -1,4 +1,5 @@ +#include #include #include #include @@ -212,6 +213,64 @@ void *__genradix_iter_peek(struct genradix_iter *iter, } EXPORT_SYMBOL(__genradix_iter_peek); +void *__genradix_iter_peek_prev(struct genradix_iter *iter, + struct __genradix *radix, + size_t objs_per_page, + size_t obj_size_plus_page_remainder) +{ + struct genradix_root *r; + struct genradix_node *n; + unsigned level, i; + + if (iter->offset == SIZE_MAX) + return NULL; + +restart: + r = READ_ONCE(radix->root); + if (!r) + return NULL; + + n = genradix_root_to_node(r); + level = genradix_root_to_depth(r); + + if (ilog2(iter->offset) >= genradix_depth_shift(level)) { + iter->offset = genradix_depth_size(level); + iter->pos = (iter->offset >> PAGE_SHIFT) * objs_per_page; + + iter->offset -= obj_size_plus_page_remainder; + iter->pos--; + } + + while (level) { + level--; + + i = (iter->offset >> genradix_depth_shift(level)) & + (GENRADIX_ARY - 1); + + while (!n->children[i]) { + size_t objs_per_ptr = genradix_depth_size(level); + + iter->offset = round_down(iter->offset, objs_per_ptr); + iter->pos = (iter->offset >> PAGE_SHIFT) * objs_per_page; + + if (!iter->offset) + return NULL; + + iter->offset -= obj_size_plus_page_remainder; + iter->pos--; + + if (!i) + goto restart; + --i; + } + + n = n->children[i]; + } + + return &n->data[iter->offset & (PAGE_SIZE - 1)]; +} +EXPORT_SYMBOL(__genradix_iter_peek_prev); + static void genradix_free_recurse(struct genradix_node *n, unsigned level) { if (level) {