Skip to contentSkip to conversation

64-bit dblists

DISCUSSION Valerie Aurora Henson 2 participants 3 messages Oct 27, 2008 – Nov 12, 2008

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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 a blk64_t. A pointer to this structure is passed to the user-provided directory block iterator in ext2fs_dblist_iterate().

Quoted 5 lines

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.

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

#2 lore raw
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 a blk64_t. A pointer to this structure is passed to the user-provided directory block iterator in ext2fs_dblist_iterate().

Quoted 5 lines

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.

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.

Quoted 5 lines

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)

Thanks! This is what I'm doing currently.

-VAL