summaryrefslogtreecommitdiffstats
path: root/drivers/block/loop.h
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2017-09-25 13:07:22 -0600
committerJens Axboe <axboe@kernel.dk>2017-09-26 07:41:22 -0600
commitd4478e92d6186ce37947a36994de407c27446266 (patch)
tree1eb773ad4b1a6cdf2b3d56a2f1240f476612f436 /drivers/block/loop.h
parent902ec5b6de0678ac2effba0faaafdd1c3e7fcf2e (diff)
downloadlinux-d4478e92d6186ce37947a36994de407c27446266.tar.gz
linux-d4478e92d6186ce37947a36994de407c27446266.tar.bz2
linux-d4478e92d6186ce37947a36994de407c27446266.zip
block/loop: make loop cgroup aware
loop block device handles IO in a separate thread. The actual IO dispatched isn't cloned from the IO loop device received, so the dispatched IO loses the cgroup context. I'm ignoring buffer IO case now, which is quite complicated. Making the loop thread aware cgroup context doesn't really help. The loop device only writes to a single file. In current writeback cgroup implementation, the file can only belong to one cgroup. For direct IO case, we could workaround the issue in theory. For example, say we assign cgroup1 5M/s BW for loop device and cgroup2 10M/s. We can create a special cgroup for loop thread and assign at least 15M/s for the underlayer disk. In this way, we correctly throttle the two cgroups. But this is tricky to setup. This patch tries to address the issue. We record bio's css in loop command. When loop thread is handling the command, we then use the API provided in patch 1 to set the css for current task. The bio layer will use the css for new IO (from patch 3). Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block/loop.h')
-rw-r--r--drivers/block/loop.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/block/loop.h b/drivers/block/loop.h
index 1f3956702993..0f45416e4fcf 100644
--- a/drivers/block/loop.h
+++ b/drivers/block/loop.h
@@ -72,6 +72,7 @@ struct loop_cmd {
long ret;
struct kiocb iocb;
struct bio_vec *bvec;
+ struct cgroup_subsys_state *css;
};
/* Support for loadable transfer modules */