aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@redhat.com>2010-10-01 08:49:44 -0400
committerJens Axboe <jaxboe@fusionio.com>2010-10-01 08:49:44 -0400
commit61014e96e6ed55b8db0af31574eec2a75d4e8755 (patch)
tree69201251c3c5c51a0ed31dbe595743e60fbdaf52
parent13f98250f587b7defa39ed738dfa74b600e46e7b (diff)
blkio: deletion of a cgroup was causes oops
o Now a cgroup list of blkg elements can contain blkg from multiple policies. Before sending an unlink event, make sure blkg belongs to they policy. If policy does not own the blkg, do not send update for this blkg. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
-rw-r--r--block/blk-cgroup.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 86e7066a0b62..b06ca70354e3 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -1411,13 +1411,14 @@ static void blkiocg_destroy(struct cgroup_subsys *subsys, struct cgroup *cgroup)
1411 /* 1411 /*
1412 * This blkio_group is being unlinked as associated cgroup is 1412 * This blkio_group is being unlinked as associated cgroup is
1413 * going away. Let all the IO controlling policies know about 1413 * going away. Let all the IO controlling policies know about
1414 * this event. Currently this is static call to one io 1414 * this event.
1415 * controlling policy. Once we have more policies in place, we
1416 * need some dynamic registration of callback function.
1417 */ 1415 */
1418 spin_lock(&blkio_list_lock); 1416 spin_lock(&blkio_list_lock);
1419 list_for_each_entry(blkiop, &blkio_list, list) 1417 list_for_each_entry(blkiop, &blkio_list, list) {
1418 if (blkiop->plid != blkg->plid)
1419 continue;
1420 blkiop->ops.blkio_unlink_group_fn(key, blkg); 1420 blkiop->ops.blkio_unlink_group_fn(key, blkg);
1421 }
1421 spin_unlock(&blkio_list_lock); 1422 spin_unlock(&blkio_list_lock);
1422 } while (1); 1423 } while (1);
1423 1424