diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-03-27 16:55:41 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-04-09 18:43:24 +0200 |
commit | d6f7e3da0dae7b60cb7565f8a47c3b9045c52d1d (patch) | |
tree | f4141f44583268939fe84386bb2fb75cc49ae54c /utils.h | |
parent | 28810549562d051f0f002590cb6c98b004a09927 (diff) |
Btrfs-progs: make btrfs-image restore with a valid chunk tree V2
Previously btrfs-image would set a METADUMP flag and would make one big system
chunk to cover the entire file system in the super in order to get around the
unpleasant business of having to adjust the chunk tree. This meant that you
could use the progs stuff on a restored file system, which is great for testing
btrfsck and other such things. But we want to be able to run the tree log
replay on a file system that is not able to run the tree log replay. So in
order to do this we need to fixup the super's chunk array and the chunk tree
itself. This is pretty easy since we restore using the logical offsets of the
metadata, so we just have to set the chunk items to have 1 stripe and have the
stripes point at the primary device and then use the logical offset of the chunk
as the physical offset. With this patch I can restore a file system image that
had a tree log and mount the file system and have the log be replayed
successfully. This patch also gives you the -o option in case you want the old
restore way, in the case where we want to make sure the system chunks as they
were given to us are correct. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'utils.h')
-rw-r--r-- | utils.h | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -19,6 +19,7 @@ #ifndef __UTILS__ #define __UTILS__ +#include <sys/stat.h> #include "ctree.h" #define BTRFS_MKFS_SYSTEM_GROUP_SIZE (4 * 1024 * 1024) @@ -60,6 +61,7 @@ int is_block_device(const char *file); int get_btrfs_mount(const char *path, char *mp, size_t mp_size); int open_path_or_dev_mnt(const char *path); int is_swap_device(const char *file); +u64 btrfs_device_size(int fd, struct stat *st); /* Helper to always get proper size of the destination string */ #define strncpy_null(dest, src) __strncpy__null(dest, src, sizeof(dest)) |