diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index aaeb70ad..db5273ea 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -2568,9 +2568,9 @@ report_problem: new_lblk = pb->last_block + 1; if (EXT2FS_CLUSTER_RATIO(ctx->fs) > 1) new_lblk = ((new_lblk + - EXT2FS_CLUSTER_RATIO(ctx->fs)) & - EXT2FS_CLUSTER_MASK(ctx->fs)) | - (extent.e_lblk & + EXT2FS_CLUSTER_RATIO(ctx->fs) - 1) & + ~EXT2FS_CLUSTER_MASK(ctx->fs)) | + (extent.e_pblk & EXT2FS_CLUSTER_MASK(ctx->fs)); pctx->blk = extent.e_lblk; pctx->blk2 = new_lblk; diff --git a/tests/f_holedir4/expect.1 b/tests/f_holedir4/expect.1 new file mode 100644 index 00000000..1e66fb6a --- /dev/null +++ b/tests/f_holedir4/expect.1 @@ -0,0 +1,68 @@ +Pass 1: Checking inodes, blocks, and sizes +Directory inode 12 block 211 should be at block 25. Fix? yes + +Inode 12, i_size is 4096, should be 110592. Fix? yes + +Inode 12, i_blocks is 128, should be 256. Fix? yes + +Pass 2: Checking directory structure +Directory inode 12 has an unallocated block #2. Allocate? yes + +Directory inode 12 has an unallocated block #3. Allocate? yes + +Directory inode 12 has an unallocated block #4. Allocate? yes + +Directory inode 12 has an unallocated block #5. Allocate? yes + +Directory inode 12 has an unallocated block #6. Allocate? yes + +Directory inode 12 has an unallocated block #7. Allocate? yes + +Directory inode 12 has an unallocated block #8. Allocate? yes + +Directory inode 12 has an unallocated block #9. Allocate? yes + +Directory inode 12 has an unallocated block #10. Allocate? yes + +Directory inode 12 has an unallocated block #11. Allocate? yes + +Directory inode 12 has an unallocated block #12. Allocate? yes + +Directory inode 12 has an unallocated block #13. Allocate? yes + +Directory inode 12 has an unallocated block #14. Allocate? yes + +Directory inode 12 has an unallocated block #15. Allocate? yes + +Directory inode 12 has an unallocated block #16. Allocate? yes + +Directory inode 12 has an unallocated block #17. Allocate? yes + +Directory inode 12 has an unallocated block #18. Allocate? yes + +Directory inode 12 has an unallocated block #19. Allocate? yes + +Directory inode 12 has an unallocated block #20. Allocate? yes + +Directory inode 12 has an unallocated block #21. Allocate? yes + +Directory inode 12 has an unallocated block #22. Allocate? yes + +Directory inode 12 has an unallocated block #23. Allocate? yes + +Directory inode 12 has an unallocated block #24. Allocate? yes + +Pass 3: Checking directory connectivity +Pass 3A: Optimizing directories +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Free blocks count wrong for group #0 (26, counted=25). +Fix? yes + +Free blocks count wrong (416, counted=400). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 13/32 files (7.7% non-contiguous), 112/512 blocks +Exit status is 1 diff --git a/tests/f_holedir4/expect.2 b/tests/f_holedir4/expect.2 new file mode 100644 index 00000000..1f0e3519 --- /dev/null +++ b/tests/f_holedir4/expect.2 @@ -0,0 +1,11 @@ +Pass 1: Checking inodes, blocks, and sizes +Inode 12, i_blocks is 3072, should be 128. Fix? yes + +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 13/32 files (0.0% non-contiguous), 112/512 blocks +Exit status is 1 diff --git a/tests/f_holedir4/image.gz b/tests/f_holedir4/image.gz new file mode 100644 index 00000000..8ab12454 Binary files /dev/null and b/tests/f_holedir4/image.gz differ diff --git a/tests/f_holedir4/name b/tests/f_holedir4/name new file mode 100644 index 00000000..5eb55c1d --- /dev/null +++ b/tests/f_holedir4/name @@ -0,0 +1 @@ +bigalloc directory with hole and misaligned extent after hole