|
@@ -1988,6 +1988,28 @@ struct bio_set *bioset_create_nobvec(unsigned int pool_size, unsigned int front_
|
|
|
EXPORT_SYMBOL(bioset_create_nobvec);
|
|
|
|
|
|
#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.
|
|
|
+ */
|
|
|
+int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css)
|
|
|
+{
|
|
|
+ if (unlikely(bio->bi_css))
|
|
|
+ return -EBUSY;
|
|
|
+ css_get(blkcg_css);
|
|
|
+ bio->bi_css = blkcg_css;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* bio_associate_current - associate a bio with %current
|
|
|
* @bio: target bio
|
|
@@ -2005,7 +2027,7 @@ int bio_associate_current(struct bio *bio)
|
|
|
{
|
|
|
struct io_context *ioc;
|
|
|
|
|
|
- if (bio->bi_ioc)
|
|
|
+ if (bio->bi_css)
|
|
|
return -EBUSY;
|
|
|
|
|
|
ioc = current->io_context;
|