64-bit dblists
Hi all,
In my continuing quest to finish the 64-bit conversion of e2fsprogs, I ran into this structure exported in ext2fs.h:
struct ext2_db_entry {
ext2_ino_t ino;
blk_t blk;
int blockcnt;
};The "blk_t" is the problem here - we need a blk64_t. A pointer to this structure is passed to the user-provided directory block iterator in ext2fs_dblist_iterate().
Assuming the goal is to preserve the ext2fs_dblist ABI, I can see two ways of doing this:
1. Define ext2_db_entry2, ext2_dblist2, and ext2fs_dblist_*2() and do the usual translation/conversion function business.
2. Use the magic number in the dblist to differentiate between old and new-style dblists and keep the existing interfaces for functions that only pass around pointers. We'll also need ext2fs_dblist_iterate2() and ext2fs_get_last2().
I find option #1 slightly less unpalatable than #2. Does anyone have an option #3?
-VAL
Quoted 15 lines · Valerie Aurora Henson
Hi all,
In my continuing quest to finish the 64-bit conversion of e2fsprogs, I ran into this structure exported in
ext2fs.h:struct ext2_db_entry { ext2_ino_t ino; blk_t blk; int blockcnt; };The "
blk_t" is the problem here - we need ablk64_t. A pointer to this structure is passed to the user-provided directory block iterator inext2fs_dblist_iterate().
Quoted 5 lines
Assuming the goal is to preserve the
ext2fs_dblistABI, I can see two ways of doing this:1. Define
ext2_db_entry2,ext2_dblist2, and ext2fs_dblist_*2() and do the usual translation/conversion function business.
The dblist.c and dblist_dir.c functions are so small that it's probably not worth it to do translaction/conversation functions; it's basically just a linked list convenience function implementation.
My suggestion is to just create a dblist2.c and dblist_dir2.c, and just make a 64-bit version of the directory block list abstraction. My guess that size of the conversaion functions would be bigger than a new 64-bit version of the abstraction. (The object size of dblist.o and dblist_dir.o combined is only about 1.5k)
- Ted
Quoted 26 lines · Theodore Tso
Quoted 15 lines · Valerie Aurora Henson
Hi all,
In my continuing quest to finish the 64-bit conversion of e2fsprogs, I ran into this structure exported in
ext2fs.h:struct ext2_db_entry { ext2_ino_t ino; blk_t blk; int blockcnt; };The "
blk_t" is the problem here - we need ablk64_t. A pointer to this structure is passed to the user-provided directory block iterator inext2fs_dblist_iterate().Quoted 5 lines
Assuming the goal is to preserve the
ext2fs_dblistABI, I can see two ways of doing this:1. Define
ext2_db_entry2,ext2_dblist2, and ext2fs_dblist_*2() and do the usual translation/conversion function business.The
dblist.canddblist_dir.cfunctions are so small that it's probably not worth it to do translaction/conversation functions; it's basically just a linked list convenience function implementation.
Quoted 5 lines
My suggestion is to just create a
dblist2.canddblist_dir2.c, and just make a 64-bit version of the directory block list abstraction. My guess that size of the conversaion functions would be bigger than a new 64-bit version of the abstraction. (The object size of dblist.o and dblist_dir.o combined is only about 1.5k)
Thanks! This is what I'm doing currently.
-VAL