[chao-linux:erofs-dev 24/33] fs/erofs/unzip_vle.c:651:1-7: preceding lock on line 509

Gao Xiang gaoxiang25 at huawei.com
Tue Jul 3 17:43:56 AEST 2018


Hi Julia,

On 2018/7/3 15:13, Julia Lawall wrote:
> 
> On Tue, 3 Jul 2018, Gao Xiang wrote:
> 
>> Hi Julia,
>>
>> On 2018/7/3 13:27, Julia Lawall wrote:
>>> Hello,
>>>
>>> There is not actually a bug here, but I wonder if the backwards goto int
>>> another if branch (use_global_pagemap) is really the best way to do this?
>>> I found it rather confusing to think about.  It could be better to just
>>> duplicate the assignment to pages, or make a flag that would be tested
>>> after the if-else.
>>>
>> I wrote this code just because of the designed pagemap allocation policy:
>>
>> If the pagemap is too large enough to alloc onstack, then
>>     I try to use the global pagemap with "trylock" if the global pagemap is not occupied.
>>     or if the global pagemap is occupied,
>>          alloc a pagemap if the corresponding memory allocation is ok,
>>          or if the memory allocation is failed, fall back to use the global pagemap with sleeping "lock" again.
>>
>> If the code style makes automatic testing confused, I could use alternative way to replace it in the next version.
> In the end, I understood the structure, but I think that a backwards goto
> into another if branch is a bit of mental overload.

In that case you are absolutely right. :)

However, in my opinion, if the use case is more complicated than just one statement
	"pages = z_pagemap_global;"

I personally tend to leave a common label to merge these two if-s into a common snippet
(if and only if the snippet has understandable meaning), either backward or afterward is ok for me.

eg.
   if (a) {
       (diff)
       goto common;
   } else if (b) {
       (diff)

/* iff it is a meaningful and understandable snippet */
common:
       (more than one statements)
   }

Using an extra flag is another way, it also has no runtime overhead.

But if functions already has too many local variables and if it is not a good idea to seperate it into sub-functions,
I think avoid more local variables is also good for understanding.

That is my personal code style tho. I could take care and use another way if needed.


Thanks,
Gao Xiang

> 
> julia
> 


More information about the Linux-erofs mailing list