Ping ...

On 2016/11/25 11:53, Junling Zheng wrote:
> Sorry, I forget to get the return value of dev_write_block :(
> Please review the following patch :)
> 
> ---
>  fsck/resize.c | 25 ++++++++++++++-----------
>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/fsck/resize.c b/fsck/resize.c
> index 46aa30e..9f9c7a6 100644
> --- a/fsck/resize.c
> +++ b/fsck/resize.c
> @@ -207,30 +207,33 @@ static void migrate_ssa(struct f2fs_sb_info *sbi,
>       block_t old_sum_blkaddr = get_sb(ssa_blkaddr);
>       block_t new_sum_blkaddr = get_newsb(ssa_blkaddr);
>       block_t end_sum_blkaddr = get_newsb(main_blkaddr);
> +     block_t expand_sum_blkaddr = new_sum_blkaddr +
> +                                     TOTAL_SEGS(sbi) - offset;
>       block_t blkaddr;
> +     int ret;
>       void *zero_block = calloc(BLOCK_SZ, 1);
> -
>       ASSERT(zero_block);
> 
>       if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) {
>               blkaddr = new_sum_blkaddr;
>               while (blkaddr < end_sum_blkaddr) {
> -                     if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi))
> -                             move_ssa(sbi, offset, blkaddr);
> -                     else
> -                             dev_write_block(zero_block, blkaddr);
> -                     offset++;
> -                     blkaddr++;
> +                     if (blkaddr < expand_sum_blkaddr)
> +                             move_ssa(sbi, offset++, blkaddr++);
> +                     else {
> +                             ret = dev_write_block(zero_block, blkaddr++);
> +                             ASSERT(ret >=0);
> +                     }
>               }
>       } else {
>               blkaddr = end_sum_blkaddr - 1;
>               offset = TOTAL_SEGS(sbi) - 1;
>               while (blkaddr >= new_sum_blkaddr) {
> -                     if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr)
> -                             dev_write_block(zero_block, blkaddr);
> +                     if (blkaddr >= expand_sum_blkaddr) {
> +                             ret = dev_write_block(zero_block, blkaddr--);
> +                             ASSERT(ret >=0);
> +                     }
>                       else
> -                             move_ssa(sbi, offset--, blkaddr);
> -                     blkaddr--;
> +                             move_ssa(sbi, offset--, blkaddr--);
>               }
>       }
> 
> 
> On 2016/11/25 11:32, Junling Zheng wrote:
>> How about the following patch, which I think would be a little better :)
>>
>> diff --git a/fsck/resize.c b/fsck/resize.c
>> index 46aa30e..c295a06 100644
>> --- a/fsck/resize.c
>> +++ b/fsck/resize.c
>> @@ -207,30 +207,33 @@ static void migrate_ssa(struct f2fs_sb_info *sbi,
>>      block_t old_sum_blkaddr = get_sb(ssa_blkaddr);
>>      block_t new_sum_blkaddr = get_newsb(ssa_blkaddr);
>>      block_t end_sum_blkaddr = get_newsb(main_blkaddr);
>> +    block_t expand_sum_blkaddr = new_sum_blkaddr +
>> +                                    TOTAL_SEGS(sbi) - offset;
>>      block_t blkaddr;
>> +    int ret;
>>      void *zero_block = calloc(BLOCK_SZ, 1);
>> -
>>      ASSERT(zero_block);
>>
>>      if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) {
>>              blkaddr = new_sum_blkaddr;
>>              while (blkaddr < end_sum_blkaddr) {
>> -                    if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi))
>> -                            move_ssa(sbi, offset, blkaddr);
>> -                    else
>> -                            dev_write_block(zero_block, blkaddr);
>> -                    offset++;
>> -                    blkaddr++;
>> +                    if (blkaddr < expand_sum_blkaddr)
>> +                            move_ssa(sbi, offset++, blkaddr++);
>> +                    else {
>> +                            dev_write_block(zero_block, blkaddr++);
>> +                            ASSERT(ret >=0);
> 
> forget to get the return value of dev_write_block :(
> 
>> +                    }
>>              }
>>      } else {
>>              blkaddr = end_sum_blkaddr - 1;
>>              offset = TOTAL_SEGS(sbi) - 1;
>>              while (blkaddr >= new_sum_blkaddr) {
>> -                    if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr)
>> -                            dev_write_block(zero_block, blkaddr);
>> +                    if (blkaddr >= expand_sum_blkaddr) {
>> +                            dev_write_block(zero_block, blkaddr--);
>> +                            ASSERT(ret >=0);
>> +                    }
>>                      else
>> -                            move_ssa(sbi, offset--, blkaddr);
>> -                    blkaddr--;
>> +                            move_ssa(sbi, offset--, blkaddr--);
>>              }
>>      }
>>
>>
>> On 2016/11/24 15:33, Yunlei He wrote:
>>> This patch fix an error in migrate_ssa when resize with condition
>>> that offset is not zero && new_sum_blkaddr > old_sum_blkaddr + offset
>>>
>>> Signed-off-by: Yunlei He <heyun...@huawei.com>
>>> ---
>>>  fsck/resize.c | 37 +++++++++++++++++++++++++++----------
>>>  1 file changed, 27 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/fsck/resize.c b/fsck/resize.c
>>> index 46aa30e..70dbef5 100644
>>> --- a/fsck/resize.c
>>> +++ b/fsck/resize.c
>>> @@ -208,28 +208,45 @@ static void migrate_ssa(struct f2fs_sb_info *sbi,
>>>     block_t new_sum_blkaddr = get_newsb(ssa_blkaddr);
>>>     block_t end_sum_blkaddr = get_newsb(main_blkaddr);
>>>     block_t blkaddr;
>>> +   unsigned int offset1 = offset;
>>> +   int ret = 1;
>>>     void *zero_block = calloc(BLOCK_SZ, 1);
>>>  
>>>     ASSERT(zero_block);
>>>  
>>> -   if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) {
>>> -           blkaddr = new_sum_blkaddr;
>>> -           while (blkaddr < end_sum_blkaddr) {
>>> -                   if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi))
>>> -                           move_ssa(sbi, offset, blkaddr);
>>> -                   else
>>> -                           dev_write_block(zero_block, blkaddr);
>>> -                   offset++;
>>> -                   blkaddr++;
>>> +   if (offset) {
>>> +           if (new_sum_blkaddr < old_sum_blkaddr + offset) {
>>> +                   blkaddr = new_sum_blkaddr;
>>> +                   while (blkaddr < end_sum_blkaddr) {
>>> +                           if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi) 
>>> - offset1)
>>> +                                   move_ssa(sbi, offset, blkaddr);
>>> +                           else
>>> +                                   ret = dev_write_block(zero_block, 
>>> blkaddr);
>>> +                           ASSERT(ret >= 0);
>>> +                           offset++;
>>> +                           blkaddr++;
>>> +                   }
>>> +           } else {
>>> +                   blkaddr = end_sum_blkaddr - 1;
>>> +                   offset = TOTAL_SEGS(sbi)-1;
>>> +                   while (blkaddr >= new_sum_blkaddr) {
>>> +                           if (blkaddr >= TOTAL_SEGS(sbi) - offset1 + 
>>> new_sum_blkaddr)
>>> +                                   ret = dev_write_block(zero_block, 
>>> blkaddr);
>>> +                           else
>>> +                                   move_ssa(sbi, offset--, blkaddr);
>>> +                           ASSERT(ret >= 0);
>>> +                           blkaddr--;
>>> +                   }
>>>             }
>>>     } else {
>>>             blkaddr = end_sum_blkaddr - 1;
>>>             offset = TOTAL_SEGS(sbi) - 1;
>>>             while (blkaddr >= new_sum_blkaddr) {
>>>                     if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr)
>>> -                           dev_write_block(zero_block, blkaddr);
>>> +                           ret = dev_write_block(zero_block, blkaddr);
>>>                     else
>>>                             move_ssa(sbi, offset--, blkaddr);
>>> +                   ASSERT(ret >= 0);
>>>                     blkaddr--;
>>>             }
>>>     }
>>>
>>
>>
>>
>> .
>>
> 



------------------------------------------------------------------------------
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to