[PATCH U-BOOT v3 00/30] PLEASE TEST fs: btrfs: Re-implement btrfs support using code from btrfs-progs

Tom Rini trini at konsulko.com
Tue Sep 8 20:18:17 CEST 2020


On Wed, Jun 24, 2020 at 06:02:46PM +0200, Marek Behún wrote:

> Hello,
> 
> this is a cleaned up version of Qu's patches that reimplements U-Boot's
> btrfs driver with code from btrfs-progs.
> 
> I have tested this series, found and corrected one bug (failure when
> accesing files via symlinks), and it looks it is working now, but I
> would like more people to do some testing.
> 
> There are a lot of checkpatch warnings and errors left, I shall fix
> this in the future.
> 
> Marek
> 
> Changes since v2:
> - fixed btrfs_lookup_path() in patch 19 to correctly handle symlinks
> - commit messages were updated some
>   - for example they used the word "crossport" in 3 formats:
>     "crossport", "cross-port" and "cross port", this was changed
>     to "crossport"
>   - corrected some typos
>   - some English sentences were a bit weirdly written
> - fixed 2 compiler warnings (one use of maybe uninitialized variable and
>   one printf specifier warning)
> - indentation in some places was wrong (usage of 8 spaces instead of a
>   tab, for example)
> - added my Reviewed-by
> - the last patch, adding btrfs mailing list to MAINTAINRES, also adds
>   Qu as designated reviewer, so that people add him to Cc when they send
>   patches
> 
> Changes since v1:
> - Implement btrfs_list_subvols()
>   In v1 it's completely removed thus would cause problem if btrfsolume
>   command is compiled in.
> - Rebased to latest master
>   Only minor conflicts due to header changes.
> - Allow next_legnth() to return value > BTRFS_NAME_LEN
> 
> Below is Qu's explanation, from cover letter of v2:
> 
> The current btrfs code in U-boot is using a creative way to read on-disk
> data.
> It's pretty simple, involving the least amount of code, but pretty
> different from btrfs-progs nor kernel, making it pretty hard to sync
> code between different projects.
> 
> This big patchset will rework the btrfs support, to use code mostly from
> btrfs-progs, thus all existing btrfs developers will feel at home.
> 
> During the rework, the following new features are added:
> - More hash algorithm support
>   SHA256 and XXHASH support are added.
>   BLAKE2 needs more backport, will happen in a separate patchset.
> 
> - The ability to read degraded RAID1
>   Although we still only support one device btrfs, the new code base
>   can choose from different copies already.
>   As long as new device scan interface is provided, multi-device support
>   is pretty simple.
> 
> - More correct handling of compressed extents with offset
>   For compressed extent with offset, we should read the whole compressed
>   extent, decompress them, then copy the referred part.
> 
> There are some more features incoming, with the new code base it would
> be much easier to implement:
> - Data checksum support
>   The check would happen in read_extent_data(), btrfs-progs has the
>   needed facility to locate data csum.
> 
> - BLAKE2 support
>   Need BLAKE2 library cross ported.
>   For btrfs it's just several lines of modification.
> 
> - Multi-device support along wit degraded RAID support
>   We only need an interface to scan one device without opening it.
>   The infrastructure is already provided in this patchset.
> 
> These new features would be submitted after the patchset get merged,
> since the patchset is already large, I don't want to make it more scary.
> 
> Although this patchset look horribly large, most of them are code copy
> from btrfs-progs.
> E.g extent-cache.[ch], rbtree-utils.[ch], btrfs_btree.h.
> And ctree.h has over 1000 lines copied just for various accessors.
> 
> While for disk-io.[ch] and volumes-io.[ch], they have some small
> modifications to adapt the interface of U-boot.
> E.g. btrfs_device::fd is replace with blkdev_desc and disk_partition_t.
> 
> The new code for U-boot are related to the following functions:
> - btrfs_readlink()
> - btrfs_lookup_path()
> - btrfs_read_extent_inline()
> - btrfs_read_extent_reg()
> - lookup_data_extent()
> - btrfs_file_read()
> - btrfs_list_subvols()
> 
> Qu Wenruo (30):
>   fs: btrfs: Sync btrfs_btree.h from kernel
>   fs: btrfs: Add more checksum algorithms
>   fs: btrfs: Crossport btrfs_read_dev_super() from btrfs-progs
>   fs: btrfs: Crossport rbtree-utils from btrfs-progs
>   fs: btrfs: Crossport extent-cache.[ch] from btrfs-progs
>   fs: btrfs: Crossport extent-io.[ch] from btrfs-progs
>   fs: btrfs: Crossport structure accessor into ctree.h
>   fs: btrfs: Crossport volumes.[ch] from btrfs-progs
>   fs: btrfs: Crossport read_tree_block() from btrfs-progs
>   fs: btrfs: Rename struct btrfs_path to struct __btrfs_path
>   fs: btrfs: Rename btrfs_root to __btrfs_root
>   fs: btrfs: Crossport struct btrfs_root to ctree.h
>   fs: btrfs: Crossport btrfs_search_slot() from btrfs-progs
>   fs: btrfs: Crossport btrfs_read_sys_array() and
>     btrfs_read_chunk_tree()
>   fs: btrfs: Crossport open_ctree_fs_info() from btrfs-progs
>   fs: btrfs: Rename path resolve related functions to avoid name
>     conflicts
>   fs: btrfs: Use btrfs_readlink() to implement __btrfs_readlink()
>   fs: btrfs: inode: Allow next_length() to return value > BTRFS_NAME_LEN
>   fs: btrfs: Implement btrfs_lookup_path()
>   fs: btrfs: Use btrfs_iter_dir() to replace btrfs_readdir()
>   fs: btrfs: Use btrfs_lookup_path() to implement btrfs_exists() and
>     btrfs_size()
>   fs: btrfs: Rename btrfs_file_read() and its callees to avoid name
>     conflicts
>   fs: btrfs: Introduce btrfs_read_extent_inline() and
>     btrfs_read_extent_reg()
>   fs: btrfs: Introduce lookup_data_extent() for later use
>   fs: btrfs: Implement btrfs_file_read()
>   fs: btrfs: Introduce function to resolve path in one subvolume
>   fs: btrfs: Introduce function to resolve the path of one subvolume
>   fs: btrfs: Imeplement btrfs_list_subvols() using new infrastructure
>   fs: btrfs: Cleanup the old implementation
>   MAINTAINERS: Add btrfs mailing list and myself as reviewer

With the changes I followed up on to specific patches, the series has
been applied to u-boot/next, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200908/104c6c31/attachment.sig>


More information about the U-Boot mailing list