aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColy Li <colyli@suse.de>2018-08-09 22:30:11 +0800
committerColy Li <colyli@suse.de>2018-08-09 22:30:11 +0800
commitf8345446d91b6bd50e3fc01fad55fafc650ea3f3 (patch)
tree2ab0b4c7a024b015a47810d34e32093298392293
parent40d39c3d65a51dcd224eef11b0b38b37fbefb82c (diff)
downloadbcache-patches-f8345446d91b6bd50e3fc01fad55fafc650ea3f3.tar.gz
for-next: remove patches applied to Jens' tree
-rw-r--r--for-next/0000-cover-letter.patch56
-rw-r--r--for-next/0001-bcache-do-not-check-return-value-of-debugfs_create_d.patch131
-rw-r--r--for-next/0002-bcache-display-rate-debug-parameters-to-0-when-write.patch71
-rw-r--r--for-next/0003-bcache-avoid-unncessary-cache-prefetch-bch_btree_nod.patch52
-rw-r--r--for-next/0004-bcache-add-a-comment-in-super.c.patch28
-rw-r--r--for-next/0005-bcache-fix-mistaken-code-comments-in-bcache.h.patch33
-rw-r--r--for-next/0006-bcache-fix-mistaken-comments-in-request.c.patch29
-rw-r--r--for-next/0007-bcache-add-code-comments-for-bset.c.patch149
-rw-r--r--for-next/0008-bcache-set-max-writeback-rate-when-I-O-request-is-id.patch383
-rw-r--r--for-next/0009-bcache-make-the-pr_err-statement-used-for-ENOENT-onl.patch71
-rw-r--r--for-next/0010-bcache-trivial-remove-tailing-backslash-in-macro-BTR.patch30
11 files changed, 0 insertions, 1033 deletions
diff --git a/for-next/0000-cover-letter.patch b/for-next/0000-cover-letter.patch
deleted file mode 100644
index 60919cb..0000000
--- a/for-next/0000-cover-letter.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 1ac333e00ca5af1223d63df97e8eac012f62ba4e Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Thu, 9 Aug 2018 15:35:29 +0800
-Subject: [PATCH 00/10] bcache patches for 4.19, 2nd wave
-
-Hi Jens,
-
-Here are 2nd wave bcache patches for 4.19.
-
-The patches from me were either verified by other people or posted
-for quite long time. Except for the debugfs_create_dir() fix and
-"set max writeback rate" fix, rested patches are simple or trivial
-IMHO.
-
-Our new bcache developer Shenghui Wang contributes two patches in
-this run. The first one fixes a misleading error message, and the
-second one is a code style clean up.
-
-Thanks in advance for picking them.
-
-Coly Li
----
-Coly Li (8):
- bcache: do not check return value of debugfs_create_dir()
- bcache: display rate debug parameters to 0 when writeback is not
- running
- bcache: avoid unncessary cache prefetch bch_btree_node_get()
- bcache: add a comment in super.c
- bcache: fix mistaken code comments in bcache.h
- bcache: fix mistaken comments in request.c
- bcache: add code comments for bset.c
- bcache: set max writeback rate when I/O request is idle
-
-Shenghui Wang (2):
- bcache: make the pr_err statement used for ENOENT only in
- sysfs_attatch section
- bcache: trivial - remove tailing backslash in macro BTREE_FLAG
-
- drivers/md/bcache/bcache.h | 18 +++----
- drivers/md/bcache/bset.c | 63 ++++++++++++++++++++++++
- drivers/md/bcache/btree.c | 14 +++---
- drivers/md/bcache/btree.h | 2 +-
- drivers/md/bcache/closure.c | 13 +++--
- drivers/md/bcache/closure.h | 4 +-
- drivers/md/bcache/debug.c | 11 +++--
- drivers/md/bcache/request.c | 61 +++++++++++++++++++++--
- drivers/md/bcache/super.c | 9 +++-
- drivers/md/bcache/sysfs.c | 41 ++++++++++------
- drivers/md/bcache/util.c | 2 +-
- drivers/md/bcache/util.h | 2 +-
- drivers/md/bcache/writeback.c | 91 +++++++++++++++++++++++------------
- 13 files changed, 251 insertions(+), 80 deletions(-)
-
---
-2.18.0
-
diff --git a/for-next/0001-bcache-do-not-check-return-value-of-debugfs_create_d.patch b/for-next/0001-bcache-do-not-check-return-value-of-debugfs_create_d.patch
deleted file mode 100644
index 70a58d1..0000000
--- a/for-next/0001-bcache-do-not-check-return-value-of-debugfs_create_d.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From 3678e3fc53da440570bb61fface0d6af11f96cae Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Tue, 22 May 2018 14:29:09 +0800
-Subject: [PATCH 01/10] bcache: do not check return value of
- debugfs_create_dir()
-
-Greg KH suggests that normal code should not care about debugfs. Therefore
-no matter successful or failed of debugfs_create_dir() execution, it is
-unncessary to check its return value.
-
-There are two functions called debugfs_create_dir() and check the return
-value, which are bch_debug_init() and closure_debug_init(). This patch
-changes these two functions from int to void type, and ignore return values
-of debugfs_create_dir().
-
-This patch does not fix exact bug, just makes things work as they should.
-
-Signed-off-by: Coly Li <colyli@suse.de>
-Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Cc: stable@vger.kernel.org
-Cc: Kai Krakow <kai@kaishome.de>
-Cc: Kent Overstreet <kent.overstreet@gmail.com>
----
- drivers/md/bcache/bcache.h | 2 +-
- drivers/md/bcache/closure.c | 13 +++++++++----
- drivers/md/bcache/closure.h | 4 ++--
- drivers/md/bcache/debug.c | 11 ++++++-----
- drivers/md/bcache/super.c | 4 +++-
- 5 files changed, 21 insertions(+), 13 deletions(-)
-
-diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
-index 872ef4d67711..0a3e82b0876d 100644
---- a/drivers/md/bcache/bcache.h
-+++ b/drivers/md/bcache/bcache.h
-@@ -1001,7 +1001,7 @@ void bch_open_buckets_free(struct cache_set *);
- int bch_cache_allocator_start(struct cache *ca);
-
- void bch_debug_exit(void);
--int bch_debug_init(struct kobject *);
-+void bch_debug_init(struct kobject *kobj);
- void bch_request_exit(void);
- int bch_request_init(void);
-
-diff --git a/drivers/md/bcache/closure.c b/drivers/md/bcache/closure.c
-index 0e14969182c6..618253683d40 100644
---- a/drivers/md/bcache/closure.c
-+++ b/drivers/md/bcache/closure.c
-@@ -199,11 +199,16 @@ static const struct file_operations debug_ops = {
- .release = single_release
- };
-
--int __init closure_debug_init(void)
-+void __init closure_debug_init(void)
- {
-- closure_debug = debugfs_create_file("closures",
-- 0400, bcache_debug, NULL, &debug_ops);
-- return IS_ERR_OR_NULL(closure_debug);
-+ 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);
- }
- #endif
-
-diff --git a/drivers/md/bcache/closure.h b/drivers/md/bcache/closure.h
-index 71427eb5fdae..7c2c5bc7c88b 100644
---- a/drivers/md/bcache/closure.h
-+++ b/drivers/md/bcache/closure.h
-@@ -186,13 +186,13 @@ static inline void closure_sync(struct closure *cl)
-
- #ifdef CONFIG_BCACHE_CLOSURES_DEBUG
-
--int closure_debug_init(void);
-+void closure_debug_init(void);
- void closure_debug_create(struct closure *cl);
- void closure_debug_destroy(struct closure *cl);
-
- #else
-
--static inline int closure_debug_init(void) { return 0; }
-+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) {}
-
-diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
-index 04d146711950..12034c07257b 100644
---- a/drivers/md/bcache/debug.c
-+++ b/drivers/md/bcache/debug.c
-@@ -252,11 +252,12 @@ void bch_debug_exit(void)
- debugfs_remove_recursive(bcache_debug);
- }
-
--int __init bch_debug_init(struct kobject *kobj)
-+void __init bch_debug_init(struct kobject *kobj)
- {
-- if (!IS_ENABLED(CONFIG_DEBUG_FS))
-- return 0;
--
-+ /*
-+ * it is unnecessary to check return value of
-+ * debugfs_create_file(), we should not care
-+ * about this.
-+ */
- bcache_debug = debugfs_create_dir("bcache", NULL);
-- return IS_ERR_OR_NULL(bcache_debug);
- }
-diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
-index e0a92104ca23..c7ffa6ef3f82 100644
---- a/drivers/md/bcache/super.c
-+++ b/drivers/md/bcache/super.c
-@@ -2345,10 +2345,12 @@ static int __init bcache_init(void)
- goto err;
-
- if (bch_request_init() ||
-- bch_debug_init(bcache_kobj) || closure_debug_init() ||
- sysfs_create_files(bcache_kobj, files))
- goto err;
-
-+ bch_debug_init(bcache_kobj);
-+ closure_debug_init();
-+
- return 0;
- err:
- bcache_exit();
---
-2.18.0
-
diff --git a/for-next/0002-bcache-display-rate-debug-parameters-to-0-when-write.patch b/for-next/0002-bcache-display-rate-debug-parameters-to-0-when-write.patch
deleted file mode 100644
index a60c771..0000000
--- a/for-next/0002-bcache-display-rate-debug-parameters-to-0-when-write.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 7ee659583a709e9a0da10a9a5d3e9bc103d94853 Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Sat, 5 May 2018 20:52:33 +0800
-Subject: [PATCH 02/10] bcache: display rate debug parameters to 0 when
- writeback is not running
-
-When writeback is not running, writeback rate should be 0, other value is
-misleading. And the following dyanmic writeback rate debug parameters
-should be 0 too,
- rate, proportional, integral, change
-otherwise they are misleading when writeback is not running.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/sysfs.c | 26 ++++++++++++++++----------
- 1 file changed, 16 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
-index 225b15aa0340..3e9d3459a224 100644
---- a/drivers/md/bcache/sysfs.c
-+++ b/drivers/md/bcache/sysfs.c
-@@ -149,6 +149,7 @@ SHOW(__bch_cached_dev)
- struct cached_dev *dc = container_of(kobj, struct cached_dev,
- disk.kobj);
- const char *states[] = { "no cache", "clean", "dirty", "inconsistent" };
-+ int wb = dc->writeback_running;
-
- #define var(stat) (dc->stat)
-
-@@ -170,7 +171,7 @@ SHOW(__bch_cached_dev)
- var_printf(writeback_running, "%i");
- var_print(writeback_delay);
- var_print(writeback_percent);
-- sysfs_hprint(writeback_rate, dc->writeback_rate.rate << 9);
-+ sysfs_hprint(writeback_rate, wb ? dc->writeback_rate.rate << 9 : 0);
- sysfs_hprint(io_errors, atomic_read(&dc->io_errors));
- sysfs_printf(io_error_limit, "%i", dc->error_limit);
- sysfs_printf(io_disable, "%i", dc->io_disable);
-@@ -188,15 +189,20 @@ SHOW(__bch_cached_dev)
- char change[20];
- s64 next_io;
-
-- bch_hprint(rate, dc->writeback_rate.rate << 9);
-- bch_hprint(dirty, bcache_dev_sectors_dirty(&dc->disk) << 9);
-- bch_hprint(target, dc->writeback_rate_target << 9);
-- bch_hprint(proportional,dc->writeback_rate_proportional << 9);
-- bch_hprint(integral, dc->writeback_rate_integral_scaled << 9);
-- bch_hprint(change, dc->writeback_rate_change << 9);
--
-- next_io = div64_s64(dc->writeback_rate.next - local_clock(),
-- NSEC_PER_MSEC);
-+ /*
-+ * Except for dirty and target, other values should
-+ * be 0 if writeback is not running.
-+ */
-+ bch_hprint(rate, wb ? dc->writeback_rate.rate << 9 : 0);
-+ bch_hprint(dirty, bcache_dev_sectors_dirty(&dc->disk) << 9);
-+ bch_hprint(target, dc->writeback_rate_target << 9);
-+ bch_hprint(proportional,
-+ wb ? dc->writeback_rate_proportional << 9 : 0);
-+ bch_hprint(integral,
-+ wb ? dc->writeback_rate_integral_scaled << 9 : 0);
-+ bch_hprint(change, wb ? dc->writeback_rate_change << 9 : 0);
-+ next_io = wb ? div64_s64(dc->writeback_rate.next-local_clock(),
-+ NSEC_PER_MSEC) : 0;
-
- return sprintf(buf,
- "rate:\t\t%s/sec\n"
---
-2.18.0
-
diff --git a/for-next/0003-bcache-avoid-unncessary-cache-prefetch-bch_btree_nod.patch b/for-next/0003-bcache-avoid-unncessary-cache-prefetch-bch_btree_nod.patch
deleted file mode 100644
index bef5596..0000000
--- a/for-next/0003-bcache-avoid-unncessary-cache-prefetch-bch_btree_nod.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 3fc57055129d0f3f0002643ca28bcc242c974b02 Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Mon, 26 Mar 2018 15:05:08 +0800
-Subject: [PATCH 03/10] bcache: avoid unncessary cache prefetch
- bch_btree_node_get()
-
-In bch_btree_node_get() the read-in btree node will be partially
-prefetched into L1 cache for following bset iteration (if there is).
-But if the btree node read is failed, the perfetch operations will
-waste L1 cache space. This patch checkes whether read operation and
-only does cache prefetch when read I/O succeeded.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/btree.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
-index 475008fbbaab..c19f7716df88 100644
---- a/drivers/md/bcache/btree.c
-+++ b/drivers/md/bcache/btree.c
-@@ -1011,6 +1011,13 @@ struct btree *bch_btree_node_get(struct cache_set *c, struct btree_op *op,
- BUG_ON(b->level != level);
- }
-
-+ if (btree_node_io_error(b)) {
-+ rw_unlock(write, b);
-+ return ERR_PTR(-EIO);
-+ }
-+
-+ BUG_ON(!b->written);
-+
- b->parent = parent;
- b->accessed = 1;
-
-@@ -1022,13 +1029,6 @@ struct btree *bch_btree_node_get(struct cache_set *c, struct btree_op *op,
- for (; i <= b->keys.nsets; i++)
- prefetch(b->keys.set[i].data);
-
-- if (btree_node_io_error(b)) {
-- rw_unlock(write, b);
-- return ERR_PTR(-EIO);
-- }
--
-- BUG_ON(!b->written);
--
- return b;
- }
-
---
-2.18.0
-
diff --git a/for-next/0004-bcache-add-a-comment-in-super.c.patch b/for-next/0004-bcache-add-a-comment-in-super.c.patch
deleted file mode 100644
index a5d8b6a..0000000
--- a/for-next/0004-bcache-add-a-comment-in-super.c.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From ec367ac0b48e43f6e8707ab10864f8ffd5220f5e Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Mon, 20 Nov 2017 16:53:48 +0800
-Subject: [PATCH 04/10] bcache: add a comment in super.c
-
-This patch adds a line of code comment in super.c:register_bdev(), to
-make code to be more comprehensible.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/super.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
-index c7ffa6ef3f82..f517d7d1fa10 100644
---- a/drivers/md/bcache/super.c
-+++ b/drivers/md/bcache/super.c
-@@ -1291,6 +1291,7 @@ static void register_bdev(struct cache_sb *sb, struct page *sb_page,
- pr_info("registered backing device %s", dc->backing_dev_name);
-
- list_add(&dc->list, &uncached_devices);
-+ /* attch to a matched cache set if it exists */
- list_for_each_entry(c, &bch_cache_sets, list)
- bch_cached_dev_attach(dc, c, NULL);
-
---
-2.18.0
-
diff --git a/for-next/0005-bcache-fix-mistaken-code-comments-in-bcache.h.patch b/for-next/0005-bcache-fix-mistaken-code-comments-in-bcache.h.patch
deleted file mode 100644
index 5fae03f..0000000
--- a/for-next/0005-bcache-fix-mistaken-code-comments-in-bcache.h.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From c171ac9c60af11ec055e246d3ad50900381b905c Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Mon, 13 Nov 2017 23:55:01 +0800
-Subject: [PATCH 05/10] bcache: fix mistaken code comments in bcache.h
-
-This patch updates the code comment in struct cache with correct array
-names, to make the code to be more comprehensible.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/bcache.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
-index 0a3e82b0876d..b393b3fd06b6 100644
---- a/drivers/md/bcache/bcache.h
-+++ b/drivers/md/bcache/bcache.h
-@@ -423,9 +423,9 @@ struct cache {
- /*
- * When allocating new buckets, prio_write() gets first dibs - since we
- * may not be allocate at all without writing priorities and gens.
-- * prio_buckets[] contains the last buckets we wrote priorities to (so
-- * gc can mark them as metadata), prio_next[] contains the buckets
-- * allocated for the next prio write.
-+ * prio_last_buckets[] contains the last buckets we wrote priorities to
-+ * (so gc can mark them as metadata), prio_buckets[] contains the
-+ * buckets allocated for the next prio write.
- */
- uint64_t *prio_buckets;
- uint64_t *prio_last_buckets;
---
-2.18.0
-
diff --git a/for-next/0006-bcache-fix-mistaken-comments-in-request.c.patch b/for-next/0006-bcache-fix-mistaken-comments-in-request.c.patch
deleted file mode 100644
index d823fb9..0000000
--- a/for-next/0006-bcache-fix-mistaken-comments-in-request.c.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 00c62fb5182203fd9911736115ca9ddbcaf680a6 Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Tue, 14 Nov 2017 00:09:50 +0800
-Subject: [PATCH 06/10] bcache: fix mistaken comments in request.c
-
-This patch updates code comment in bch_keylist_realloc() by fixing
-incorrected function names, to make the code to be more comprehennsible.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/request.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
-index 43af905920f5..914d501ad1e0 100644
---- a/drivers/md/bcache/request.c
-+++ b/drivers/md/bcache/request.c
-@@ -107,7 +107,7 @@ static int bch_keylist_realloc(struct keylist *l, unsigned u64s,
- /*
- * The journalling code doesn't handle the case where the keys to insert
- * is bigger than an empty write: If we just return -ENOMEM here,
-- * bio_insert() and bio_invalidate() will insert the keys created so far
-+ * bch_data_insert_keys() will insert the keys created so far
- * and finish the rest when the keylist is empty.
- */
- if (newsize * sizeof(uint64_t) > block_bytes(c) - sizeof(struct jset))
---
-2.18.0
-
diff --git a/for-next/0007-bcache-add-code-comments-for-bset.c.patch b/for-next/0007-bcache-add-code-comments-for-bset.c.patch
deleted file mode 100644
index c14596c..0000000
--- a/for-next/0007-bcache-add-code-comments-for-bset.c.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 9879a0caf2a5c9d2143b9d386092012f50eae963 Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Thu, 12 Apr 2018 17:24:18 +0800
-Subject: [PATCH 07/10] bcache: add code comments for bset.c
-
-This patch tries to add code comments in bset.c, to make some
-tricky code and designment to be more comprehensible. Most information
-of this patch comes from the discussion between Kent and I, he
-offers very informative details. If there is any mistake
-of the idea behind the code, no doubt that's from me misrepresentation.
-
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/bset.c | 63 ++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 63 insertions(+)
-
-diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
-index f3403b45bc28..596c93b44e9b 100644
---- a/drivers/md/bcache/bset.c
-+++ b/drivers/md/bcache/bset.c
-@@ -366,6 +366,10 @@ EXPORT_SYMBOL(bch_btree_keys_init);
-
- /* Binary tree stuff for auxiliary search trees */
-
-+/*
-+ * return array index next to j when does in-order traverse
-+ * of a binary tree which is stored in a linear array
-+ */
- static unsigned inorder_next(unsigned j, unsigned size)
- {
- if (j * 2 + 1 < size) {
-@@ -379,6 +383,10 @@ static unsigned inorder_next(unsigned j, unsigned size)
- return j;
- }
-
-+/*
-+ * return array index previous to j when does in-order traverse
-+ * of a binary tree which is stored in a linear array
-+ */
- static unsigned inorder_prev(unsigned j, unsigned size)
- {
- if (j * 2 < size) {
-@@ -421,6 +429,10 @@ static unsigned __to_inorder(unsigned j, unsigned size, unsigned extra)
- return j;
- }
-
-+/*
-+ * Return the cacheline index in bset_tree->data, where j is index
-+ * from a linear array which stores the auxiliar binary tree
-+ */
- static unsigned to_inorder(unsigned j, struct bset_tree *t)
- {
- return __to_inorder(j, t->size, t->extra);
-@@ -441,6 +453,10 @@ static unsigned __inorder_to_tree(unsigned j, unsigned size, unsigned extra)
- return j;
- }
-
-+/*
-+ * Return an index from a linear array which stores the auxiliar binary
-+ * tree, j is the cacheline index of t->data.
-+ */
- static unsigned inorder_to_tree(unsigned j, struct bset_tree *t)
- {
- return __inorder_to_tree(j, t->size, t->extra);
-@@ -546,6 +562,20 @@ static inline uint64_t shrd128(uint64_t high, uint64_t low, uint8_t shift)
- return low;
- }
-
-+/*
-+ * Calculate mantissa value for struct bkey_float.
-+ * If most significant bit of f->exponent is not set, then
-+ * - f->exponent >> 6 is 0
-+ * - p[0] points to bkey->low
-+ * - p[-1] borrows bits from KEY_INODE() of bkey->high
-+ * if most isgnificant bits of f->exponent is set, then
-+ * - f->exponent >> 6 is 1
-+ * - p[0] points to bits from KEY_INODE() of bkey->high
-+ * - p[-1] points to other bits from KEY_INODE() of
-+ * bkey->high too.
-+ * See make_bfloat() to check when most significant bit of f->exponent
-+ * is set or not.
-+ */
- static inline unsigned bfloat_mantissa(const struct bkey *k,
- struct bkey_float *f)
- {
-@@ -570,6 +600,16 @@ static void make_bfloat(struct bset_tree *t, unsigned j)
- BUG_ON(m < l || m > r);
- BUG_ON(bkey_next(p) != m);
-
-+ /*
-+ * If l and r have different KEY_INODE values (different backing
-+ * device), f->exponent records how many least significant bits
-+ * are different in KEY_INODE values and sets most significant
-+ * bits to 1 (by +64).
-+ * If l and r have same KEY_INODE value, f->exponent records
-+ * how many different bits in least significant bits of bkey->low.
-+ * See bfloat_mantiss() how the most significant bit of
-+ * f->exponent is used to calculate bfloat mantissa value.
-+ */
- if (KEY_INODE(l) != KEY_INODE(r))
- f->exponent = fls64(KEY_INODE(r) ^ KEY_INODE(l)) + 64;
- else
-@@ -633,6 +673,15 @@ void bch_bset_init_next(struct btree_keys *b, struct bset *i, uint64_t magic)
- }
- EXPORT_SYMBOL(bch_bset_init_next);
-
-+/*
-+ * Build auxiliary binary tree 'struct bset_tree *t', this tree is used to
-+ * accelerate bkey search in a btree node (pointed by bset_tree->data in
-+ * memory). After search in the auxiliar tree by calling bset_search_tree(),
-+ * a struct bset_search_iter is returned which indicates range [l, r] from
-+ * bset_tree->data where the searching bkey might be inside. Then a followed
-+ * linear comparison does the exact search, see __bch_bset_search() for how
-+ * the auxiliary tree is used.
-+ */
- void bch_bset_build_written_tree(struct btree_keys *b)
- {
- struct bset_tree *t = bset_tree_last(b);
-@@ -898,6 +947,17 @@ static struct bset_search_iter bset_search_tree(struct bset_tree *t,
- unsigned inorder, j, n = 1;
-
- do {
-+ /*
-+ * A bit trick here.
-+ * If p < t->size, (int)(p - t->size) is a minus value and
-+ * the most significant bit is set, right shifting 31 bits
-+ * gets 1. If p >= t->size, the most significant bit is
-+ * not set, right shifting 31 bits gets 0.
-+ * So the following 2 lines equals to
-+ * if (p >= t->size)
-+ * p = 0;
-+ * but a branch instruction is avoided.
-+ */
- unsigned p = n << 4;
- p &= ((int) (p - t->size)) >> 31;
-
-@@ -907,6 +967,9 @@ static struct bset_search_iter bset_search_tree(struct bset_tree *t,
- f = &t->tree[j];
-
- /*
-+ * Similar bit trick, use subtract operation to avoid a branch
-+ * instruction.
-+ *
- * n = (f->mantissa > bfloat_mantissa())
- * ? j * 2
- * : j * 2 + 1;
---
-2.18.0
-
diff --git a/for-next/0008-bcache-set-max-writeback-rate-when-I-O-request-is-id.patch b/for-next/0008-bcache-set-max-writeback-rate-when-I-O-request-is-id.patch
deleted file mode 100644
index 856f5fc..0000000
--- a/for-next/0008-bcache-set-max-writeback-rate-when-I-O-request-is-id.patch
+++ /dev/null
@@ -1,383 +0,0 @@
-From 9c26e5fd96446919cc77c14a09ba9b6cf2320ab5 Mon Sep 17 00:00:00 2001
-From: Coly Li <colyli@suse.de>
-Date: Thu, 26 Jul 2018 15:16:11 +0800
-Subject: [PATCH 08/10] bcache: set max writeback rate when I/O request is idle
-
-Commit b1092c9af9ed ("bcache: allow quick writeback when backing idle")
-allows the writeback rate to be faster if there is no I/O request on a
-bcache device. It works well if there is only one bcache device attached
-to the cache set. If there are many bcache devices attached to a cache
-set, it may introduce performance regression because multiple faster
-writeback threads of the idle bcache devices will compete the btree level
-locks with the bcache device who have I/O requests coming.
-
-This patch fixes the above issue by only permitting fast writebac when
-all bcache devices attached on the cache set are idle. And if one of the
-bcache devices has new I/O request coming, minimized all writeback
-throughput immediately and let PI controller __update_writeback_rate()
-to decide the upcoming writeback rate for each bcache device.
-
-Also when all bcache devices are idle, limited wrieback rate to a small
-number is wast of thoughput, especially when backing devices are slower
-non-rotation devices (e.g. SATA SSD). This patch sets a max writeback
-rate for each backing device if the whole cache set is idle. A faster
-writeback rate in idle time means new I/Os may have more available space
-for dirty data, and people may observe a better write performance then.
-
-Please note bcache may change its cache mode in run time, and this patch
-still works if the cache mode is switched from writeback mode and there
-is still dirty data on cache.
-
-Fixes: Commit b1092c9af9ed ("bcache: allow quick writeback when backing idle")
-Cc: stable@vger.kernel.org #4.16+
-Signed-off-by: Coly Li <colyli@suse.de>
-Tested-by: Kai Krakow <kai@kaishome.de>
-Tested-by: Stefan Priebe <s.priebe@profihost.ag>
-Cc: Michael Lyle <mlyle@lyle.org>
----
- drivers/md/bcache/bcache.h | 10 ++--
- drivers/md/bcache/request.c | 59 ++++++++++++++++++++++-
- drivers/md/bcache/super.c | 4 ++
- drivers/md/bcache/sysfs.c | 15 ++++--
- drivers/md/bcache/util.c | 2 +-
- drivers/md/bcache/util.h | 2 +-
- drivers/md/bcache/writeback.c | 91 +++++++++++++++++++++++------------
- 7 files changed, 138 insertions(+), 45 deletions(-)
-
-diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
-index b393b3fd06b6..05f82ff6f016 100644
---- a/drivers/md/bcache/bcache.h
-+++ b/drivers/md/bcache/bcache.h
-@@ -328,13 +328,6 @@ struct cached_dev {
- */
- atomic_t has_dirty;
-
-- /*
-- * Set to zero by things that touch the backing volume-- except
-- * writeback. Incremented by writeback. Used to determine when to
-- * accelerate idle writeback.
-- */
-- atomic_t backing_idle;
--
- struct bch_ratelimit writeback_rate;
- struct delayed_work writeback_rate_update;
-
-@@ -515,6 +508,8 @@ struct cache_set {
- struct cache_accounting accounting;
-
- unsigned long flags;
-+ atomic_t idle_counter;
-+ atomic_t at_max_writeback_rate;
-
- struct cache_sb sb;
-
-@@ -524,6 +519,7 @@ struct cache_set {
-
- struct bcache_device **devices;
- unsigned devices_max_used;
-+ atomic_t attached_dev_nr;
- struct list_head cached_devs;
- uint64_t cached_dev_sectors;
- atomic_long_t flash_dev_dirty_sectors;
-diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
-index 914d501ad1e0..7dbe8b6316a0 100644
---- a/drivers/md/bcache/request.c
-+++ b/drivers/md/bcache/request.c
-@@ -1103,6 +1103,44 @@ static void detached_dev_do_request(struct bcache_device *d, struct bio *bio)
- generic_make_request(bio);
- }
-
-+static void quit_max_writeback_rate(struct cache_set *c,
-+ struct cached_dev *this_dc)
-+{
-+ int i;
-+ struct bcache_device *d;
-+ struct cached_dev *dc;
-+
-+ /*
-+ * mutex bch_register_lock may compete with other parallel requesters,
-+ * or attach/detach operations on other backing device. Waiting to
-+ * the mutex lock may increase I/O request latency for seconds or more.
-+ * To avoid such situation, if mutext_trylock() failed, only writeback
-+ * rate of current cached device is set to 1, and __update_write_back()
-+ * will decide writeback rate of other cached devices (remember now
-+ * c->idle_counter is 0 already).
-+ */
-+ if (mutex_trylock(&bch_register_lock)) {
-+ for (i = 0; i < c->devices_max_used; i++) {
-+ if (!c->devices[i])
-+ continue;
-+
-+ if (UUID_FLASH_ONLY(&c->uuids[i]))
-+ continue;
-+
-+ d = c->devices[i];
-+ dc = container_of(d, struct cached_dev, disk);
-+ /*
-+ * set writeback rate to default minimum value,
-+ * then let update_writeback_rate() to decide the
-+ * upcoming rate.
-+ */
-+ atomic_long_set(&dc->writeback_rate.rate, 1);
-+ }
-+ mutex_unlock(&bch_register_lock);
-+ } else
-+ atomic_long_set(&this_dc->writeback_rate.rate, 1);
-+}
-+
- /* Cached devices - read & write stuff */
-
- static blk_qc_t cached_dev_make_request(struct request_queue *q,
-@@ -1120,8 +1158,25 @@ static blk_qc_t cached_dev_make_request(struct request_queue *q,
- return BLK_QC_T_NONE;
- }
-
-- atomic_set(&dc->backing_idle, 0);
-- generic_start_io_acct(q, bio_op(bio), bio_sectors(bio), &d->disk->part0);
-+ if (likely(d->c)) {
-+ if (atomic_read(&d->c->idle_counter))
-+ atomic_set(&d->c->idle_counter, 0);
-+ /*
-+ * If at_max_writeback_rate of cache set is true and new I/O
-+ * comes, quit max writeback rate of all cached devices
-+ * attached to this cache set, and set at_max_writeback_rate
-+ * to false.
-+ */
-+ if (unlikely(atomic_read(&d->c->at_max_writeback_rate) == 1)) {
-+ atomic_set(&d->c->at_max_writeback_rate, 0);
-+ quit_max_writeback_rate(d->c, dc);
-+ }
-+ }
-+
-+ generic_start_io_acct(q,
-+ bio_op(bio),
-+ bio_sectors(bio),
-+ &d->disk->part0);
-
- bio_set_dev(bio, dc->bdev);
- bio->bi_iter.bi_sector += dc->sb.data_offset;
-diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
-index f517d7d1fa10..32b95f3b9461 100644
---- a/drivers/md/bcache/super.c
-+++ b/drivers/md/bcache/super.c
-@@ -696,6 +696,8 @@ static void bcache_device_detach(struct bcache_device *d)
- {
- lockdep_assert_held(&bch_register_lock);
-
-+ atomic_dec(&d->c->attached_dev_nr);
-+
- if (test_bit(BCACHE_DEV_DETACHING, &d->flags)) {
- struct uuid_entry *u = d->c->uuids + d->id;
-
-@@ -1144,6 +1146,7 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c,
-
- bch_cached_dev_run(dc);
- bcache_device_link(&dc->disk, c, "bdev");
-+ atomic_inc(&c->attached_dev_nr);
-
- /* Allow the writeback thread to proceed */
- up_write(&dc->writeback_lock);
-@@ -1696,6 +1699,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
- c->block_bits = ilog2(sb->block_size);
- c->nr_uuids = bucket_bytes(c) / sizeof(struct uuid_entry);
- c->devices_max_used = 0;
-+ atomic_set(&c->attached_dev_nr, 0);
- c->btree_pages = bucket_pages(c);
- if (c->btree_pages > BTREE_MAX_PAGES)
- c->btree_pages = max_t(int, c->btree_pages / 4,
-diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
-index 3e9d3459a224..6e88142514fb 100644
---- a/drivers/md/bcache/sysfs.c
-+++ b/drivers/md/bcache/sysfs.c
-@@ -171,7 +171,8 @@ SHOW(__bch_cached_dev)
- var_printf(writeback_running, "%i");
- var_print(writeback_delay);
- var_print(writeback_percent);
-- sysfs_hprint(writeback_rate, wb ? dc->writeback_rate.rate << 9 : 0);
-+ sysfs_hprint(writeback_rate,
-+ wb ? atomic_long_read(&dc->writeback_rate.rate) << 9 : 0);
- sysfs_hprint(io_errors, atomic_read(&dc->io_errors));
- sysfs_printf(io_error_limit, "%i", dc->error_limit);
- sysfs_printf(io_disable, "%i", dc->io_disable);
-@@ -193,7 +194,9 @@ SHOW(__bch_cached_dev)
- * Except for dirty and target, other values should
- * be 0 if writeback is not running.
- */
-- bch_hprint(rate, wb ? dc->writeback_rate.rate << 9 : 0);
-+ bch_hprint(rate,
-+ wb ? atomic_long_read(&dc->writeback_rate.rate) << 9
-+ : 0);
- bch_hprint(dirty, bcache_dev_sectors_dirty(&dc->disk) << 9);
- bch_hprint(target, dc->writeback_rate_target << 9);
- bch_hprint(proportional,
-@@ -261,8 +264,12 @@ STORE(__cached_dev)
-
- sysfs_strtoul_clamp(writeback_percent, dc->writeback_percent, 0, 40);
-
-- sysfs_strtoul_clamp(writeback_rate,
-- dc->writeback_rate.rate, 1, INT_MAX);
-+ if (attr == &sysfs_writeback_rate) {
-+ int v;
-+
-+ sysfs_strtoul_clamp(writeback_rate, v, 1, INT_MAX);
-+ atomic_long_set(&dc->writeback_rate.rate, v);
-+ }
-
- sysfs_strtoul_clamp(writeback_rate_update_seconds,
- dc->writeback_rate_update_seconds,
-diff --git a/drivers/md/bcache/util.c b/drivers/md/bcache/util.c
-index fc479b026d6d..b15256bcf0e7 100644
---- a/drivers/md/bcache/util.c
-+++ b/drivers/md/bcache/util.c
-@@ -200,7 +200,7 @@ uint64_t bch_next_delay(struct bch_ratelimit *d, uint64_t done)
- {
- uint64_t now = local_clock();
-
-- d->next += div_u64(done * NSEC_PER_SEC, d->rate);
-+ d->next += div_u64(done * NSEC_PER_SEC, atomic_long_read(&d->rate));
-
- /* Bound the time. Don't let us fall further than 2 seconds behind
- * (this prevents unnecessary backlog that would make it impossible
-diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
-index cced87f8eb27..f7b0133c9d2f 100644
---- a/drivers/md/bcache/util.h
-+++ b/drivers/md/bcache/util.h
-@@ -442,7 +442,7 @@ struct bch_ratelimit {
- * Rate at which we want to do work, in units per second
- * The units here correspond to the units passed to bch_next_delay()
- */
-- uint32_t rate;
-+ atomic_long_t rate;
- };
-
- static inline void bch_ratelimit_reset(struct bch_ratelimit *d)
-diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
-index 912e969fedba..481d4cf38ac0 100644
---- a/drivers/md/bcache/writeback.c
-+++ b/drivers/md/bcache/writeback.c
-@@ -104,11 +104,56 @@ static void __update_writeback_rate(struct cached_dev *dc)
-
- dc->writeback_rate_proportional = proportional_scaled;
- dc->writeback_rate_integral_scaled = integral_scaled;
-- dc->writeback_rate_change = new_rate - dc->writeback_rate.rate;
-- dc->writeback_rate.rate = new_rate;
-+ dc->writeback_rate_change = new_rate -
-+ atomic_long_read(&dc->writeback_rate.rate);
-+ atomic_long_set(&dc->writeback_rate.rate, new_rate);
- dc->writeback_rate_target = target;
- }
-
-+static bool set_at_max_writeback_rate(struct cache_set *c,
-+ struct cached_dev *dc)
-+{
-+ /*
-+ * Idle_counter is increased everytime when update_writeback_rate() is
-+ * called. If all backing devices attached to the same cache set have
-+ * identical dc->writeback_rate_update_seconds values, it is about 6
-+ * rounds of update_writeback_rate() on each backing device before
-+ * c->at_max_writeback_rate is set to 1, and then max wrteback rate set
-+ * to each dc->writeback_rate.rate.
-+ * In order to avoid extra locking cost for counting exact dirty cached
-+ * devices number, c->attached_dev_nr is used to calculate the idle
-+ * throushold. It might be bigger if not all cached device are in write-
-+ * back mode, but it still works well with limited extra rounds of
-+ * update_writeback_rate().
-+ */
-+ if (atomic_inc_return(&c->idle_counter) <
-+ atomic_read(&c->attached_dev_nr) * 6)
-+ return false;
-+
-+ if (atomic_read(&c->at_max_writeback_rate) != 1)
-+ atomic_set(&c->at_max_writeback_rate, 1);
-+
-+ atomic_long_set(&dc->writeback_rate.rate, INT_MAX);
-+
-+ /* keep writeback_rate_target as existing value */
-+ dc->writeback_rate_proportional = 0;
-+ dc->writeback_rate_integral_scaled = 0;
-+ dc->writeback_rate_change = 0;
-+
-+ /*
-+ * Check c->idle_counter and c->at_max_writeback_rate agagain in case
-+ * new I/O arrives during before set_at_max_writeback_rate() returns.
-+ * Then the writeback rate is set to 1, and its new value should be
-+ * decided via __update_writeback_rate().
-+ */
-+ if ((atomic_read(&c->idle_counter) <
-+ atomic_read(&c->attached_dev_nr) * 6) ||
-+ !atomic_read(&c->at_max_writeback_rate))
-+ return false;
-+
-+ return true;
-+}
-+
- static void update_writeback_rate(struct work_struct *work)
- {
- struct cached_dev *dc = container_of(to_delayed_work(work),
-@@ -136,13 +181,20 @@ static void update_writeback_rate(struct work_struct *work)
- return;
- }
-
-- down_read(&dc->writeback_lock);
--
-- if (atomic_read(&dc->has_dirty) &&
-- dc->writeback_percent)
-- __update_writeback_rate(dc);
-+ if (atomic_read(&dc->has_dirty) && dc->writeback_percent) {
-+ /*
-+ * If the whole cache set is idle, set_at_max_writeback_rate()
-+ * will set writeback rate to a max number. Then it is
-+ * unncessary to update writeback rate for an idle cache set
-+ * in maximum writeback rate number(s).
-+ */
-+ if (!set_at_max_writeback_rate(c, dc)) {
-+ down_read(&dc->writeback_lock);
-+ __update_writeback_rate(dc);
-+ up_read(&dc->writeback_lock);
-+ }
-+ }
-
-- up_read(&dc->writeback_lock);
-
- /*
- * CACHE_SET_IO_DISABLE might be set via sysfs interface,
-@@ -422,27 +474,6 @@ static void read_dirty(struct cached_dev *dc)
-
- delay = writeback_delay(dc, size);
-
-- /* If the control system would wait for at least half a
-- * second, and there's been no reqs hitting the backing disk
-- * for awhile: use an alternate mode where we have at most
-- * one contiguous set of writebacks in flight at a time. If
-- * someone wants to do IO it will be quick, as it will only
-- * have to contend with one operation in flight, and we'll
-- * be round-tripping data to the backing disk as quickly as
-- * it can accept it.
-- */
-- if (delay >= HZ / 2) {
-- /* 3 means at least 1.5 seconds, up to 7.5 if we
-- * have slowed way down.
-- */
-- if (atomic_inc_return(&dc->backing_idle) >= 3) {
-- /* Wait for current I/Os to finish */
-- closure_sync(&cl);
-- /* And immediately launch a new set. */
-- delay = 0;
-- }
-- }
--
- while (!kthread_should_stop() &&
- !test_bit(CACHE_SET_IO_DISABLE, &dc->disk.c->flags) &&
- delay) {
-@@ -741,7 +772,7 @@ void bch_cached_dev_writeback_init(struct cached_dev *dc)
- dc->writeback_running = true;
- dc->writeback_percent = 10;
- dc->writeback_delay = 30;
-- dc->writeback_rate.rate = 1024;
-+ atomic_long_set(&dc->writeback_rate.rate, 1024);
- dc->writeback_rate_minimum = 8;
-
- dc->writeback_rate_update_seconds = WRITEBACK_RATE_UPDATE_SECS_DEFAULT;
---
-2.18.0
-
diff --git a/for-next/0009-bcache-make-the-pr_err-statement-used-for-ENOENT-onl.patch b/for-next/0009-bcache-make-the-pr_err-statement-used-for-ENOENT-onl.patch
deleted file mode 100644
index 59eb77f..0000000
--- a/for-next/0009-bcache-make-the-pr_err-statement-used-for-ENOENT-onl.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 1b28972603d1d9819c9273080b0a02ae00f609c2 Mon Sep 17 00:00:00 2001
-From: Shenghui Wang <shhuiw@foxmail.com>
-Date: Wed, 8 Aug 2018 20:32:52 +0800
-Subject: [PATCH 09/10] bcache: make the pr_err statement used for ENOENT only
- in sysfs_attatch section
-
-The pr_err statement in the code for sysfs_attatch section would run
-for various error codes, which maybe confusing.
-
-E.g,
-
-Run the command twice:
- echo 796b5c05-b03c-4bc7-9cbd-a8df5e8be891 > \
- /sys/block/bcache0/bcache/attach
- [the backing dev got attached on the first run]
- echo 796b5c05-b03c-4bc7-9cbd-a8df5e8be891 > \
- /sys/block/bcache0/bcache/attach
-
-In dmesg, after the command run twice, we can get:
- bcache: bch_cached_dev_attach() Can't attach sda6: already attached
- bcache: __cached_dev_store() Can't attach 796b5c05-b03c-4bc7-9cbd-\
-a8df5e8be891
- : cache set not found
-The first statement in the message was right, but the second was
-confusing.
-
-bch_cached_dev_attach has various pr_ statements for various error
-codes, except ENOENT.
-
-After the change, rerun above command twice:
- echo 796b5c05-b03c-4bc7-9cbd-a8df5e8be891 > \
- /sys/block/bcache0/bcache/attach
- echo 796b5c05-b03c-4bc7-9cbd-a8df5e8be891 > \
- /sys/block/bcache0/bcache/attach
-
-In dmesg we only got:
- bcache: bch_cached_dev_attach() Can't attach sda6: already attached
-No confusing "cache set not found" message anymore.
-
-And for some not exist SET-UUID:
- echo 796b5c05-b03c-4bc7-9cbd-a8df5e8be898 > \
- /sys/block/bcache0/bcache/attach
-In dmesg we can get:
- bcache: __cached_dev_store() Can't attach 796b5c05-b03c-4bc7-9cbd-\
-a8df5e8be898
- : cache set not found
-
-Signed-off-by: Shenghui Wang <shhuiw@foxmail.com>
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/sysfs.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
-index 6e88142514fb..22f8565d2bf1 100644
---- a/drivers/md/bcache/sysfs.c
-+++ b/drivers/md/bcache/sysfs.c
-@@ -351,8 +351,8 @@ STORE(__cached_dev)
- if (!v)
- return size;
- }
--
-- pr_err("Can't attach %s: cache set not found", buf);
-+ if (v == -ENOENT)
-+ pr_err("Can't attach %s: cache set not found", buf);
- return v;
- }
-
---
-2.18.0
-
diff --git a/for-next/0010-bcache-trivial-remove-tailing-backslash-in-macro-BTR.patch b/for-next/0010-bcache-trivial-remove-tailing-backslash-in-macro-BTR.patch
deleted file mode 100644
index 91713fd..0000000
--- a/for-next/0010-bcache-trivial-remove-tailing-backslash-in-macro-BTR.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 1ac333e00ca5af1223d63df97e8eac012f62ba4e Mon Sep 17 00:00:00 2001
-From: Shenghui Wang <shhuiw@foxmail.com>
-Date: Fri, 3 Aug 2018 16:55:02 +0800
-Subject: [PATCH 10/10] bcache: trivial - remove tailing backslash in macro
- BTREE_FLAG
-
-Remove the tailing backslash in macro BTREE_FLAG in btree.h
-
-Signed-off-by: Shenghui Wang <shhuiw@foxmail.com>
-Signed-off-by: Coly Li <colyli@suse.de>
----
- drivers/md/bcache/btree.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h
-index d211e2c25b6b..68e9d926134d 100644
---- a/drivers/md/bcache/btree.h
-+++ b/drivers/md/bcache/btree.h
-@@ -152,7 +152,7 @@ static inline bool btree_node_ ## flag(struct btree *b) \
- { return test_bit(BTREE_NODE_ ## flag, &b->flags); } \
- \
- static inline void set_btree_node_ ## flag(struct btree *b) \
--{ set_bit(BTREE_NODE_ ## flag, &b->flags); } \
-+{ set_bit(BTREE_NODE_ ## flag, &b->flags); }
-
- enum btree_flags {
- BTREE_NODE_io_error,
---
-2.18.0
-