Skip to contentSkip to conversation

new badblocks interface in e2fsprogs

RFC PATCH In review Valerie Clement 1 participant 1 message Jun 21, 2007

lore
Share & tools
lore
#0 lore raw

RFC PATCH 3/11 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
Index: e2fsprogs-1.39-tyt3-v7/lib/ext2fs/ext2fsP.h
===================================================================
@@ -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
Index: e2fsprogs-1.39-tyt3-v7/lib/ext2fs/ext2fs.h
===================================================================
@@ -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
 
@@ -521,10 +531,10 @@ extern errcode_t ext2fs_allocate_group_t
 extern 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);
@@ -536,7 +546,7 @@ extern errcode_t ext2fs_badblocks_list_a
 extern 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);
@@ -548,6 +558,8 @@ extern errcode_t ext2fs_badblocks_copy(e
 extern 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);
@@ -814,8 +826,6 @@ extern void ext2fs_free_generic_bitmap(e
 extern 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
Index: e2fsprogs-1.39-tyt3-v7/lib/ext2fs/freefs.c
===================================================================
@@ -108,25 +108,6 @@ static void ext2fs_free_inode_cache(stru
 	ext2fs_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