summaryrefslogtreecommitdiff
path: root/ctree.h
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2017-02-23 16:21:14 +0800
committerDavid Sterba <dsterba@suse.com>2017-03-16 17:02:44 +0100
commit6d881033e1651a59970fa52d365b3268decab1d1 (patch)
treeadbada6c898620c0d6867549a69c58320dea61ac /ctree.h
parent1170ac3079005a99098e48777513e5ab09b64d55 (diff)
btrfs-progs: convert: Rework rollback
Rework rollback to a more easy to understand way. New convert behavior makes us to have a more flex chunk layout, which only data chunk containing old fs data will be at the same physical location, while new chunks (data/meta/sys) can be mapped anywhere else. This behavior makes old rollback behavior can't handle it. As old behavior assumes all data/meta is mapped in a large chunk, which is mapped 1:1 on disk. So rework rollback to handle new convert behavior, enhance the check by only checking all file extents of convert image, only to check if these file extents and therir chunks are mapped 1:1. This new rollback check behavior can handle both new and old convert behavior, as the new behavior is a superset of old behavior. Further more, introduce a simple rollback mechanisim: 1) Read reserved data (offset = file offset) from convert image 2) Write reserved data into disk (offset = physical offset) Since old fs image is a valid fs, and we only need to rollback superblocks (btrfs reserved ranges), then we just read out data in reserved range, and write it back. Due to the fact that all other file extents of converted image is mapped 1:1 on disk, we put the missing piece back, then the fs is as good as old one. Then what we do in btrfs is just another dream. With this new rollback mechanisim, we can open btrfs read-only, so we won't cause any damage to current btrfs, until the final piece (0~1M, containing 1st super block) is put back. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> [ port to v4.10 ] Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'ctree.h')
-rw-r--r--ctree.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/ctree.h b/ctree.h
index f89ffeb7..91d55557 100644
--- a/ctree.h
+++ b/ctree.h
@@ -2776,7 +2776,7 @@ int btrfs_get_extent(struct btrfs_trans_handle *trans,
int btrfs_punch_hole(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
u64 ino, u64 offset, u64 len);
-int btrfs_read_file(struct btrfs_root *root, u64 ino, u64 start, u64 len,
+int btrfs_read_file(struct btrfs_root *root, u64 ino, u64 start, int len,
char *dest);
#endif