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@xxxxxxxxx> 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@xxxxxxxxxxxxxx/ Fixes: da4c8c3d0975 ("block: cache current nsec time in struct blk_plug") Reported-by: Jakub Kicinski <kuba@xxxxxxxxxx> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> --- 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