diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c index a285711f1b4834b942d82cd0239c1412acfa39e5..06c82d689ef033996d8ec7d91f8e4f32545bb922 100644 --- a/block/bfq-cgroup.c +++ b/block/bfq-cgroup.c @@ -321,14 +321,12 @@ struct bfq_group *bfqq_group(struct bfq_queue *bfqq) static void bfqg_get(struct bfq_group *bfqg) { - bfqg->ref++; + refcount_inc(&bfqg->ref); } static void bfqg_put(struct bfq_group *bfqg) { - bfqg->ref--; - - if (bfqg->ref == 0) + if (refcount_dec_and_test(&bfqg->ref)) kfree(bfqg); } @@ -535,7 +533,7 @@ static struct blkg_policy_data *bfq_pd_alloc(gfp_t gfp, struct request_queue *q, } /* see comments in bfq_bic_update_cgroup for why refcounting */ - bfqg_get(bfqg); + refcount_set(&bfqg->ref, 1); return &bfqg->pd; } diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h index 2a4a6f44efffe62e7083f3486e4d0b917700deb4..f6d9adfd1fc61f81d215cd044e78a72ecd810d00 100644 --- a/block/bfq-iosched.h +++ b/block/bfq-iosched.h @@ -900,7 +900,7 @@ struct bfq_group { char blkg_path[128]; /* reference counter (see comments in bfq_bic_update_cgroup) */ - int ref; + refcount_t ref; /* Is bfq_group still online? */ bool online;