diff options
author | Dennis Zhou <dennis@kernel.org> | 2018-12-20 01:43:21 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-12-21 18:47:05 +0300 |
commit | 6ab2187992f4b0112852e5a097a2b6c7d167e2e5 (patch) | |
tree | 985c4235d6407aab7daab76082029c025c320f70 /block/bio.c | |
parent | 5816a0932b4fd74257b8cc5785bc8067186a8723 (diff) |
blkcg: clean up blkg_tryget_closest()
The implementation of blkg_tryget_closest() wasn't super obvious and
became a point of suspicion when debugging [1]. So let's clean it up so
it's obviously not the problem.
Also add missing RCU read locking to bio_clone_blkg_association(), which
got exposed by adding the RCU read lock held check in
blkg_tryget_closest().
[1] https://lore.kernel.org/linux-block/a7e97e4b-0dd8-3a54-23b7-a0f27b17fde8@kernel.dk/
Signed-off-by: Dennis Zhou <dennis@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/bio.c')
-rw-r--r-- | block/bio.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/block/bio.c b/block/bio.c index c288b9057042..9194d8ad3d5e 100644 --- a/block/bio.c +++ b/block/bio.c @@ -2096,8 +2096,12 @@ EXPORT_SYMBOL_GPL(bio_associate_blkg); */ void bio_clone_blkg_association(struct bio *dst, struct bio *src) { + rcu_read_lock(); + if (src->bi_blkg) __bio_associate_blkg(dst, src->bi_blkg); + + rcu_read_unlock(); } EXPORT_SYMBOL_GPL(bio_clone_blkg_association); #endif /* CONFIG_BLK_CGROUP */ |