btrfs-image: fix reading the super block on big metadata blocks

btrfs-image is assuming that every metadata block is the same size.  The
super is a special snowflake though.  It's 4K even on 64K filesystems.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
Chris Mason 2013-05-03 16:18:46 -04:00
parent 617efb6bb8
commit 9c82132740

View file

@ -506,7 +506,8 @@ static int flush_pending(struct metadump_struct *md, int done)
}
while (!md->data && size > 0) {
eb = read_tree_block(md->root, start, blocksize, 0);
u64 this_read = min(blocksize, size);
eb = read_tree_block(md->root, start, this_read, 0);
if (!eb) {
free(async->buffer);
free(async);
@ -516,9 +517,9 @@ static int flush_pending(struct metadump_struct *md, int done)
}
copy_buffer(async->buffer + offset, eb);
free_extent_buffer(eb);
start += blocksize;
offset += blocksize;
size -= blocksize;
start += this_read;
offset += this_read;
size -= this_read;
}
md->pending_start = (u64)-1;