diff options
Diffstat (limited to 'block')
-rw-r--r-- | block/bio.c | 24 |
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_ | |||
1988 | EXPORT_SYMBOL(bioset_create_nobvec); | 1988 | EXPORT_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 | */ | ||
2004 | int 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; |