Re: [PATCH v4 00/18] btrfs-progs: lowmem check: avoid extents overwrite

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

 




On 2018年05月08日 10:09, Su Yue wrote:
> 
> 
> On 05/08/2018 02:17 AM, David Sterba wrote:
>> On Thu, Feb 08, 2018 at 11:27:19AM +0800, Su Yue wrote:
>>> This patchset can be fetched from my github:
>>> https://github.com/Damenly/btrfs-progs/tree/lowmem
>>> based on unmerged patchset whose cover:
>>>        [PATCH 0/3] btrfs-progs: Split original mode check to its own
>>>        Author: Qu Wenruo <wqu@xxxxxxxx>
>>>        I'm sorry to send patches based on unmerged patch if it let
>>> you feel
>>> uncomfortable.
>>> I think the three patches from Qu are good enough so I send it before
>>> my vacation.
>>>
>>> Patch[1-3] fix minor problems of lowmem repair.
>>>
>>> Patch[4-8] introduce two ways to avoid extents overwrite:
>>> 1) Traverse trees and exclude all metadata blocks.
>>>     It's time-inefficient for large filesystems.
>>> 2) Mark all existed chunks full, allocate new chunk for CoW and
>>>     records chunk start.
>>>     If the last allocated chunk is almost full, allocated a new one.
>>> 2) is More efficient than 1). However, it can't handle situations
>>> like no space(fsck/004).
>>> Lowmem repair will try method 2 first and then method 1.
>>>
>>> Patch[9-17] remove parameters @trans in functions for lowmem repair.
>>> They try to avoid extents overwrite if necessary and start
>>> transactions by themselves.
>>>
>>> Patch[18] adds a test image.
>>> Those patches are mainly for lowmem repair. Original mode is not
>>> influenced.
>>>
>>> ---
>>> Changlog:
>>> v4->v3:
>>>   - Remove global enum extents_operation to simplify
>>>     avoid_extents_overwrite() and its cleanup.
>>>   - Rebase after work of check split.
>>>   v3->v2:
>>>   - check_btrfs_root() returns FATAL_ERROR if check_fs_first_inode()
>>>     failed. Thanks Nikolay Borisov.
>>>   - Add function try_to_force_cow_in_new_chunk() and global u64
>>>     varaiable to record start of the last allocated chunk.
>>>   - Remove unused EXTENTS_PIN in enum lowmem_extents_operation.
>>>   v2->v1:
>>>   - Let @err in check_btrfs_root() record err bits but excluded
>>>     negative values.
>>>   - Do not delete a line of code to release path after extent item'
>>>     insertion in repair_extent_data_item().
>>>   - Add patch[3].
>>>   - Force CoW in new allocated chunk to avoid extents overwrite.
>>>   - Remove parameters @trans in check_chunks_and_extents_v2() and
>>>     related callees.
>>>   - Repair functions for lowmem mode call try_avoid_extents_overwrite()
>>>     and start transactions.
>>>     Su Yue (18):
>>>    btrfs-progs: lowmem check: release path in repair_extent_data_item()
>>>    btrfs-progs: lowmem check: record returned errors after
>>>      walk_down_tree_v2()
>>>    btrfs-progs: lowmem check: assign @parent early in
>>>      repair_extent_data_item()
>>>    btrfs-progs: lowmem check: exclude extents of metadata blocks
>>
>> Patch 1-4 added to devel.
>>
>>>    btrfs-progs: lowmem check: introduce mark/clear_block_groups_full()
>>
>> There were too many conflicts starting with this patch.
>>
>> Can you please refresh teh rest of the series and resend?
>>
> OK of cource. An small question below.
> 
> Though this patchset is for lowmem mode, it also changes original mode
> for code reuse.
> 
> This patch and remainings base on Qu's unmerged patchset:
>     [PATCH 0/3] btrfs-progs: Split original mode check to its own
>         Author: Qu Wenruo <wqu@xxxxxxxx>
> New version is named
>     [PATCH 0/3] btrfs-progs: Split mode-original code
>     Author: Qu Wenruo <wqu@xxxxxxxx>

Sorry, that patchset will not be updated until we get a relatively
stable check code base.
So I'm afraid you need to base them on current devel branch other than
my patchset.

Thanks,
Qu

> 
> I just tried to rebase his brach named split_check_for_david to devel
> but failed with conflictions.
> 
> Does V2 need to get rid of the precondition and just rebases to devel?
> Or to wait completion of split?
> 
> Thanks,
> Su
> 
>> For subject please use "btrfs-progs: check: lowmem: ..." and try to fix
>> the typos in the changelogs. Thanks.
>>
>>
>>
>>>    btrfs-progs: lowmem check: introduce try_force_cow_in_new_chunk()
>>>    btrfs-progs: lowmem check: introduce avoid_extents_overwrite()
>>>    btrfs-progs: lowmem check: exclude extents if init-extent-tree in
>>>      lowmem
>>>    btrfs-progs: lowmem check: start to remove parameters @trans in
>>> lowmem
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      delete_extent_item()
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      repair_chunk_item()
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      repair_extent_item()
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      check_leaf_items()
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      repair_tree_back_ref()
>>>    btrfs-progs: lowmem check: remove parameter @trans of
>>>      check_btrfs_root()
>>>    btrfs-progs: lowmem check: introduce repair_block_accounting()
>>>    btrfs-progs: lowmem check: end of removing parameters @trans in
>>> lowmem
>>>    btrfs-progs: fsck-tests: add image no extent with normal device size
>>
>>
>>
> 
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux