diff mbox series

[1/2] e2fsck: allow to check >2GB sized directory

Message ID 20181213213156.44773-1-artem.blagodarenko@gmail.com
State Superseded
Headers show
Series [1/2] e2fsck: allow to check >2GB sized directory | expand

Commit Message

Artem Blagodarenko Dec. 13, 2018, 9:31 p.m. UTC
After large_dir feature has been added, e2fsprogs is
ready for directories > 2GB, so we can remove e2fsck
directory size check.

Signed-off-by: Artem Blagodarenko <artem.blagodarenko@gmail.com>
---
 e2fsck/pass1.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Theodore Ts'o Dec. 14, 2018, 3:10 a.m. UTC | #1
On Fri, Dec 14, 2018 at 12:31:55AM +0300, Artem Blagodarenko wrote:
> After large_dir feature has been added, e2fsprogs is
> ready for directories > 2GB, so we can remove e2fsck
> directory size check.
> 
>  
> -	if (p->is_dir && blockcnt > (1 << (21 - fs->super->s_log_block_size)))
> +	if (p->is_dir && !ext2fs_has_feature_largedir(fs->super) &&
> +	    blockcnt > (1 << (21 - fs->super->s_log_block_size)))
>  		problem = PR_1_TOOBIG_DIR;
> -	if (p->is_reg && p->num_blocks+1 >= p->max_blocks)
> +	if ((p->is_reg || p->is_dir) && p->num_blocks + 1 >= p->max_blocks)
>  		problem = PR_1_TOOBIG_REG;
>  	if (!p->is_dir && !p->is_reg && blockcnt > 0)
>  		problem = PR_1_TOOBIG_SYMLINK;

In the largedir case, if the directory is too big, it will return
PR_1_TOOBIG_REG; it should still return PR_1_TOOBIG_DIR, so the
message is not confusing.

Could you fix this, please?   Thanks!!

					- Ted
diff mbox series

Patch

diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
index 5c0b92d5..3318d881 100644
--- a/e2fsck/pass1.c
+++ b/e2fsck/pass1.c
@@ -3647,9 +3647,10 @@  static int process_block(ext2_filsys fs,
 		}
 	}
 
-	if (p->is_dir && blockcnt > (1 << (21 - fs->super->s_log_block_size)))
+	if (p->is_dir && !ext2fs_has_feature_largedir(fs->super) &&
+	    blockcnt > (1 << (21 - fs->super->s_log_block_size)))
 		problem = PR_1_TOOBIG_DIR;
-	if (p->is_reg && p->num_blocks+1 >= p->max_blocks)
+	if ((p->is_reg || p->is_dir) && p->num_blocks + 1 >= p->max_blocks)
 		problem = PR_1_TOOBIG_REG;
 	if (!p->is_dir && !p->is_reg && blockcnt > 0)
 		problem = PR_1_TOOBIG_SYMLINK;