From: Sasha Levin Date: Tue, 12 May 2020 15:05:45 +0000 (-0400) Subject: Fixes for 5.4 X-Git-Tag: v4.19.123~15^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=af2ee0ec1d5151b803b119bb72d0477959a5c0e4;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.4 Signed-off-by: Sasha Levin --- diff --git a/queue-5.4/bdi-add-a-dev_name-field-to-struct-backing_dev_info.patch b/queue-5.4/bdi-add-a-dev_name-field-to-struct-backing_dev_info.patch new file mode 100644 index 00000000000..2f8ffea2998 --- /dev/null +++ b/queue-5.4/bdi-add-a-dev_name-field-to-struct-backing_dev_info.patch @@ -0,0 +1,62 @@ +From cf71434104a483f7fe2905a0d90792c2e541db55 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 4 May 2020 14:47:56 +0200 +Subject: bdi: add a ->dev_name field to struct backing_dev_info + +From: Christoph Hellwig + +[ Upstream commit 6bd87eec23cbc9ed222bed0f5b5b02bf300e9a8d ] + +Cache a copy of the name for the life time of the backing_dev_info +structure so that we can reference it even after unregistering. + +Fixes: 68f23b89067f ("memcg: fix a crash in wb_workfn when a device disappears") +Reported-by: Yufen Yu +Signed-off-by: Christoph Hellwig +Reviewed-by: Jan Kara +Reviewed-by: Bart Van Assche +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + include/linux/backing-dev-defs.h | 1 + + mm/backing-dev.c | 5 +++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h +index 4fc87dee005ab..2849bdbb3acbe 100644 +--- a/include/linux/backing-dev-defs.h ++++ b/include/linux/backing-dev-defs.h +@@ -220,6 +220,7 @@ struct backing_dev_info { + wait_queue_head_t wb_waitq; + + struct device *dev; ++ char dev_name[64]; + struct device *owner; + + struct timer_list laptop_mode_wb_timer; +diff --git a/mm/backing-dev.c b/mm/backing-dev.c +index 680e5028d0fc5..3f2480e4c5af3 100644 +--- a/mm/backing-dev.c ++++ b/mm/backing-dev.c +@@ -938,7 +938,8 @@ int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, va_list args) + if (bdi->dev) /* The driver needs to use separate queues per device */ + return 0; + +- dev = device_create_vargs(bdi_class, NULL, MKDEV(0, 0), bdi, fmt, args); ++ vsnprintf(bdi->dev_name, sizeof(bdi->dev_name), fmt, args); ++ dev = device_create(bdi_class, NULL, MKDEV(0, 0), bdi, bdi->dev_name); + if (IS_ERR(dev)) + return PTR_ERR(dev); + +@@ -1047,7 +1048,7 @@ const char *bdi_dev_name(struct backing_dev_info *bdi) + { + if (!bdi || !bdi->dev) + return bdi_unknown_name; +- return dev_name(bdi->dev); ++ return bdi->dev_name; + } + EXPORT_SYMBOL_GPL(bdi_dev_name); + +-- +2.20.1 + diff --git a/queue-5.4/bdi-move-bdi_dev_name-out-of-line.patch b/queue-5.4/bdi-move-bdi_dev_name-out-of-line.patch new file mode 100644 index 00000000000..860b55fcc66 --- /dev/null +++ b/queue-5.4/bdi-move-bdi_dev_name-out-of-line.patch @@ -0,0 +1,74 @@ +From 6c7b040473a588c52cc737b0c8639511f6553ac4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 4 May 2020 14:47:54 +0200 +Subject: bdi: move bdi_dev_name out of line + +From: Christoph Hellwig + +[ Upstream commit eb7ae5e06bb6e6ac6bb86872d27c43ebab92f6b2 ] + +bdi_dev_name is not a fast path function, move it out of line. This +prepares for using it from modular callers without having to export +an implementation detail like bdi_unknown_name. + +Signed-off-by: Christoph Hellwig +Reviewed-by: Jan Kara +Reviewed-by: Greg Kroah-Hartman +Reviewed-by: Bart Van Assche +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + include/linux/backing-dev.h | 9 +-------- + mm/backing-dev.c | 10 +++++++++- + 2 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h +index f88197c1ffc2d..c9ad5c3b7b4b2 100644 +--- a/include/linux/backing-dev.h ++++ b/include/linux/backing-dev.h +@@ -505,13 +505,6 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi) + (1 << WB_async_congested)); + } + +-extern const char *bdi_unknown_name; +- +-static inline const char *bdi_dev_name(struct backing_dev_info *bdi) +-{ +- if (!bdi || !bdi->dev) +- return bdi_unknown_name; +- return dev_name(bdi->dev); +-} ++const char *bdi_dev_name(struct backing_dev_info *bdi); + + #endif /* _LINUX_BACKING_DEV_H */ +diff --git a/mm/backing-dev.c b/mm/backing-dev.c +index 62f05f605fb5b..680e5028d0fc5 100644 +--- a/mm/backing-dev.c ++++ b/mm/backing-dev.c +@@ -21,7 +21,7 @@ struct backing_dev_info noop_backing_dev_info = { + EXPORT_SYMBOL_GPL(noop_backing_dev_info); + + static struct class *bdi_class; +-const char *bdi_unknown_name = "(unknown)"; ++static const char *bdi_unknown_name = "(unknown)"; + + /* + * bdi_lock protects bdi_tree and updates to bdi_list. bdi_list has RCU +@@ -1043,6 +1043,14 @@ void bdi_put(struct backing_dev_info *bdi) + } + EXPORT_SYMBOL(bdi_put); + ++const char *bdi_dev_name(struct backing_dev_info *bdi) ++{ ++ if (!bdi || !bdi->dev) ++ return bdi_unknown_name; ++ return dev_name(bdi->dev); ++} ++EXPORT_SYMBOL_GPL(bdi_dev_name); ++ + static wait_queue_head_t congestion_wqh[2] = { + __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]), + __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1]) +-- +2.20.1 + diff --git a/queue-5.4/series b/queue-5.4/series index 3f7b5a7c61b..9329224a1a3 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -84,3 +84,5 @@ objtool-fix-stack-offset-tracking-for-indirect-cfas.patch iommu-virtio-reverse-arguments-to-list_add.patch scripts-decodecode-fix-trapping-instruction-formatting.patch mm-memcg-fix-error-return-value-of-mem_cgroup_css_alloc.patch +bdi-move-bdi_dev_name-out-of-line.patch +bdi-add-a-dev_name-field-to-struct-backing_dev_info.patch