diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2017-02-23 15:17:16 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-03-16 17:02:44 +0100 |
commit | b82b12265b976bdb044a752bfd27b2494edfffbd (patch) | |
tree | 6e7853d60187184332adcb2d7f8e79b347acb76e /convert | |
parent | 5613d32e75fe6f55e1c41f86389624b46a9ef5a7 (diff) |
btrfs-progs: convert: Introduce function to read out btrfs reserved range
Introduce a new function, read_reserved_ranges(), to allow later
rollback to use these data to do rollback.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Diffstat (limited to 'convert')
-rw-r--r-- | convert/main.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/convert/main.c b/convert/main.c index 8fcfd36b..69279506 100644 --- a/convert/main.c +++ b/convert/main.c @@ -1513,6 +1513,36 @@ fail: return -1; } +/* + * Read out data of convert image which is in btrfs reserved ranges so we can + * use them to overwrite the ranges during rollback. + */ +static int read_reserved_ranges(struct btrfs_root *root, u64 ino, + u64 total_bytes, char *reserved_ranges[]) +{ + int i; + int ret = 0; + + for (i = 0; i < ARRAY_SIZE(btrfs_reserved_ranges); i++) { + struct simple_range *range = &btrfs_reserved_ranges[i]; + + if (range->start + range->len >= total_bytes) + break; + ret = btrfs_read_file(root, ino, range->start, range->len, + reserved_ranges[i]); + if (ret < range->len) { + error( + "failed to read data of convert image, offset=%llu len=%llu ret=%d", + range->start, range->len, ret); + if (ret >= 0) + ret = -EIO; + break; + } + ret = 0; + } + return ret; +} + static int do_rollback(const char *devname) { int fd = -1; |