Skip to contentSkip to conversation

Using libext2fs in libe2p?

PATCH Valerie Aurora Henson 3 participants 3 messages Feb 3, 2009

lore
Share & tools
lore
#0 lore raw

Nick Dokos noticed that libe2p now depends on libext2fs in the 64-bit tree, since we use ext2fs_blocks_count() and friends (see diff below).

Possible solutions:

Link libext2fs with libe2p
Open code 64-bit block counts
Require users of libe2p to link with libext2fs
Move ext2fs_blocks_count() and friends into a header file and inline them

I am agnostic.

-VAL

lib/e2p/ls.c +4 -3
index 6d2ce70..1923793 100644
@@ -20,6 +20,7 @@
 #include <time.h>
 
 #include "e2p.h"
+#include "ext2fs/ext2fs.h"
 
 static void print_user (unsigned short uid, FILE *f)
 {
@@ -219,9 +220,9 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        fprintf(f, "Filesystem OS type:       %s\n", str);
        free(str);
        fprintf(f, "Inode count:              %u\n", sb->s_inodes_count);
-       fprintf(f, "Block count:              %u\n", sb->s_blocks_count);
-       fprintf(f, "Reserved block count:     %u\n", sb->s_r_blocks_count);
-       fprintf(f, "Free blocks:              %u\n", sb->s_free_blocks_count);
+       fprintf(f, "Block count:              %llu\n", ext2fs_blocks_count(sb));
+       fprintf(f, "Reserved block count:     %llu\n", ext2fs_r_blocks_count(sb));
+       fprintf(f, "Free blocks:              %llu\n", ext2fs_free_blocks_count(sb));
        fprintf(f, "Free inodes:              %u\n", sb->s_free_inodes_count);
        fprintf(f, "First block:              %u\n", sb->s_first_data_block);
        fprintf(f, "Block size:               %u\n", EXT2_BLOCK_SIZE(sb));
#1 lore raw
Quoted 6 lines · Valerie Aurora Henson

Possible solutions:

Link libext2fs with libe2p
Open code 64-bit block counts
Require users of libe2p to link with libext2fs
Move ext2fs_blocks_count() and friends into a header file and inline them

I would probably do the latter. The functions are small enough that inlining them is likely equivalent in terms of instructions compared to jumping to a new function.

Quoted 27 lines
lib/e2p/ls.c +4 -4
index 6d2ce70..1923793 100644
@@ -20,6 +20,7 @@
 #include <time.h>
 
 #include "e2p.h"
+#include "ext2fs/ext2fs.h"
 
 static void print_user (unsigned short uid, FILE *f)
 {
@@ -219,9 +220,9 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        fprintf(f, "Filesystem OS type:       %s\n", str);
        free(str);
        fprintf(f, "Inode count:              %u\n", sb->s_inodes_count);
-       fprintf(f, "Block count:              %u\n", sb->s_blocks_count);
-       fprintf(f, "Reserved block count:     %u\n", sb->s_r_blocks_count);
-       fprintf(f, "Free blocks:              %u\n", sb->s_free_blocks_count);
+       fprintf(f, "Block count:              %llu\n", ext2fs_blocks_count(sb));
+       fprintf(f, "Reserved block count:     %llu\n", ext2fs_r_blocks_count(sb));
+       fprintf(f, "Free blocks:              %llu\n", ext2fs_free_blocks_count(sb));
        fprintf(f, "Free inodes:              %u\n", sb->s_free_inodes_count);
        fprintf(f, "First block:              %u\n", sb->s_first_data_block);
        fprintf(f, "Block size:               %u\n", EXT2_BLOCK_SIZE(sb));
 
--
Quoted 3 lines

To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.

#2 lore raw
In reply to Valerie Aurora Henson
Quoted 2 lines · Valerie Aurora Henson

Nick Dokos noticed that libe2p now depends on libext2fs in the 64-bit tree, since we use ext2fs_blocks_count() and friends (see diff below).

Fixed already in my rebased version of your patches:

    http://github.com/tytso/e2fsprogs-64bit/tree/master
    git://github.com/tytso/e2fsprogs-64bit.git
Quoted 6 lines

Possible solutions:

Link libext2fs with libe2p
Open code 64-bit block counts
Require users of libe2p to link with libext2fs
Move ext2fs_blocks_count() and friends into a header file and inline them

I chose door #2. Actually, I created new static functions in lib/e2p/ls.c, named e2p_*_blocks_count(). It's in the patch:
Add-e2p-64bit-blocks-support.

Note: my patchset (which is against e2fsprogs 1.41.4 at the moment) still has regression test failures, and I have done *zero* testing on 64-bit filesystems. Hopefully Val can help me with that; the updated, rebase patchset is the first step towards getting these commits merged into e2fsprogs mainline.

- Ted