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 <[email protected]>
>>> ---
>>> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel