summaryrefslogtreecommitdiffstats
path: root/mm/backing-dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/backing-dev.c')
-rw-r--r--mm/backing-dev.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 74b52dfd5852..84b2dc76f140 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -113,11 +113,23 @@ static const struct file_operations bdi_debug_stats_fops = {
113 .release = single_release, 113 .release = single_release,
114}; 114};
115 115
116static void bdi_debug_register(struct backing_dev_info *bdi, const char *name) 116static int bdi_debug_register(struct backing_dev_info *bdi, const char *name)
117{ 117{
118 if (!bdi_debug_root)
119 return -ENOMEM;
120
118 bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root); 121 bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root);
122 if (!bdi->debug_dir)
123 return -ENOMEM;
124
119 bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir, 125 bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir,
120 bdi, &bdi_debug_stats_fops); 126 bdi, &bdi_debug_stats_fops);
127 if (!bdi->debug_stats) {
128 debugfs_remove(bdi->debug_dir);
129 return -ENOMEM;
130 }
131
132 return 0;
121} 133}
122 134
123static void bdi_debug_unregister(struct backing_dev_info *bdi) 135static void bdi_debug_unregister(struct backing_dev_info *bdi)
@@ -129,9 +141,10 @@ static void bdi_debug_unregister(struct backing_dev_info *bdi)
129static inline void bdi_debug_init(void) 141static inline void bdi_debug_init(void)
130{ 142{
131} 143}
132static inline void bdi_debug_register(struct backing_dev_info *bdi, 144static inline int bdi_debug_register(struct backing_dev_info *bdi,
133 const char *name) 145 const char *name)
134{ 146{
147 return 0;
135} 148}
136static inline void bdi_debug_unregister(struct backing_dev_info *bdi) 149static inline void bdi_debug_unregister(struct backing_dev_info *bdi)
137{ 150{
@@ -869,10 +882,13 @@ int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, va_list args)
869 if (IS_ERR(dev)) 882 if (IS_ERR(dev))
870 return PTR_ERR(dev); 883 return PTR_ERR(dev);
871 884
885 if (bdi_debug_register(bdi, dev_name(dev))) {
886 device_destroy(bdi_class, dev->devt);
887 return -ENOMEM;
888 }
872 cgwb_bdi_register(bdi); 889 cgwb_bdi_register(bdi);
873 bdi->dev = dev; 890 bdi->dev = dev;
874 891
875 bdi_debug_register(bdi, dev_name(dev));
876 set_bit(WB_registered, &bdi->wb.state); 892 set_bit(WB_registered, &bdi->wb.state);
877 893
878 spin_lock_bh(&bdi_lock); 894 spin_lock_bh(&bdi_lock);