blkcg: don't offline parent blkcg first
[sfrench/cifs-2.6.git] / include / linux / blk-cgroup.h
index 7fb7caa55a3d2068d009f5c8e9e0f10aa6b9f303..35f8ffe92b702bb62550c6983614ff857335c2cb 100644 (file)
@@ -436,8 +436,12 @@ static inline void blkcg_pin_online(struct blkcg *blkcg)
  */
 static inline void blkcg_unpin_online(struct blkcg *blkcg)
 {
-       if (refcount_dec_and_test(&blkcg->online_pin))
+       do {
+               if (!refcount_dec_and_test(&blkcg->online_pin))
+                       break;
                blkcg_destroy_blkgs(blkcg);
+               blkcg = blkcg_parent(blkcg);
+       } while (blkcg);
 }
 
 /**