mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 20:32:22 +00:00
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));
|
||||
|
||||
if (wb != &bdi->wb)
|
||||
bdi_get(bdi);
|
||||
wb->bdi = bdi;
|
||||
wb->last_old_flush = jiffies;
|
||||
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->congested = wb_congested_get_create(bdi, blkcg_id, gfp);
|
||||
if (!wb->congested)
|
||||
return -ENOMEM;
|
||||
if (!wb->congested) {
|
||||
err = -ENOMEM;
|
||||
goto out_put_bdi;
|
||||
}
|
||||
|
||||
err = fprop_local_init_percpu(&wb->completions, gfp);
|
||||
if (err)
|
||||
@ -335,6 +339,9 @@ out_destroy_stat:
|
||||
fprop_local_destroy_percpu(&wb->completions);
|
||||
out_put_cong:
|
||||
wb_congested_put(wb->congested);
|
||||
out_put_bdi:
|
||||
if (wb != &bdi->wb)
|
||||
bdi_put(bdi);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -372,6 +379,8 @@ static void wb_exit(struct bdi_writeback *wb)
|
||||
|
||||
fprop_local_destroy_percpu(&wb->completions);
|
||||
wb_congested_put(wb->congested);
|
||||
if (wb != &wb->bdi->wb)
|
||||
bdi_put(wb->bdi);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||
|
Loading…
Reference in New Issue
Block a user