+2000-05-27 Theodore Ts'o <tytso@valinux.com>
+
+ * pass1.c (pass1, check_size): Apply patch from Chris Wedgewood
+ (cw@foof.org) which checks to see if special devices have
+ a non-zero size, and deals with it.
+
+ * problem.c, problem.h (PR1_SET_NONZSIZE): Add new problem code.
+
2000-05-18 Theodore Ts'o <tytso@valinux.com>
* Makefile.in (install): Create a symbolic link for fsck.ext3 as
e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
}
+/*
+ * If device, fifo or socket, check size is zero -- if not offer to
+ * clear it
+ */
+static void check_size(e2fsck_t ctx, struct problem_context *pctx)
+{
+ struct ext2_inode *inode = pctx->inode;
+
+ if ((LINUX_S_ISBLK(inode->i_mode) ||
+ LINUX_S_ISCHR(inode->i_mode) ||
+ LINUX_S_ISFIFO(inode->i_mode) ||
+ LINUX_S_ISSOCK(inode->i_mode)) &&
+ !inode->i_size)
+ return;
+
+ if(!fix_problem(ctx, PR_1_SET_NONZSIZE, pctx))
+ return;
+
+ inode->i_size = 0;
+ e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
+}
+
void e2fsck_pass1(e2fsck_t ctx)
{
} else if (LINUX_S_ISCHR (inode.i_mode) &&
e2fsck_pass1_check_device_inode(&inode)) {
check_immutable(ctx, &pctx);
+ check_size(ctx, &pctx);
ctx->fs_chardev_count++;
} else if (LINUX_S_ISBLK (inode.i_mode) &&
e2fsck_pass1_check_device_inode(&inode)) {
check_immutable(ctx, &pctx);
+ check_size(ctx, &pctx);
ctx->fs_blockdev_count++;
} else if (LINUX_S_ISLNK (inode.i_mode)) {
ctx->fs_symlinks_count++;
else if (LINUX_S_ISFIFO (inode.i_mode) &&
e2fsck_pass1_check_device_inode(&inode)) {
check_immutable(ctx, &pctx);
+ check_size(ctx, &pctx);
ctx->fs_fifo_count++;
} else if ((LINUX_S_ISSOCK (inode.i_mode)) &&
e2fsck_pass1_check_device_inode(&inode)) {
check_immutable(ctx, &pctx);
- ctx->fs_sockets_count++;
+ check_size(ctx, &pctx);
+ ctx->fs_sockets_count++;
} else {
if (!ctx->inode_bad_map)
alloc_bad_map(ctx);
N_("@i %i has @cion flag set on @f without @cion support. "),
PROMPT_CLEAR, 0 },
+ /* Non-zero size for device, fifo or socket inode */
+ { PR_1_SET_NONZSIZE,
+ "Special (device/socket/fifo) @i %i has non-zero size. ",
+ PROMPT_FIX, PR_PREEN_OK },
+
/* Pass 1b errors */
/* Pass 1B: Rescan for duplicate/bad blocks */