new badblocks interface in e2fsprogs
RFC PATCH 3/12 new badblocks interface in e2fsprogs
This patch introduces new badblocks list functions for ext4 filesystems which use the new type blk64_t.
badblocks.c | 471 +++++++++++++++++++++++++++++++++++++++++++++++++----------- ext2fs.h | 28 ++- ext2fsP.h | 13 + freefs.c | 19 -- 4 files changed, 423 insertions(+), 108 deletions(-)
lib/ext2fs/ext2fsP.h +13 -0
@@ -28,6 +28,19 @@ struct ext2_struct_u32_iterate {int ptr; }; +struct ext2_struct_blk64_list { +int magic; +int num; +int size; +int badblocks_flags; +blk64_t *list; +}; + +struct ext2_struct_blk64_iterate { +int magic; +ext2_badblocks_list bb; +int ptr; +};/* * Directory block iterator definition
lib/ext2fs/ext2fs.h +19 -9
@@ -127,15 +127,25 @@ typedef struct ext2fs_struct_generic_bit* Badblocks list definitions */ -typedef struct ext2_struct_u32_list *ext2_badblocks_list ; -typedef struct ext2_struct_u32_iterate *ext2_badblocks_iterate ; -typedef struct ext2_struct_u32_list *ext2_u32_list ;typedef struct ext2_struct_u32_iterate *ext2_u32_iterate ; -/* old */ +#ifdef _EXT4FS_ +typedef struct ext2_struct_blk64_list *ext2_blk64_list ; +typedef struct ext2_struct_blk64_iterate *ext2_blk64_iterate ; + +typedef struct ext2_struct_blk64_list *ext2_badblocks_list ; +typedef struct ext2_struct_blk64_iterate *ext2_badblocks_iterate ; + +typedef struct ext2_struct_blk64_list *badblocks_list ; +typedef struct ext2_struct_blk64_iterate *badblocks_iterate ; +#else +typedef struct ext2_struct_u32_list *ext2_badblocks_list ; +typedef struct ext2_struct_u32_iterate *ext2_badblocks_iterate ; +typedef struct ext2_struct_u32_list *badblocks_list ;typedef struct ext2_struct_u32_iterate *badblocks_iterate ; +#endif #define BADBLOCKS_FLAG_DIRTY 1
@@ -525,10 +535,10 @@ extern errcode_t ext2fs_allocate_group_textern errcode_t ext2fs_u32_list_create (ext2_u32_list *ret,int size);extern errcode_t ext2fs_u32_list_add (ext2_u32_list bb,__u32 blk);extern int ext2fs_u32_list_find (ext2_u32_list bb,__u32 blk); -extern int ext2fs_u32_list_test (ext2_u32_list bb,blk_t blk); +extern int ext2fs_u32_list_test (ext2_u32_list bb,__u32 blk);extern errcode_t ext2fs_u32_list_iterate_begin (ext2_u32_list bb,ext2_u32_iterate *ret); -extern int ext2fs_u32_list_iterate (ext2_u32_iterate iter,blk_t *blk); +extern int ext2fs_u32_list_iterate (ext2_u32_iterate iter,__u32 *blk);extern void ext2fs_u32_list_iterate_end (ext2_u32_iterate iter);extern errcode_t ext2fs_u32_copy (ext2_u32_list src,ext2_u32_list *dest);extern int ext2fs_u32_list_equal (ext2_u32_list bb1,ext2_u32_list bb2);
@@ -540,7 +550,7 @@ extern errcode_t ext2fs_badblocks_list_aextern int ext2fs_badblocks_list_test (ext2_badblocks_list bb,blk_t blk);extern int ext2fs_u32_list_del (ext2_u32_list bb,__u32 blk); -extern void ext2fs_badblocks_list_del (ext2_u32_list bb,__u32 blk); +extern void ext2fs_badblocks_list_del (ext2_badblocks_list bb,blk_t blk);extern errcode_t ext2fs_badblocks_list_iterate_begin (ext2_badblocks_list bb,ext2_badblocks_iterate *ret);
@@ -552,6 +562,8 @@ extern errcode_t ext2fs_badblocks_copy(eextern int ext2fs_badblocks_equal (ext2_badblocks_list bb1,ext2_badblocks_list bb2);extern int ext2fs_u32_list_count (ext2_u32_list bb); +extern void ext2fs_badblocks_list_free (ext2_badblocks_list bb); +extern void ext2fs_u32_list_free (ext2_u32_list bb);/* bb_compat */ extern errcode_t badblocks_list_create (badblocks_list *ret,int size);
@@ -818,8 +830,6 @@ extern void ext2fs_free_generic_bitmap(eextern void ext2fs_free_block_bitmap (ext2fs_block_bitmap bitmap);extern void ext2fs_free_inode_bitmap (ext2fs_inode_bitmap bitmap);extern void ext2fs_free_dblist (ext2_dblist dblist); -extern void ext2fs_badblocks_list_free (ext2_badblocks_list bb); -extern void ext2fs_u32_list_free (ext2_u32_list bb);/* getsize.c */ extern errcode_t ext2fs_get_device_size(const char *file, int blocksize,
lib/ext2fs/badblocks.c +391 -80
556 lines not on this page · raw message
lib/ext2fs/freefs.c +0 -19
@@ -108,25 +108,6 @@ static void ext2fs_free_inode_cache(struext2fs_free_mem (&icache); } -/* -* This procedure frees a badblocks list. -*/ -void ext2fs_u32_list_free (ext2_u32_list bb) -{ -if (bb->magic !=EXT2_ET_MAGIC_BADBLOCKS_LIST ) -return ; - -if (bb->list) -ext2fs_free_mem (&bb->list); - bb->list =0 ; -ext2fs_free_mem (&bb); -} - -void ext2fs_badblocks_list_free (ext2_badblocks_list bb) -{ -ext2fs_u32_list_free ((ext2_u32_list ) bb); -} -/* * Free a directory block list