summaryrefslogtreecommitdiffstats
path: root/block/bio.c
diff options
context:
space:
mode:
authorDennis Zhou <dennis@kernel.org>2018-12-19 16:43:21 -0600
committerJens Axboe <axboe@kernel.dk>2018-12-21 08:47:05 -0700
commit6ab2187992f4b0112852e5a097a2b6c7d167e2e5 (patch)
tree985c4235d6407aab7daab76082029c025c320f70 /block/bio.c
parent5816a0932b4fd74257b8cc5785bc8067186a8723 (diff)
downloadlinux-6ab2187992f4b0112852e5a097a2b6c7d167e2e5.tar.gz
linux-6ab2187992f4b0112852e5a097a2b6c7d167e2e5.tar.bz2
linux-6ab2187992f4b0112852e5a097a2b6c7d167e2e5.zip
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.c4
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 */