|
@@ -609,7 +609,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src)
|
|
|
bio->bi_iter = bio_src->bi_iter;
|
|
|
bio->bi_io_vec = bio_src->bi_io_vec;
|
|
|
|
|
|
- bio_clone_blkcg_association(bio, bio_src);
|
|
|
+ bio_clone_blkg_association(bio, bio_src);
|
|
|
|
|
|
blkcg_bio_issue_init(bio);
|
|
|
}
|
|
@@ -1956,34 +1956,6 @@ EXPORT_SYMBOL(bioset_init_from_src);
|
|
|
|
|
|
#ifdef CONFIG_BLK_CGROUP
|
|
|
|
|
|
-/**
|
|
|
- * bio_associate_blkcg - associate a bio with the specified blkcg
|
|
|
- * @bio: target bio
|
|
|
- * @blkcg_css: css of the blkcg to associate
|
|
|
- *
|
|
|
- * Associate @bio with the blkcg specified by @blkcg_css. Block layer will
|
|
|
- * treat @bio as if it were issued by a task which belongs to the blkcg.
|
|
|
- *
|
|
|
- * This function takes an extra reference of @blkcg_css which will be put
|
|
|
- * when @bio is released. The caller must own @bio and is responsible for
|
|
|
- * synchronizing calls to this function. If @blkcg_css is NULL, a call to
|
|
|
- * blkcg_get_css finds the current css from the kthread or task.
|
|
|
- */
|
|
|
-int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css)
|
|
|
-{
|
|
|
- if (unlikely(bio->bi_css))
|
|
|
- return -EBUSY;
|
|
|
-
|
|
|
- if (blkcg_css)
|
|
|
- css_get(blkcg_css);
|
|
|
- else
|
|
|
- blkcg_css = blkcg_get_css();
|
|
|
-
|
|
|
- bio->bi_css = blkcg_css;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(bio_associate_blkcg);
|
|
|
-
|
|
|
/**
|
|
|
* bio_associate_blkg - associate a bio with the a blkg
|
|
|
* @bio: target bio
|
|
@@ -2033,7 +2005,6 @@ int bio_associate_blkg_from_css(struct bio *bio,
|
|
|
struct cgroup_subsys_state *css)
|
|
|
{
|
|
|
css_get(css);
|
|
|
- bio->bi_css = css;
|
|
|
return __bio_associate_blkg_from_css(bio, css);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(bio_associate_blkg_from_css);
|
|
@@ -2054,12 +2025,11 @@ int bio_associate_blkg_from_page(struct bio *bio, struct page *page)
|
|
|
{
|
|
|
struct cgroup_subsys_state *css;
|
|
|
|
|
|
- if (unlikely(bio->bi_css))
|
|
|
+ if (unlikely(bio->bi_blkg))
|
|
|
return -EBUSY;
|
|
|
if (!page->mem_cgroup)
|
|
|
return 0;
|
|
|
css = cgroup_get_e_css(page->mem_cgroup->css.cgroup, &io_cgrp_subsys);
|
|
|
- bio->bi_css = css;
|
|
|
|
|
|
return __bio_associate_blkg_from_css(bio, css);
|
|
|
}
|
|
@@ -2085,8 +2055,7 @@ int bio_associate_create_blkg(struct request_queue *q, struct bio *bio)
|
|
|
|
|
|
rcu_read_lock();
|
|
|
|
|
|
- bio_associate_blkcg(bio, NULL);
|
|
|
- blkcg = bio_blkcg(bio);
|
|
|
+ blkcg = css_to_blkcg(blkcg_get_css());
|
|
|
|
|
|
if (!blkcg->css.parent) {
|
|
|
ret = bio_associate_blkg(bio, q->root_blkg);
|
|
@@ -2110,30 +2079,27 @@ void bio_disassociate_task(struct bio *bio)
|
|
|
put_io_context(bio->bi_ioc);
|
|
|
bio->bi_ioc = NULL;
|
|
|
}
|
|
|
- if (bio->bi_css) {
|
|
|
- css_put(bio->bi_css);
|
|
|
- bio->bi_css = NULL;
|
|
|
- }
|
|
|
if (bio->bi_blkg) {
|
|
|
+ /* a ref is always taken on css */
|
|
|
+ css_put(&bio_blkcg(bio)->css);
|
|
|
blkg_put(bio->bi_blkg);
|
|
|
bio->bi_blkg = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * bio_clone_blkcg_association - clone blkcg association from src to dst bio
|
|
|
+ * bio_clone_blkg_association - clone blkg association from src to dst bio
|
|
|
* @dst: destination bio
|
|
|
* @src: source bio
|
|
|
*/
|
|
|
-void bio_clone_blkcg_association(struct bio *dst, struct bio *src)
|
|
|
+void bio_clone_blkg_association(struct bio *dst, struct bio *src)
|
|
|
{
|
|
|
- if (src->bi_css)
|
|
|
- WARN_ON(bio_associate_blkcg(dst, src->bi_css));
|
|
|
-
|
|
|
- if (src->bi_blkg)
|
|
|
+ if (src->bi_blkg) {
|
|
|
+ css_get(&bio_blkcg(src)->css);
|
|
|
bio_associate_blkg(dst, src->bi_blkg);
|
|
|
+ }
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(bio_clone_blkcg_association);
|
|
|
+EXPORT_SYMBOL_GPL(bio_clone_blkg_association);
|
|
|
#endif /* CONFIG_BLK_CGROUP */
|
|
|
|
|
|
static void __init biovec_init_slabs(void)
|