btrfs-progs: btrfs-convert: Add larger device support
PATCH v4 1/1 btrfs-progs: btrfs-convert: Add larger device support
With larger file system (in this case its 22TB), ext2fs_open() returns EXT2_ET_CANT_USE_LEGACY_BITMAPS error message with ext2fs_read_block_bitmap().
To overcome this issue, (a) we need pass EXT2_FLAG_64BITS flag with ext2fs_open.
(b) use 64-bit functions like ext2fs_get_block_bitmap_range2, ext2fs_inode_data_blocks2,ext2fs_read_ext_attr2. (c) use 64bit types with btrfs_convert_context fields.
--- convert/common.h | 8 ++++---- convert/source-ext2.c | 11 ++++++----- 2 files changed, 10 insertions(+), 9 deletions(-)
convert/common.h +4 -4
@@ -30,10 +30,10 @@ struct btrfs_mkfs_config;struct btrfs_convert_context {u32 blocksize; -u32 first_data_block; -u32 block_count; -u32 inodes_count; -u32 free_inodes_count; +u64 first_data_block; +u64 block_count; +u64 inodes_count; +u64 free_inodes_count;u64 total_bytes;char *volume_name;const struct btrfs_convert_operations *convert_ops;
convert/source-ext2.c +6 -5
@@ -34,8 +34,9 @@ static int ext2_open_fs(struct btrfs_convert_context *cctx, const char *name)ext2_filsys ext2_fs;ext2_ino_t ino;u32 ro_feature; +int open_flag =EXT2_FLAG_SOFTSUPP_FEATURES |EXT2_FLAG_64BITS ; - ret =ext2fs_open (name,0 ,0 ,0 , unix_io_manager, &ext2_fs); + ret =ext2fs_open (name, open_flag,0 ,0 , unix_io_manager, &ext2_fs);if (ret) {fprintf (stderr,"ext2fs_open: %s\n" ,error_message (ret));return -1 ;
@@ -148,7 +149,7 @@ static int ext2_read_used_space(struct btrfs_convert_context *cctx)return -ENOMEM ;for (i =0 ; i < fs->group_desc_count; i++) { - ret =ext2fs_get_block_bitmap_range (fs->block_map, blk_itr, + ret =ext2fs_get_block_bitmap_range2 (fs->block_map, blk_itr, block_nbytes *8 , block_bitmap);if (ret) { error("fail to get bitmap from ext2, %s",
@@ -353,7 +354,7 @@ static int ext2_create_symlink(struct btrfs_trans_handle *trans,int ret;char *pathname;u64 inode_size =btrfs_stack_inode_size (btrfs_inode); -if (ext2fs_inode_data_blocks (ext2_fs, ext2_inode)) { +if (ext2fs_inode_data_blocks2 (ext2_fs, ext2_inode)) {btrfs_set_stack_inode_size (btrfs_inode, inode_size +1 ); ret = ext2_create_file_extents(trans, root, objectid, btrfs_inode, ext2_fs, ext2_ino,
@@ -627,9 +628,9 @@ static int ext2_copy_extended_attrs(struct btrfs_trans_handle *trans, ret = -ENOMEM ; goto out; } - err =ext2fs_read_ext_attr (ext2_fs, ext2_inode->i_file_acl, buffer); + err =ext2fs_read_ext_attr2 (ext2_fs, ext2_inode->i_file_acl, buffer);if (err) { -fprintf (stderr,"ext2fs_read_ext_attr: %s\n" , +fprintf (stderr,"ext2fs_read_ext_attr2: %s\n" ,error_message (err)); ret =-1 ; goto out;
Signature · 1 line
2.7.4
David Sterba
AppliedQuoted 10 lines · Lakshmipathi.G
With larger file system (in this case its 22TB),
ext2fs_open()returnsEXT2_ET_CANT_USE_LEGACY_BITMAPSerror message withext2fs_read_block_bitmap().To overcome this issue, (a) we need pass
EXT2_FLAG_64BITSflag withext2fs_open.
(b) use 64-bit functions likeext2fs_get_block_bitmap_range2, ext2fs_inode_data_blocks2,ext2fs_read_ext_attr2. (c) use 64bit types withbtrfs_convert_contextfields.
Applied, thanks.
Quoted 4 lines
convert/common.h +0
-0@@ -30,10 +30,10 @@ struct btrfs_mkfs_config;
convert/common.h struct btrfs_mkfs_config; · line 36
Quoted 10 lines
convert/common.h +4
-4struct btrfs_convert_context {u32 blocksize; -u32 first_data_block; -u32 block_count; -u32 inodes_count; -u32 free_inodes_count; +u64 first_data_block; +u64 block_count; +u64 inodes_count; +u64 free_inodes_count;
I've split this change from the patch as it does not logically belong to the same patch, altough the change is simple.
Quoted 8 lines
convert/common.h struct btrfs_mkfs_config; · line 36
Quoted 5 lines
convert/common.h +4
-1-u32 free_inodes_count; +u64 first_data_block; +u64 block_count; +u64 inodes_count; +u64 free_inodes_count;I've split this change from the patch as it does not logically belong to the same patch, altough the change is simple.
Okay sure, thanks.
Cheers.
Lakshmipathi.G