path: root/utils.h
diff options
authorJosef Bacik <>2013-03-27 16:55:41 -0400
committerDavid Sterba <>2013-04-09 18:43:24 +0200
commitd6f7e3da0dae7b60cb7565f8a47c3b9045c52d1d (patch)
treef4141f44583268939fe84386bb2fb75cc49ae54c /utils.h
parent28810549562d051f0f002590cb6c98b004a09927 (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 <>
Diffstat (limited to 'utils.h')
1 files changed, 2 insertions, 0 deletions
diff --git a/utils.h b/utils.h
index 885b9c54..4dcdc31a 100644
--- a/utils.h
+++ b/utils.h
@@ -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))