mirror of https://github.com/vitalif/e2fsprogs
e2fsck: Check for cases where EOFBLOCKS_FL is unnecessarily set
Some kernels will crash if EOFBLOCKS_FL is set when it is it not needed, and this if it is left set when it isn't needed, it is a sign of a kernel bug. Addresses-Google-Bug: #2604224 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>bitmap-optimize
parent
bc11f0dacc
commit
2291fbb035
|
@ -2000,6 +2000,19 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
|
|||
((1ULL << (32 + EXT2_BLOCK_SIZE_BITS(fs->super))) - 1))
|
||||
/* too big for an extent-based file - 32bit ee_block */
|
||||
bad_size = 6;
|
||||
|
||||
/*
|
||||
* Check to see if the EOFBLOCKS flag is set where it
|
||||
* doesn't need to be.
|
||||
*/
|
||||
if ((inode->i_flags & EXT4_EOFBLOCKS_FL) &&
|
||||
(size <= (((__u64)pb.last_block + 1) * fs->blocksize))) {
|
||||
pctx->blkcount = pb.last_block;
|
||||
if (fix_problem(ctx, PR_1_EOFBLOCKS_FL_SET, pctx)) {
|
||||
inode->i_flags &= ~EXT4_EOFBLOCKS_FL;
|
||||
dirty_inode++;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* i_size for symlinks is checked elsewhere */
|
||||
if (bad_size && !LINUX_S_ISLNK(inode->i_mode)) {
|
||||
|
|
|
@ -885,6 +885,11 @@ static struct e2fsck_problem problem_table[] = {
|
|||
N_("@i %i has an invalid extent node (blk %b, lblk %c)\n"),
|
||||
PROMPT_CLEAR, 0 },
|
||||
|
||||
{ PR_1_EOFBLOCKS_FL_SET,
|
||||
N_("@i %i should not have EOFBLOCKS_FL set "
|
||||
"(size %Is, lblk %r)\n"),
|
||||
PROMPT_CLEAR, PR_PREEN_OK },
|
||||
|
||||
/* Pass 1b errors */
|
||||
|
||||
/* Pass 1B: Rescan for duplicate/bad blocks */
|
||||
|
|
|
@ -517,6 +517,9 @@ struct problem_context {
|
|||
/* Extent node header invalid */
|
||||
#define PR_1_EXTENT_HEADER_INVALID 0x01005F
|
||||
|
||||
/* EOFBLOCKS flag set when not necessary */
|
||||
#define PR_1_EOFBLOCKS_FL_SET 0x010060
|
||||
|
||||
/*
|
||||
* Pass 1b errors
|
||||
*/
|
||||
|
|
|
@ -2,12 +2,21 @@ Pass 1: Checking inodes, blocks, and sizes
|
|||
Inode 1 has EXTENTS_FL flag set on filesystem without extents support.
|
||||
Clear? yes
|
||||
|
||||
Inode 9 should not have EOFBLOCKS_FL set (size 0, lblk -1)
|
||||
Clear? yes
|
||||
|
||||
Inode 10 should not have EOFBLOCKS_FL set (size 0, lblk -1)
|
||||
Clear? yes
|
||||
|
||||
Inode 15 has EXTENTS_FL flag set on filesystem without extents support.
|
||||
Clear? yes
|
||||
|
||||
Inode 16 has EXTENTS_FL flag set on filesystem without extents support.
|
||||
Clear? yes
|
||||
|
||||
Inode 13 should not have EOFBLOCKS_FL set (size 0, lblk -1)
|
||||
Clear? yes
|
||||
|
||||
Pass 2: Checking directory structure
|
||||
Pass 3: Checking directory connectivity
|
||||
/lost+found not found. Create? yes
|
||||
|
|
Loading…
Reference in New Issue