aboutsummaryrefslogtreecommitdiffstats
path: root/mm/backing-dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/backing-dev.c')
-rw-r--r--mm/backing-dev.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index a47065e084a4..b0ceb29da4c7 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -12,11 +12,17 @@ int bdi_init(struct backing_dev_info *bdi)
12 12
13 for (i = 0; i < NR_BDI_STAT_ITEMS; i++) { 13 for (i = 0; i < NR_BDI_STAT_ITEMS; i++) {
14 err = percpu_counter_init_irq(&bdi->bdi_stat[i], 0); 14 err = percpu_counter_init_irq(&bdi->bdi_stat[i], 0);
15 if (err) { 15 if (err)
16 for (j = 0; j < i; j++) 16 goto err;
17 percpu_counter_destroy(&bdi->bdi_stat[i]); 17 }
18 break; 18
19 } 19 bdi->dirty_exceeded = 0;
20 err = prop_local_init_percpu(&bdi->completions);
21
22 if (err) {
23err:
24 for (j = 0; j < i; j++)
25 percpu_counter_destroy(&bdi->bdi_stat[i]);
20 } 26 }
21 27
22 return err; 28 return err;
@@ -29,6 +35,8 @@ void bdi_destroy(struct backing_dev_info *bdi)
29 35
30 for (i = 0; i < NR_BDI_STAT_ITEMS; i++) 36 for (i = 0; i < NR_BDI_STAT_ITEMS; i++)
31 percpu_counter_destroy(&bdi->bdi_stat[i]); 37 percpu_counter_destroy(&bdi->bdi_stat[i]);
38
39 prop_local_destroy_percpu(&bdi->completions);
32} 40}
33EXPORT_SYMBOL(bdi_destroy); 41EXPORT_SYMBOL(bdi_destroy);
34 42
@@ -81,3 +89,4 @@ long congestion_wait(int rw, long timeout)
81 return ret; 89 return ret;
82} 90}
83EXPORT_SYMBOL(congestion_wait); 91EXPORT_SYMBOL(congestion_wait);
92