> +static int blk_iolatency_try_init(char *input) > +{ > + static DEFINE_MUTEX(init_mutex); > + struct block_device *bdev; > + int ret = 0; > + > + bdev = blkcg_conf_open_bdev(&input); > + if (IS_ERR(bdev)) > + return PTR_ERR(bdev); > +retry: > ret = blkg_conf_prep(blkcg, &blkcg_policy_iolatency, buf, &ctx); > + if (ret == -EOPNOTSUPP) { > + ret = blk_iolatency_try_init(buf); It's a little sad to do two block device lookups here (even if it obviously doesn't matter for performance). I wonder if it would make sense to explicitly support the lazy init pattern in blkg_conf_prep somehow. Otherwise I'm all for the lazy init.