summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
Diffstat (limited to 'block')
-rw-r--r--block/bio.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/block/bio.c b/block/bio.c
index c4f87018fb79..2a00d349cd68 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1988,6 +1988,28 @@ struct bio_set *bioset_create_nobvec(unsigned int pool_size, unsigned int front_
1988EXPORT_SYMBOL(bioset_create_nobvec); 1988EXPORT_SYMBOL(bioset_create_nobvec);
1989 1989
1990#ifdef CONFIG_BLK_CGROUP 1990#ifdef CONFIG_BLK_CGROUP
1991
1992/**
1993 * bio_associate_blkcg - associate a bio with the specified blkcg
1994 * @bio: target bio
1995 * @blkcg_css: css of the blkcg to associate
1996 *
1997 * Associate @bio with the blkcg specified by @blkcg_css. Block layer will
1998 * treat @bio as if it were issued by a task which belongs to the blkcg.
1999 *
2000 * This function takes an extra reference of @blkcg_css which will be put
2001 * when @bio is released. The caller must own @bio and is responsible for
2002 * synchronizing calls to this function.
2003 */
2004int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css)
2005{
2006 if (unlikely(bio->bi_css))
2007 return -EBUSY;
2008 css_get(blkcg_css);
2009 bio->bi_css = blkcg_css;
2010 return 0;
2011}
2012
1991/** 2013/**
1992 * bio_associate_current - associate a bio with %current 2014 * bio_associate_current - associate a bio with %current
1993 * @bio: target bio 2015 * @bio: target bio
@@ -2005,7 +2027,7 @@ int bio_associate_current(struct bio *bio)
2005{ 2027{
2006 struct io_context *ioc; 2028 struct io_context *ioc;
2007 2029
2008 if (bio->bi_ioc) 2030 if (bio->bi_css)
2009 return -EBUSY; 2031 return -EBUSY;
2010 2032
2011 ioc = current->io_context; 2033 ioc = current->io_context;