[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fee2fccf-ef4d-4595-8f20-07ba4dc67d42@kernel.dk>
Date: Tue, 12 Mar 2024 16:02:08 -0600
From: Jens Axboe <axboe@...nel.dk>
To: Jakub Kicinski <kuba@...nel.org>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
Johannes Thumshirn <johannes.thumshirn@....com>, davem@...emloft.net,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org, pabeni@...hat.com,
bpf@...r.kernel.org, Tejun Heo <tj@...nel.org>
Subject: Re: [GIT PULL] Networking for v6.9
On 3/12/24 3:55 PM, Jakub Kicinski wrote:
> On Tue, 12 Mar 2024 14:48:06 -0700 Jakub Kicinski wrote:
>>> index 9a85bfbbc45a..646b50e1c914 100644
>>> --- a/block/blk-iocost.c
>>> +++ b/block/blk-iocost.c
>>> @@ -1044,7 +1044,7 @@ static void ioc_now(struct ioc *ioc, struct ioc_now *now)
>>> unsigned seq;
>>> u64 vrate;
>>>
>>> - now->now_ns = blk_time_get_ns();
>>> + now->now_ns = ktime_get_ns();
>>> now->now = ktime_to_us(now->now_ns);
>>> vrate = atomic64_read(&ioc->vtime_rate);
>>
>> Let me try this, 'cause doing the revert while listening to some
>> meeting is beyond me :)
>
> That fixes the crash for me!
OK good, thanks for testing! Linus, can you just pick up the below? I
can prep a pull as well, but not ready to send the remaining merge
window fixes just yet.
>From fb280ede759d1918fec03bc22d32eeaaa45500bb Mon Sep 17 00:00:00 2001
From: Jens Axboe <axboe@...nel.dk>
Date: Tue, 12 Mar 2024 15:58:41 -0600
Subject: [PATCH] block: limit block time caching to in_task() context
We should not have any callers of this from non-task context, but Jakub
ran [1] into one from blk-iocost. Rather than risk running into others,
or future ones, just limit blk_time_get_ns() to when it is called from
a task. Any other usage is invalid.
[1] https://lore.kernel.org/lkml/CAHk-=wiOaBLqarS2uFhM1YdwOvCX4CZaWkeyNDY1zONpbYw2ig@mail.gmail.com/
Fixes: da4c8c3d0975 ("block: cache current nsec time in struct blk_plug")
Reported-by: Jakub Kicinski <kuba@...nel.org>
Signed-off-by: Jens Axboe <axboe@...nel.dk>
---
block/blk.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/block/blk.h b/block/blk.h
index a19b7b42e650..5cac4e29ae17 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -534,7 +534,7 @@ static inline u64 blk_time_get_ns(void)
{
struct blk_plug *plug = current->plug;
- if (!plug)
+ if (!plug || !in_task())
return ktime_get_ns();
/*
--
2.43.0
--
Jens Axboe
Powered by blists - more mailing lists