X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fbacking-dev.c;h=e8644b1e5527df1069f968d17d1893fa0dc3e5fa;hb=700fe1ab99240c1a9c4d155e2a0612a1b044bb69;hp=a47065e084a472e89a624bf723338eff5d10f9ac;hpb=b2e8fb6efa209c82203c79b491b5bc952d44aa57;p=linux-2.6 diff --git a/mm/backing-dev.c b/mm/backing-dev.c index a47065e084..e8644b1e55 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -7,16 +7,22 @@ int bdi_init(struct backing_dev_info *bdi) { - int i, j; + int i; int err; for (i = 0; i < NR_BDI_STAT_ITEMS; i++) { err = percpu_counter_init_irq(&bdi->bdi_stat[i], 0); - if (err) { - for (j = 0; j < i; j++) - percpu_counter_destroy(&bdi->bdi_stat[i]); - break; - } + if (err) + goto err; + } + + bdi->dirty_exceeded = 0; + err = prop_local_init_percpu(&bdi->completions); + + if (err) { +err: + while (i--) + percpu_counter_destroy(&bdi->bdi_stat[i]); } return err; @@ -29,6 +35,8 @@ void bdi_destroy(struct backing_dev_info *bdi) for (i = 0; i < NR_BDI_STAT_ITEMS; i++) percpu_counter_destroy(&bdi->bdi_stat[i]); + + prop_local_destroy_percpu(&bdi->completions); } EXPORT_SYMBOL(bdi_destroy); @@ -81,3 +89,4 @@ long congestion_wait(int rw, long timeout) return ret; } EXPORT_SYMBOL(congestion_wait); +