>> --- a/fs/jffs2/nodemgmt.c
>> +++ b/fs/jffs2/nodemgmt.c
>> @@ -216,15 +216,20 @@ int jffs2_reserve_space_gc(struct jffs2_sb_info *c, 
>> uint32_t minsize,
>>  
>>      jffs2_dbg(1, "%s(): Requested 0x%x bytes\n", __func__, minsize);
>>  
>> -    spin_lock(&c->erase_completion_lock);
>> -    while(ret == -EAGAIN) {
>> +    while (true) {
>> +            spin_lock(&c->erase_completion_lock);
>>              ret = jffs2_do_reserve_space(c, minsize, len, sumsize);
>>              if (ret) {
>>                      jffs2_dbg(1, "%s(): looping, ret is %d\n",
>>                                __func__, ret);
>>              }
>> +            spin_unlock(&c->erase_completion_lock);
>> +
>> +            if (ret == -EAGAIN)
>> +                    cond_resched();
>> +            else
>> +                    break;
>>      }
>> -    spin_unlock(&c->erase_completion_lock);
>>      if (!ret)
>>              ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
> 
> Looks OK.  We can do this:
> 

Yeah, thanks for the cleanup.

> --- 
> a/fs/jffs2/nodemgmt.c~jffs2-avoid-soft-lockup-in-jffs2_reserve_space_gc-fix
> +++ a/fs/jffs2/nodemgmt.c
> @@ -211,7 +211,7 @@ out:
>  int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize,
>                          uint32_t *len, uint32_t sumsize)
>  {
> -     int ret = -EAGAIN;
> +     int ret;
>       minsize = PAD(minsize);
>  
>       jffs2_dbg(1, "%s(): Requested 0x%x bytes\n", __func__, minsize);
> _

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to