diff options
Diffstat (limited to 'mm/backing-dev.c')
-rw-r--r-- | mm/backing-dev.c | 19 |
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) { | ||
23 | err: | ||
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 | } |
33 | EXPORT_SYMBOL(bdi_destroy); | 41 | EXPORT_SYMBOL(bdi_destroy); |
34 | 42 | ||
@@ -81,3 +89,4 @@ long congestion_wait(int rw, long timeout) | |||
81 | return ret; | 89 | return ret; |
82 | } | 90 | } |
83 | EXPORT_SYMBOL(congestion_wait); | 91 | EXPORT_SYMBOL(congestion_wait); |
92 | |||