From 9e89a1cd4263eab3b4f9d48068084060f1e1ae96 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Tue, 23 Aug 2016 17:50:16 +0200 Subject: btrfs-progs: convert: move migrate_super_block Signed-off-by: David Sterba --- btrfs-convert.c | 110 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/btrfs-convert.c b/btrfs-convert.c index 2e34380d..820f5b2a 100644 --- a/btrfs-convert.c +++ b/btrfs-convert.c @@ -1307,6 +1307,61 @@ err: return ret; } +/* + * Migrate super block to its default position and zero 0 ~ 16k + */ +static int migrate_super_block(int fd, u64 old_bytenr, u32 sectorsize) +{ + int ret; + struct extent_buffer *buf; + struct btrfs_super_block *super; + u32 len; + u32 bytenr; + + BUG_ON(sectorsize < sizeof(*super)); + buf = malloc(sizeof(*buf) + sectorsize); + if (!buf) + return -ENOMEM; + + buf->len = sectorsize; + ret = pread(fd, buf->data, sectorsize, old_bytenr); + if (ret != sectorsize) + goto fail; + + super = (struct btrfs_super_block *)buf->data; + BUG_ON(btrfs_super_bytenr(super) != old_bytenr); + btrfs_set_super_bytenr(super, BTRFS_SUPER_INFO_OFFSET); + + csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); + ret = pwrite(fd, buf->data, sectorsize, BTRFS_SUPER_INFO_OFFSET); + if (ret != sectorsize) + goto fail; + + ret = fsync(fd); + if (ret) + goto fail; + + memset(buf->data, 0, sectorsize); + for (bytenr = 0; bytenr < BTRFS_SUPER_INFO_OFFSET; ) { + len = BTRFS_SUPER_INFO_OFFSET - bytenr; + if (len > sectorsize) + len = sectorsize; + ret = pwrite(fd, buf->data, len, bytenr); + if (ret != len) { + fprintf(stderr, "unable to zero fill device\n"); + break; + } + bytenr += len; + } + ret = 0; + fsync(fd); +fail: + free(buf); + if (ret > 0) + ret = -1; + return ret; +} + /* * Open Ext2fs in readonly mode, read block allocation bitmap and * inode bitmap into memory. @@ -2156,61 +2211,6 @@ static int ext2_copy_inodes(struct btrfs_convert_context *cctx, return ret; } -/* - * Migrate super block to its default position and zero 0 ~ 16k - */ -static int migrate_super_block(int fd, u64 old_bytenr, u32 sectorsize) -{ - int ret; - struct extent_buffer *buf; - struct btrfs_super_block *super; - u32 len; - u32 bytenr; - - BUG_ON(sectorsize < sizeof(*super)); - buf = malloc(sizeof(*buf) + sectorsize); - if (!buf) - return -ENOMEM; - - buf->len = sectorsize; - ret = pread(fd, buf->data, sectorsize, old_bytenr); - if (ret != sectorsize) - goto fail; - - super = (struct btrfs_super_block *)buf->data; - BUG_ON(btrfs_super_bytenr(super) != old_bytenr); - btrfs_set_super_bytenr(super, BTRFS_SUPER_INFO_OFFSET); - - csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, sectorsize, BTRFS_SUPER_INFO_OFFSET); - if (ret != sectorsize) - goto fail; - - ret = fsync(fd); - if (ret) - goto fail; - - memset(buf->data, 0, sectorsize); - for (bytenr = 0; bytenr < BTRFS_SUPER_INFO_OFFSET; ) { - len = BTRFS_SUPER_INFO_OFFSET - bytenr; - if (len > sectorsize) - len = sectorsize; - ret = pwrite(fd, buf->data, len, bytenr); - if (ret != len) { - fprintf(stderr, "unable to zero fill device\n"); - break; - } - bytenr += len; - } - ret = 0; - fsync(fd); -fail: - free(buf); - if (ret > 0) - ret = -1; - return ret; -} - static int prepare_system_chunk_sb(struct btrfs_super_block *super) { struct btrfs_chunk *chunk; -- cgit v1.2.3