diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index 1fe9574b4a774549c24b20eeeae2b824af4ce9dc..0c14b195c0c25a4d5119bd72169216343367a4a8 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -425,10 +425,14 @@ static inline void blkcg_pin_online(struct blkcg *blkcg) static inline void blkcg_unpin_online(struct blkcg *blkcg) { do { + struct blkcg *parent; + if (!refcount_dec_and_test(&blkcg->online_pin)) break; + + parent = blkcg_parent(blkcg); blkcg_destroy_blkgs(blkcg); - blkcg = blkcg_parent(blkcg); + blkcg = parent; } while (blkcg); }