2009-02-03 19:56:49

by Valerie Aurora

[permalink] [raw]
Subject: Using libext2fs in libe2p?

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

diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c
index 6d2ce70..1923793 100644
--- a/lib/e2p/ls.c
+++ b/lib/e2p/ls.c
@@ -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));



2009-02-03 20:31:44

by Andreas Dilger

[permalink] [raw]
Subject: Re: Using libext2fs in libe2p?

On Feb 03, 2009 14:56 -0500, Valerie Aurora Henson wrote:
> 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.

> diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c
> index 6d2ce70..1923793 100644
> --- a/lib/e2p/ls.c
> +++ b/lib/e2p/ls.c
> @@ -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));
>
> --
> 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.


2009-02-03 21:06:15

by Theodore Ts'o

[permalink] [raw]
Subject: Re: Using libext2fs in libe2p?

On Tue, Feb 03, 2009 at 02:56:45PM -0500, Valerie Aurora Henson wrote:
> 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

> 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