On 3/12/24 3:48 PM, Jakub Kicinski wrote: > On Tue, 12 Mar 2024 15:40:07 -0600 Jens Axboe wrote: >> Hmm, I wonder if the below will fix it. At least from the timer side, >> we should not be using the cached clock. >> >> >> diff --git a/block/blk-iocost.c b/block/blk-iocost.c >> 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 :) Thanks! I think the better fix is probably the one below. I pondered adding a WARN_ON_ONCE() here, but I think just checking for in_task state is probably the saner way forward, just in case... But I strongly suspect the previous one should sort it for you. 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(); /* -- Jens Axboe