|
@@ -1019,10 +1019,20 @@ cfq_find_alloc_cfqg(struct cfq_data *cfqd, struct cgroup *cgroup, int create)
|
|
|
*/
|
|
|
atomic_set(&cfqg->ref, 1);
|
|
|
|
|
|
- /* Add group onto cgroup list */
|
|
|
- sscanf(dev_name(bdi->dev), "%u:%u", &major, &minor);
|
|
|
- cfq_blkiocg_add_blkio_group(blkcg, &cfqg->blkg, (void *)cfqd,
|
|
|
+ /*
|
|
|
+ * Add group onto cgroup list. It might happen that bdi->dev is
|
|
|
+ * not initiliazed yet. Initialize this new group without major
|
|
|
+ * and minor info and this info will be filled in once a new thread
|
|
|
+ * comes for IO. See code above.
|
|
|
+ */
|
|
|
+ if (bdi->dev) {
|
|
|
+ sscanf(dev_name(bdi->dev), "%u:%u", &major, &minor);
|
|
|
+ cfq_blkiocg_add_blkio_group(blkcg, &cfqg->blkg, (void *)cfqd,
|
|
|
MKDEV(major, minor));
|
|
|
+ } else
|
|
|
+ cfq_blkiocg_add_blkio_group(blkcg, &cfqg->blkg, (void *)cfqd,
|
|
|
+ 0);
|
|
|
+
|
|
|
cfqg->weight = blkcg_get_weight(blkcg, cfqg->blkg.dev);
|
|
|
|
|
|
/* Add group on cfqd list */
|