On 1/5/21 10:37 AM, Tejun Heo wrote: > When initializing iocost for a queue, its rqos should be registered before > the blkcg policy is activated to allow policy data initiailization to lookup > the associated ioc. This unfortunately means that the rqos methods can be > called on bios before iocgs are attached to all existing blkgs. > > While the race is theoretically possible on ioc_rqos_throttle(), it mostly > happened in ioc_rqos_merge() due to the difference in how they lookup ioc. > The former determines it from the passed in @rqos and then bails before > dereferencing iocg if the looked up ioc is disabled, which most likely is > the case if initialization is still in progress. The latter looked up ioc by > dereferencing the possibly NULL iocg making it a lot more prone to actually > triggering the bug. > > * Make ioc_rqos_merge() use the same method as ioc_rqos_throttle() to look > up ioc for consistency. > > * Make ioc_rqos_throttle() and ioc_rqos_merge() test for NULL iocg before > dereferencing it. Applied, thanks. -- Jens Axboe