forked from Minki/linux
bdi: Make wb->bdi a proper reference
Make wb->bdi a proper refcounted reference to bdi for all bdi_writeback structures except for the one embedded inside struct backing_dev_info. That will allow us to simplify bdi unregistration. Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
b7d680d7bf
commit
810df54a64
|
@ -294,6 +294,8 @@ static int wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi,
|
||||||
|
|
||||||
memset(wb, 0, sizeof(*wb));
|
memset(wb, 0, sizeof(*wb));
|
||||||
|
|
||||||
|
if (wb != &bdi->wb)
|
||||||
|
bdi_get(bdi);
|
||||||
wb->bdi = bdi;
|
wb->bdi = bdi;
|
||||||
wb->last_old_flush = jiffies;
|
wb->last_old_flush = jiffies;
|
||||||
INIT_LIST_HEAD(&wb->b_dirty);
|
INIT_LIST_HEAD(&wb->b_dirty);
|
||||||
|
@ -314,8 +316,10 @@ static int wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi,
|
||||||
wb->dirty_sleep = jiffies;
|
wb->dirty_sleep = jiffies;
|
||||||
|
|
||||||
wb->congested = wb_congested_get_create(bdi, blkcg_id, gfp);
|
wb->congested = wb_congested_get_create(bdi, blkcg_id, gfp);
|
||||||
if (!wb->congested)
|
if (!wb->congested) {
|
||||||
return -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
goto out_put_bdi;
|
||||||
|
}
|
||||||
|
|
||||||
err = fprop_local_init_percpu(&wb->completions, gfp);
|
err = fprop_local_init_percpu(&wb->completions, gfp);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -335,6 +339,9 @@ out_destroy_stat:
|
||||||
fprop_local_destroy_percpu(&wb->completions);
|
fprop_local_destroy_percpu(&wb->completions);
|
||||||
out_put_cong:
|
out_put_cong:
|
||||||
wb_congested_put(wb->congested);
|
wb_congested_put(wb->congested);
|
||||||
|
out_put_bdi:
|
||||||
|
if (wb != &bdi->wb)
|
||||||
|
bdi_put(bdi);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,6 +379,8 @@ static void wb_exit(struct bdi_writeback *wb)
|
||||||
|
|
||||||
fprop_local_destroy_percpu(&wb->completions);
|
fprop_local_destroy_percpu(&wb->completions);
|
||||||
wb_congested_put(wb->congested);
|
wb_congested_put(wb->congested);
|
||||||
|
if (wb != &wb->bdi->wb)
|
||||||
|
bdi_put(wb->bdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||||
|
|
Loading…
Reference in New Issue
Block a user