new bitmaps interface in e2fsprogs
RFC PATCH 5/12 new bitmaps interface in e2fsprogs
This patch introduces new bitmap interface for ext4 filesystems which uses the new type blk64_t.
bitmaps.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- bitops.c | 36 ++++++++++++++ bitops.h | 29 +++++++++++ ext2fs.h | 25 ++++++++++ 4 files changed, 229 insertions(+), 13 deletions(-)
lib/ext2fs/ext2fs.h +25 -0
@@ -112,13 +112,30 @@ struct ext2fs_struct_generic_bitmap {__u32 reserved[7 ]; }; +struct ext4fs_struct_generic_bitmap { +errcode_t magic; +ext2_filsys fs; +blk64_t start, end; +blk64_t real_end; +char * description; +char * bitmap; +errcode_t base_error_code; +__u32 reserved[7 ]; +}; +#define EXT2FS_MARK_ERROR 0#define EXT2FS_UNMARK_ERROR 1#define EXT2FS_TEST_ERROR 2 +#ifdef _EXT4FS_ +typedef struct ext4fs_struct_generic_bitmap *ext2fs_generic_bitmap ; +typedef struct ext4fs_struct_generic_bitmap *ext2fs_inode_bitmap ; +typedef struct ext4fs_struct_generic_bitmap *ext2fs_block_bitmap ; +#else typedef struct ext2fs_struct_generic_bitmap *ext2fs_generic_bitmap ;typedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap ;typedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap ; +#endif #define EXT2_FIRST_INODE (s) EXT2_FIRST_INO(s)
@@ -584,11 +601,19 @@ extern errcode_t ext2fs_write_inode_bitmextern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs);extern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs);extern errcode_t ext2fs_read_block_bitmap (ext2_filsys fs); +#ifndef _EXT4FS_extern errcode_t ext2fs_allocate_generic_bitmap (__u32 start,__u32 end,__u32 real_end,const char *descr,ext2fs_generic_bitmap *ret); +#else +extern errcode_t ext2fs_allocate_generic_bitmap (blk64_t start, +blk64_t end, +blk64_t real_end, +const char *descr, +ext2fs_generic_bitmap *ret); +#endif extern errcode_t ext2fs_allocate_block_bitmap (ext2_filsys fs,const char *descr,ext2fs_block_bitmap *ret);
lib/ext2fs/bitmaps.c +140 -12
192 lines not on this page · raw message
lib/ext2fs/bitops.c +36 -0
@@ -30,6 +30,7 @@* systems, as well as non-32 bit systems. */ +#ifndef _EXT4FS_int ext2fs_set_bit (unsigned int nr,void * addr) {int mask, retval;
@@ -63,6 +64,41 @@ int ext2fs_test_bit(unsigned int nr, con mask =1 << (nr &0x07 );return (mask & *ADDR ); } +#else +int ext2fs_set_bit (blk64_t nr,void * addr) +{ +int mask, retval; +unsigned char *ADDR = (unsigned char *) addr; + +ADDR += nr >>3 ; + mask =1 << (nr &0x07 ); + retval = mask & *ADDR ; + *ADDR |= mask; +return retval; +} + +int ext2fs_clear_bit (blk64_t nr,void * addr) +{ +int mask, retval; +unsigned char *ADDR = (unsigned char *) addr; + +ADDR += nr >>3 ; + mask =1 << (nr &0x07 ); + retval = mask & *ADDR ; + *ADDR &= ~mask; +return retval; +} + +int ext2fs_test_bit (blk64_t nr,const void * addr) +{ +int mask; +const unsigned char *ADDR = (const unsigned char *) addr; + +ADDR += nr >>3 ; + mask =1 << (nr &0x07 ); +return (mask & *ADDR ); +} +#endif #endif /* !_EXT2_HAVE_ASM_BITOPS_ */
lib/ext2fs/bitops.h +28 -1
@@ -14,11 +14,19 @@*/ +#ifndef _EXT4FS_extern int ext2fs_set_bit (unsigned int nr,void * addr);extern int ext2fs_clear_bit (unsigned int nr,void * addr);extern int ext2fs_test_bit (unsigned int nr,const void * addr);extern void ext2fs_fast_set_bit (unsigned int nr,void * addr);extern void ext2fs_fast_clear_bit (unsigned int nr,void * addr); +#else +extern int ext2fs_set_bit (blk64_t nr,void * addr); +extern int ext2fs_clear_bit (blk64_t nr,void * addr); +extern int ext2fs_test_bit (blk64_t nr,const void * addr); +extern void ext2fs_fast_set_bit (blk64_t nr,void * addr); +extern void ext2fs_fast_clear_bit (blk64_t nr,void * addr); +#endif extern __u16 ext2fs_swab16 (__u16 val);extern __u32 ext2fs_swab32 (__u32 val);extern __u64 ext2fs_swab64 (__u64 val);
@@ -141,6 +149,7 @@ extern int ext2fs_unmark_generic_bitmap(* previous bit value. */ +#ifndef _EXT4FS_ _INLINE_ void ext2fs_fast_set_bit(unsigned int nr,void * addr) {unsigned char *ADDR = (unsigned char *) addr;
@@ -156,10 +165,28 @@ _INLINE_ void ext2fs_fast_clear_bit(unsiADDR += nr >>3 ; *ADDR &= ~(1 << (nr &0x07 )); } +#else +_INLINE_ void ext2fs_fast_set_bit(blk64_t nr,void * addr) +{ +unsigned char *ADDR = (unsigned char *) addr; + +ADDR += nr >>3 ; + *ADDR |= (1 << (nr &0x07 )); +} + +_INLINE_ void ext2fs_fast_clear_bit(blk64_t nr, void * addr) +{ +unsigned char *ADDR = (unsigned char *) addr; + +ADDR += nr >>3 ; + *ADDR &= ~(1 << (nr &0x07 )); +} +#endif #if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \ - (defined(__i386__) || defined(__i486__) || defined(__i586__))) + (defined(__i386__) || defined(__i486__) || defined(__i586__)) && \ + !(defined(_EXT2_64BIT_BLK_T) && (SIZEOF_LONG ==4 )))#define _EXT2_HAVE_ASM_BITOPS_#define _EXT2_HAVE_ASM_SWAB_