On Thu, 2024-06-27 at 15:59 +0800, Wenchao Hao wrote: > > Hi Peter, > > What is queue_num's offset of blk_mq_hw_ctx in your machine? > > gdb vmlinux > > (gdb) print /x (int)&((struct blk_mq_hw_ctx *)0)->queue_num > $5 = 0x164 > > I read your descriptions and wondered a same race flow as you > described > following. But I found the offset mismatch, if the racing flow is > correct, > then the address accessed in blk_mq_unique_tag() should be 0x164, not > 0x194. > Maybe the offset is different between our machine? > > What's more, if the racing flow is correct, I did not get how your > changes > can address this racing flow. > > Hi Wenchao Hao, Yes, our queue_num's offset of blk_mq_hw_ctx is 0x194. Our kernel version is: Linux version 6.1.68 I think the offset is different by kernel version. (gdb) print /x (int)&((struct blk_mq_hw_ctx *)0)->queue_num $1 = 0x194 And yes, it only shorten the race window of step3 and step5. Reduce the probability of step 4 appearing between step 3 and step 5. Thanks. Peter