mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-17 02:08:38 +00:00
4aebb99486
This patch uses generic code from btrfs-progs to read one super block from block device. To support the btrfs-progs coding style, the following is also crossported: - BTRFS_SETGET_FUNC for btrfs_super_block - btrfs_check_super() function - Move btrfs_read_superblock() to disk-io.[ch] Since super.c only contains pretty small amount of code, and the extra check will be covered in later root read patches. Differences between this implementation and btrfs-progs: - No sbflags/sb_bytenr support Since we only need to read the primary super block (like kernel), sbflags/sb_bytenr used by super block recovery is not needed. This also changes the following behavior of U-Boot btrfs: - Only reads the primary super block The old implementation reads all 3 super blocks, and also one non-existing backup. This is not correct, especially if there is another filesystem created on the device but old superblocks are not rewritten. Just like kernel, we only check the primary super block. Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Marek Behún <marek.behun@nic.cz> [trini: Change error to be a define in compat.h] Signed-off-by: Tom Rini <trini@konsulko.com>
57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
|
|
#ifndef __BTRFS_COMPAT_H__
|
|
#define __BTRFS_COMPAT_H__
|
|
|
|
#include <linux/errno.h>
|
|
#include <fs_internal.h>
|
|
#include <uuid.h>
|
|
|
|
/* Provide a compatibility layer to make code syncing easier */
|
|
|
|
/* A simple wraper to for error() used in btrfs-progs */
|
|
#define error(fmt, ...) pr_err("BTRFS: " fmt "\n", ##__VA_ARGS__)
|
|
|
|
#define BTRFS_UUID_UNPARSED_SIZE 37
|
|
|
|
/*
|
|
* Macros to generate set/get funcs for the struct fields
|
|
* assume there is a lefoo_to_cpu for every type, so lets make a simple
|
|
* one for u8:
|
|
*/
|
|
#define le8_to_cpu(v) (v)
|
|
#define cpu_to_le8(v) (v)
|
|
#define __le8 u8
|
|
|
|
/*
|
|
* Read data from device specified by @desc and @part
|
|
*
|
|
* U-boot equivalent of pread().
|
|
*
|
|
* Return the bytes of data read.
|
|
* Return <0 for error.
|
|
*/
|
|
static inline int __btrfs_devread(struct blk_desc *desc,
|
|
struct disk_partition *part,
|
|
void *buf, size_t size, u64 offset)
|
|
{
|
|
lbaint_t sector;
|
|
int byte_offset;
|
|
int ret;
|
|
|
|
sector = offset >> desc->log2blksz;
|
|
byte_offset = offset % desc->blksz;
|
|
|
|
/* fs_devread() return 0 for error, >0 for success */
|
|
ret = fs_devread(desc, part, sector, byte_offset, size, buf);
|
|
if (!ret)
|
|
return -EIO;
|
|
return size;
|
|
}
|
|
|
|
static inline void uuid_unparse(const u8 *uuid, char *out)
|
|
{
|
|
return uuid_bin_to_str((unsigned char *)uuid, out, 0);
|
|
}
|
|
|
|
#endif
|