aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/backing-dev.h5
-rw-r--r--mm/backing-dev.c56
2 files changed, 6 insertions, 55 deletions
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index 47a98e6e2a65..aaeb2ec5d33c 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -17,8 +17,6 @@
17#include <linux/backing-dev-defs.h> 17#include <linux/backing-dev-defs.h>
18#include <linux/slab.h> 18#include <linux/slab.h>
19 19
20int __must_check bdi_init(struct backing_dev_info *bdi);
21
22static inline struct backing_dev_info *bdi_get(struct backing_dev_info *bdi) 20static inline struct backing_dev_info *bdi_get(struct backing_dev_info *bdi)
23{ 21{
24 kref_get(&bdi->refcnt); 22 kref_get(&bdi->refcnt);
@@ -32,12 +30,9 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
32 const char *fmt, ...); 30 const char *fmt, ...);
33int bdi_register_va(struct backing_dev_info *bdi, struct device *parent, 31int bdi_register_va(struct backing_dev_info *bdi, struct device *parent,
34 const char *fmt, va_list args); 32 const char *fmt, va_list args);
35int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
36int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner); 33int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
37void bdi_unregister(struct backing_dev_info *bdi); 34void bdi_unregister(struct backing_dev_info *bdi);
38 35
39int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
40void bdi_destroy(struct backing_dev_info *bdi);
41struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id); 36struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id);
42static inline struct backing_dev_info *bdi_alloc(gfp_t gfp_mask) 37static inline struct backing_dev_info *bdi_alloc(gfp_t gfp_mask)
43{ 38{
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 3dd175986390..4dcd56947f2a 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -12,8 +12,6 @@
12#include <linux/device.h> 12#include <linux/device.h>
13#include <trace/events/writeback.h> 13#include <trace/events/writeback.h>
14 14
15static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0);
16
17struct backing_dev_info noop_backing_dev_info = { 15struct backing_dev_info noop_backing_dev_info = {
18 .name = "noop", 16 .name = "noop",
19 .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, 17 .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK,
@@ -242,6 +240,8 @@ static __init int bdi_class_init(void)
242} 240}
243postcore_initcall(bdi_class_init); 241postcore_initcall(bdi_class_init);
244 242
243static int bdi_init(struct backing_dev_info *bdi);
244
245static int __init default_bdi_init(void) 245static int __init default_bdi_init(void)
246{ 246{
247 int err; 247 int err;
@@ -820,7 +820,7 @@ static void cgwb_remove_from_bdi_list(struct bdi_writeback *wb)
820 820
821#endif /* CONFIG_CGROUP_WRITEBACK */ 821#endif /* CONFIG_CGROUP_WRITEBACK */
822 822
823int bdi_init(struct backing_dev_info *bdi) 823static int bdi_init(struct backing_dev_info *bdi)
824{ 824{
825 int ret; 825 int ret;
826 826
@@ -838,7 +838,6 @@ int bdi_init(struct backing_dev_info *bdi)
838 838
839 return ret; 839 return ret;
840} 840}
841EXPORT_SYMBOL(bdi_init);
842 841
843struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id) 842struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id)
844{ 843{
@@ -897,12 +896,6 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
897} 896}
898EXPORT_SYMBOL(bdi_register); 897EXPORT_SYMBOL(bdi_register);
899 898
900int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)
901{
902 return bdi_register(bdi, NULL, "%u:%u", MAJOR(dev), MINOR(dev));
903}
904EXPORT_SYMBOL(bdi_register_dev);
905
906int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner) 899int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner)
907{ 900{
908 int rc; 901 int rc;
@@ -950,13 +943,6 @@ void bdi_unregister(struct backing_dev_info *bdi)
950 } 943 }
951} 944}
952 945
953static void bdi_exit(struct backing_dev_info *bdi)
954{
955 WARN_ON_ONCE(bdi->dev);
956 wb_exit(&bdi->wb);
957 cgwb_bdi_exit(bdi);
958}
959
960static void release_bdi(struct kref *ref) 946static void release_bdi(struct kref *ref)
961{ 947{
962 struct backing_dev_info *bdi = 948 struct backing_dev_info *bdi =
@@ -964,7 +950,9 @@ static void release_bdi(struct kref *ref)
964 950
965 if (test_bit(WB_registered, &bdi->wb.state)) 951 if (test_bit(WB_registered, &bdi->wb.state))
966 bdi_unregister(bdi); 952 bdi_unregister(bdi);
967 bdi_exit(bdi); 953 WARN_ON_ONCE(bdi->dev);
954 wb_exit(&bdi->wb);
955 cgwb_bdi_exit(bdi);
968 kfree(bdi); 956 kfree(bdi);
969} 957}
970 958
@@ -974,38 +962,6 @@ void bdi_put(struct backing_dev_info *bdi)
974} 962}
975EXPORT_SYMBOL(bdi_put); 963EXPORT_SYMBOL(bdi_put);
976 964
977void bdi_destroy(struct backing_dev_info *bdi)
978{
979 bdi_unregister(bdi);
980 bdi_exit(bdi);
981}
982EXPORT_SYMBOL(bdi_destroy);
983
984/*
985 * For use from filesystems to quickly init and register a bdi associated
986 * with dirty writeback
987 */
988int bdi_setup_and_register(struct backing_dev_info *bdi, char *name)
989{
990 int err;
991
992 bdi->name = name;
993 bdi->capabilities = 0;
994 err = bdi_init(bdi);
995 if (err)
996 return err;
997
998 err = bdi_register(bdi, NULL, "%.28s-%ld", name,
999 atomic_long_inc_return(&bdi_seq));
1000 if (err) {
1001 bdi_destroy(bdi);
1002 return err;
1003 }
1004
1005 return 0;
1006}
1007EXPORT_SYMBOL(bdi_setup_and_register);
1008
1009static wait_queue_head_t congestion_wqh[2] = { 965static wait_queue_head_t congestion_wqh[2] = {
1010 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]), 966 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
1011 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1]) 967 __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])