On Wed, Jan 12, 2022 at 12:51:13PM +0000, John Garry wrote: > On 12/01/2022 12:30, Andy Shevchenko wrote: > > > > > + if (test_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags) || > > > > > + test_and_set_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags)) { > > > > Whoever wrote this code did too much defensive programming, because the first > > > > conditional doesn't make much sense here. Am I right? > > > > > > > I think because this judgement is in the general IO process, there are also > > > some performance considerations here. > > I didn't buy this. Is there any better argument why you need redundant > > test_bit() call? > > I think that the idea is that test_bit() is fast and test_and_set_bit() is > slow; as such, if we generally expect the bit to be set, then there is no > need to do the slower test_and_set_bit() always. It doesn't sound thought through solution, the bit can be flipped in between, so what is this all about? Maybe missing proper serialization somewhere else? -- With Best Regards, Andy Shevchenko