Re: [PATCH 1/1] tracing: fix bug in rb_per_cpu_empty() that might cause deadloop.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 21 Jul 2021 02:35:56 +0800 Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxx> wrote:
 > On Tue, Jul 20, 2021 at 2:04 AM Haoran Luo <www@xxxxxxxxxxxxxx> wrote: 
 > > 
 > >         return reader->read == rb_page_commit(reader) && 
 > >                 (commit == reader || 
 > >                  (commit == head && 
 > > -                 head->read == rb_page_commit(commit))); 
 > > +                 (rb_page_commit(commit) == 0 || 
 > > +                  head->read == rb_page_commit(commit)))); 
 > >  } 
 >  
 > Can we please re-write that whole thing to be legible? 
 >  
 > That conditional was complicated before. It's worse now. 
 >  
 > For example, just splitting it up would help: 
 >  
 >  if (reader->read != rb_page_commit(reader)) 
 >  return false; 
 >  
 >  if (commit == reader) 
 >  return true; 
 >  
 >  if (commit != head) 
 >  return false; 
 >  
 >  return !rb_page_commit(commit) || 
 >  commit->read == rb_page_commit(commit); 
 >  
 > but adding comments to each conditional case would also be good. 
 >  
 > Note: I checked "head->read" to "commit->read" in that last 
 > conditional, because we had _just_ verified that "commit" and "head" 
 > are the same, and it seems to be more logical to check "commit->read" 
 > with "rb_page_commit(commit)". 
 >  
 > (And somebody should check that I split it right - I'm just doing this 
 > in the MUA without knowing the code: I hate conditionals that are 
 > cross multiple lines like this, and I hate them particularly when they 
 > turn out to be buggy, so when you fix a complex conditional, that's a 
 > BIG sign to me that the problem was that the conditional was too 
 > complex to begin with). 
 >  
 > Btw, that "rb_page_commit()" forces a new atomic read each time, so 
 > the "rb_page_commit(commit)" value should probably be cached as a 
 > variable before it's used twice. 
 >  
 > Steven? 
 >  
 >  Linus 
 > 

Agreed, this piece of code would be less likely to be buggy if they
are commented by what they are judging. I will do it and send the next
version of patch.



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux