From: Coly Li <colyli@suse.de>
To: Kent Overstreet <kent.overstreet@gmail.com>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-bcache@vger.kernel.org
Subject: Re: [PATCH 10/12] bcache: move closures to lib/
Date: Tue, 11 Jun 2019 18:25:59 +0800 [thread overview]
Message-ID: <3642ab83-d59f-4572-4cd6-3db946c8319f@suse.de> (raw)
In-Reply-To: <20190610191420.27007-11-kent.overstreet@gmail.com>
On 2019/6/11 3:14 上午, Kent Overstreet wrote:
> Prep work for bcachefs - being a fork of bcache it also uses closures
>
> Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Acked-by: Coly Li <colyli@suse.de>
Thanks.
Coly Li
> ---
> drivers/md/bcache/Kconfig | 10 +------
> drivers/md/bcache/Makefile | 6 ++--
> 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 | 28 ++++++-------------
> 10 files changed, 37 insertions(+), 44 deletions(-)
> rename {drivers/md/bcache => include/linux}/closure.h (97%)
> rename {drivers/md/bcache => lib}/closure.c (89%)
>
> diff --git a/drivers/md/bcache/Kconfig b/drivers/md/bcache/Kconfig
> index f6e0a8b3a6..3dd1d48987 100644
> --- a/drivers/md/bcache/Kconfig
> +++ b/drivers/md/bcache/Kconfig
> @@ -2,6 +2,7 @@
> config BCACHE
> tristate "Block device as cache"
> 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.
> @@ -16,12 +17,3 @@ 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.
> diff --git a/drivers/md/bcache/Makefile b/drivers/md/bcache/Makefile
> index d26b351958..2b790fb813 100644
> --- a/drivers/md/bcache/Makefile
> +++ b/drivers/md/bcache/Makefile
> @@ -2,8 +2,8 @@
>
> 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\
> - util.o writeback.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
>
> CFLAGS_request.o += -Iblock
> diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
> index fdf75352e1..ced9f1526c 100644
> --- a/drivers/md/bcache/bcache.h
> +++ b/drivers/md/bcache/bcache.h
> @@ -180,6 +180,7 @@
>
> #include <linux/bcache.h>
> #include <linux/bio.h>
> +#include <linux/closure.h>
> #include <linux/kobject.h>
> #include <linux/list.h>
> #include <linux/mutex.h>
> @@ -192,7 +193,6 @@
>
> #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 a697a3a923..da6803f280 100644
> --- a/drivers/md/bcache/super.c
> +++ b/drivers/md/bcache/super.c
> @@ -2487,7 +2487,6 @@ static int __init bcache_init(void)
> goto err;
>
> bch_debug_init();
> - closure_debug_init();
>
> return 0;
> err:
> diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
> index 00aab6abcf..8a75100c0b 100644
> --- a/drivers/md/bcache/util.h
> +++ b/drivers/md/bcache/util.h
> @@ -4,6 +4,7 @@
> #define _BCACHE_UTIL_H
>
> #include <linux/blkdev.h>
> +#include <linux/closure.h>
> #include <linux/errno.h>
> #include <linux/kernel.h>
> #include <linux/sched/clock.h>
> @@ -13,8 +14,6 @@
> #include <linux/workqueue.h>
> #include <linux/crc64.h>
>
> -#include "closure.h"
> -
> #define PAGE_SECTORS (PAGE_SIZE / 512)
>
> struct closure;
> 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 376c5e659c..308e38028c 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);
> 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 a9e56539bd..09a25af0d0 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -427,6 +427,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 d5a4a4036d..6d97985e7e 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1397,6 +1397,15 @@ config DEBUG_CREDENTIALS
>
> source "kernel/rcu/Kconfig.debug"
>
> +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 DEBUG_WQ_FORCE_RR_CPU
> bool "Force round-robin CPU selection for unbound work items"
> depends on DEBUG_KERNEL
> diff --git a/lib/Makefile b/lib/Makefile
> index 18c2be516a..2003eda127 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -193,6 +193,8 @@ obj-$(CONFIG_ATOMIC64_SELFTEST) += atomic64_test.o
>
> obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o
>
> +obj-$(CONFIG_CLOSURES) += closure.o
> +
> obj-$(CONFIG_CORDIC) += cordic.o
>
> obj-$(CONFIG_DQL) += dynamic_queue_limits.o
> diff --git a/drivers/md/bcache/closure.c b/lib/closure.c
> similarity index 89%
> rename from drivers/md/bcache/closure.c
> rename to lib/closure.c
> index 73f5319295..46cfe4c382 100644
> --- a/drivers/md/bcache/closure.c
> +++ b/lib/closure.c
> @@ -6,13 +6,12 @@
> * Copyright 2012 Google, Inc.
> */
>
> +#include <linux/closure.h>
> #include <linux/debugfs.h>
> -#include <linux/module.h>
> +#include <linux/export.h>
> #include <linux/seq_file.h>
> #include <linux/sched/debug.h>
>
> -#include "closure.h"
> -
> static inline void closure_put_after_sub(struct closure *cl, int flags)
> {
> int r = flags & CLOSURE_REMAINING_MASK;
> @@ -127,7 +126,7 @@ void __sched __closure_sync(struct closure *cl)
> }
> EXPORT_SYMBOL(__closure_sync);
>
> -#ifdef CONFIG_BCACHE_CLOSURES_DEBUG
> +#ifdef CONFIG_DEBUG_CLOSURES
>
> static LIST_HEAD(closure_list);
> static DEFINE_SPINLOCK(closure_list_lock);
> @@ -158,8 +157,6 @@ void closure_debug_destroy(struct closure *cl)
> }
> EXPORT_SYMBOL(closure_debug_destroy);
>
> -static struct dentry *closure_debug;
> -
> static int debug_seq_show(struct seq_file *f, void *data)
> {
> struct closure *cl;
> @@ -182,7 +179,7 @@ static int debug_seq_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);
> @@ -201,18 +198,11 @@ static const struct file_operations debug_ops = {
> .release = single_release
> };
>
> -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_ops);
> + debugfs_create_file("closures", 0400, NULL, NULL, &debug_ops);
> + return 0;
> }
> -#endif
> +late_initcall(closure_debug_init)
>
> -MODULE_AUTHOR("Kent Overstreet <koverstreet@google.com>");
> -MODULE_LICENSE("GPL");
> +#endif
>
--
Coly Li
next prev parent reply other threads:[~2019-06-11 10:26 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-10 19:14 bcachefs status update (it's done cooking; let's get this sucker merged) Kent Overstreet
2019-06-10 19:14 ` [PATCH 01/12] Compiler Attributes: add __flatten Kent Overstreet
2019-06-12 17:16 ` Greg KH
2019-06-10 19:14 ` [PATCH 02/12] locking: SIX locks (shared/intent/exclusive) Kent Overstreet
2019-06-10 19:14 ` [PATCH 03/12] mm: pagecache add lock Kent Overstreet
2019-06-10 19:14 ` [PATCH 04/12] mm: export find_get_pages() Kent Overstreet
2019-06-10 19:14 ` [PATCH 05/12] fs: insert_inode_locked2() Kent Overstreet
2019-06-10 19:14 ` [PATCH 06/12] fs: factor out d_mark_tmpfile() Kent Overstreet
2019-06-10 19:14 ` [PATCH 07/12] Propagate gfp_t when allocating pte entries from __vmalloc Kent Overstreet
2019-06-10 19:14 ` [PATCH 08/12] block: Add some exports for bcachefs Kent Overstreet
2019-06-10 19:14 ` [PATCH 09/12] bcache: optimize continue_at_nobarrier() Kent Overstreet
2019-06-10 19:14 ` [PATCH 10/12] bcache: move closures to lib/ Kent Overstreet
2019-06-11 10:25 ` Coly Li [this message]
2019-06-13 7:28 ` Christoph Hellwig
2019-06-13 11:04 ` Kent Overstreet
2019-06-10 19:14 ` [PATCH 11/12] closures: closure_wait_event() Kent Overstreet
2019-06-11 10:25 ` Coly Li
2019-06-12 17:17 ` Greg KH
2019-06-10 19:14 ` [PATCH 12/12] closures: fix a race on wakeup from closure_sync Kent Overstreet
2019-07-16 10:47 ` Coly Li
2019-07-18 7:46 ` Coly Li
2019-07-22 17:22 ` Kent Overstreet
2019-06-10 20:46 ` bcachefs status update (it's done cooking; let's get this sucker merged) Linus Torvalds
2019-06-11 1:17 ` Kent Overstreet
2019-06-11 4:33 ` Dave Chinner
2019-06-12 16:21 ` Kent Overstreet
2019-06-12 23:02 ` Dave Chinner
2019-06-13 18:36 ` pagecache locking (was: bcachefs status update) merged) Kent Overstreet
2019-06-13 21:13 ` Andreas Dilger
2019-06-13 21:21 ` Kent Overstreet
2019-06-14 0:35 ` Dave Chinner
2019-06-13 23:55 ` Dave Chinner
2019-06-14 2:30 ` Linus Torvalds
2019-06-14 7:30 ` Dave Chinner
2019-06-15 1:15 ` Linus Torvalds
2019-06-14 3:08 ` Linus Torvalds
2019-06-15 4:01 ` Linus Torvalds
2019-06-17 22:47 ` Dave Chinner
2019-06-17 23:38 ` Linus Torvalds
2019-06-18 4:21 ` Amir Goldstein
2019-06-19 10:38 ` Jan Kara
2019-06-19 22:37 ` Dave Chinner
2019-07-03 0:04 ` pagecache locking Boaz Harrosh
[not found] ` <DM6PR19MB250857CB8A3A1C8279D6F2F3C5FB0@DM6PR19MB2508.namprd19.prod.outlook.com>
2019-07-03 1:25 ` Boaz Harrosh
2019-07-05 23:31 ` Dave Chinner
2019-07-07 15:05 ` Boaz Harrosh
2019-07-07 23:55 ` Dave Chinner
2019-07-08 13:31 ` Jan Kara
2019-07-09 23:47 ` Dave Chinner
2019-07-10 8:41 ` Jan Kara
2019-06-14 17:08 ` pagecache locking (was: bcachefs status update) merged) Kent Overstreet
2019-06-19 8:21 ` bcachefs status update (it's done cooking; let's get this sucker merged) Jan Kara
2019-07-03 1:04 ` [PATCH] mm: Support madvise_willneed override by Filesystems Boaz Harrosh
2019-07-03 17:21 ` Jan Kara
2019-07-03 18:03 ` Boaz Harrosh
2019-06-11 4:55 ` bcachefs status update (it's done cooking; let's get this sucker merged) Linus Torvalds
2019-06-11 14:26 ` Matthew Wilcox
2019-06-11 4:10 ` Dave Chinner
2019-06-11 4:39 ` Linus Torvalds
2019-06-11 7:10 ` Dave Chinner
2019-06-12 2:07 ` Linus Torvalds
2019-07-03 5:59 ` Stefan K
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3642ab83-d59f-4572-4cd6-3db946c8319f@suse.de \
--to=colyli@suse.de \
--cc=kent.overstreet@gmail.com \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).