diff mbox

debugfs: open with EXT2_FLAG_64BITS

Message ID 4AAA6A44.90902@redhat.com
State Accepted, archived
Headers show

Commit Message

Eric Sandeen Sept. 11, 2009, 3:18 p.m. UTC
Pointing debugfs from the pu branch at a large filesystem is
still failing with:

 Filesystem too large to use legacy bitmaps while reading block bitmap

We need to open with EXT2_FLAG_64BITS; I'm not sure if this
should be a switch based on the size of the fs or not?

But in any case the below gets things moving enough to
use debugfs on a large filesystem.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---


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

Comments

Andreas Dilger Sept. 12, 2009, 8:29 p.m. UTC | #1
On Sep 11, 2009  10:18 -0500, Eric Sandeen wrote:
> Pointing debugfs from the pu branch at a large filesystem is
> still failing with:
>
> Filesystem too large to use legacy bitmaps while reading block bitmap
>
> We need to open with EXT2_FLAG_64BITS; I'm not sure if this
> should be a switch based on the size of the fs or not?

The one thing that is already VERY painful is the time it takes for
debugfs to read the bitmaps from disk at startup.  Running with
"-c" allows that step to be skipped, but tha means it isn't possible
to modify the filesystem at all.

The time for 8TB filesystems is already in the multi-minute range, so
I can't imagine how long it will take on huge filesystems.  The only
saving grace might be flex_bg avoiding seeks between every pair of
bitmaps.

Has any attention been given to the ext2fs_load_bitmaps() function for
flex_bg filesystems?  This would need to be tuned to read groups_per_flex
block bitmaps first, then groups_per_flex inode bitmaps before skipping
to the next flex group.  Otherwise we may still be reading each pair of
block+inode bitmaps at a time, and only by virtue of disk track caching
are we avoiding a seek between each one (which would eventually break
down once the groups_per_flex exceeds the track cache size).

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

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Sandeen Oct. 8, 2009, 8:17 p.m. UTC | #2
Eric Sandeen wrote:
> Pointing debugfs from the pu branch at a large filesystem is
> still failing with:
> 
>  Filesystem too large to use legacy bitmaps while reading block bitmap
> 
> We need to open with EXT2_FLAG_64BITS; I'm not sure if this
> should be a switch based on the size of the fs or not?
> 
> But in any case the below gets things moving enough to
> use debugfs on a large filesystem.

ping?

Thanks,
-Eric

> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
> 
> diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
> index 3bb309f..fbebae7 100644
> --- a/debugfs/debugfs.c
> +++ b/debugfs/debugfs.c
> @@ -127,7 +127,7 @@ void do_open_filesys(int argc, char **argv)
>  	int	catastrophic = 0;
>  	blk64_t	superblock = 0;
>  	blk64_t	blocksize = 0;
> -	int	open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
> +	int	open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS; 
>  	char	*data_filename = 0;
>  
>  	reset_getopt();
> @@ -2148,7 +2148,7 @@ int main(int argc, char **argv)
>  	int		sci_idx;
>  	const char	*usage = "Usage: %s [-b blocksize] [-s superblock] [-f cmd_file] [-R request] [-V] [[-w] [-c] device]";
>  	int		c;
> -	int		open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
> +	int		open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS;
>  	char		*request = 0;
>  	int		exit_status = 0;
>  	char		*cmd_file = 0;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Theodore Ts'o Oct. 26, 2009, 5:15 a.m. UTC | #3
On Thu, Oct 08, 2009 at 03:17:00PM -0500, Eric Sandeen wrote:
> Eric Sandeen wrote:
> > Pointing debugfs from the pu branch at a large filesystem is
> > still failing with:
> > 
> >  Filesystem too large to use legacy bitmaps while reading block bitmap
> > 
> > We need to open with EXT2_FLAG_64BITS; I'm not sure if this
> > should be a switch based on the size of the fs or not?
> > 
> > But in any case the below gets things moving enough to
> > use debugfs on a large filesystem.
> 
> ping?

I've added this patch to the pu branch.  I've also updated the pu
branch so it's up to date with the latest maint branch.  I also found
some missing conversions of ext2fs_group_{first,last}_block() to
ext2fs_group_{first,last}_block2().  

I also cleaned up a number of patches which I'm confident enough are
clean enough that I've fast forwarded the next branch to include them.

There are now only 16 patches left that are unique to the pu branch,
down from 57 patches initially (and many of the patches are smaller as
they were refactored).

						- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
index 3bb309f..fbebae7 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
@@ -127,7 +127,7 @@  void do_open_filesys(int argc, char **argv)
 	int	catastrophic = 0;
 	blk64_t	superblock = 0;
 	blk64_t	blocksize = 0;
-	int	open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
+	int	open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS; 
 	char	*data_filename = 0;
 
 	reset_getopt();
@@ -2148,7 +2148,7 @@  int main(int argc, char **argv)
 	int		sci_idx;
 	const char	*usage = "Usage: %s [-b blocksize] [-s superblock] [-f cmd_file] [-R request] [-V] [[-w] [-c] device]";
 	int		c;
-	int		open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
+	int		open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS;
 	char		*request = 0;
 	int		exit_status = 0;
 	char		*cmd_file = 0;