if (ino == EXT2_BAD_INO) {
struct process_block_struct pb;
+ if ((inode->i_mode || inode->i_uid || inode->i_gid ||
+ inode->i_links_count || inode->i_file_acl) &&
+ fix_problem(ctx, PR_1_INVALID_BAD_INODE, &pctx)) {
+ memset(inode, 0, sizeof(struct ext2_inode));
+ e2fsck_write_inode(ctx, ino, inode,
+ "clear bad inode");
+ }
+
pctx.errcode = ext2fs_copy_bitmap(ctx->block_found_map,
&pb.fs_meta_blocks);
if (pctx.errcode) {
*/
ctx->flags |= restart_flag;
+ if (ino == EXT2_BAD_INO)
+ memset(inode, 0, sizeof(struct ext2_inode));
+
e2fsck_write_inode(ctx, ino, inode, source);
}
N_("@q @i is visible to the user. "),
PROMPT_CLEAR, PR_PREEN_OK },
+ /* Invalid bad inode */
+ { PR_1_INVALID_BAD_INODE,
+ N_("The bad @b @i looks @n. "),
+ PROMPT_CLEAR, 0 },
+
/* Pass 1b errors */
/* Pass 1B: Rescan for duplicate/bad blocks */
/* Quota inode is user visible */
#define PR_1_QUOTA_INODE_NOT_HIDDEN 0x010064
+/* Invalid bad inode */
+#define PR_1_INVALID_BAD_INODE 0x010065
+
/*
* Pass 1b errors
*/
--- /dev/null
+Pass 1: Checking inodes, blocks, and sizes
+The bad block inode looks invalid. Clear? 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: 11/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 1
--- /dev/null
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 0
--- /dev/null
+check for bogus bad inode