[Ocfs2-tools-devel] [PATCH 1/3] Ocfs2-tools: Implement new prompt codes of inline-data for fswreck.
Joel Becker
Joel.Becker at oracle.com
Thu Jul 2 15:01:08 PDT 2009
On Thu, Jul 02, 2009 at 02:52:37PM +0800, Tristan Ye wrote:
> After adding new prompt codes for inline-data in fsck.ocfs2, we also
> want fswreck to support such kind of corruptions.
>
> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
sob.
> ---
> fswreck/corrupt.c | 8 +++++++-
> fswreck/include/fsck_type.h | 7 ++++---
> fswreck/include/inode.h | 2 +-
> fswreck/inode.c | 36 +++++++++++++++++++++++++++---------
> fswreck/main.c | 7 +++++--
> 5 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/fswreck/corrupt.c b/fswreck/corrupt.c
> index 29eca1a..151d308 100644
> --- a/fswreck/corrupt.c
> +++ b/fswreck/corrupt.c
> @@ -238,7 +238,13 @@ void corrupt_file(ocfs2_filesys *fs, enum fsck_type type, uint16_t slotnum)
> func = mess_up_inline_flag;
> break;
> case INLINE_DATA_COUNT_INVALID:
> - func = mess_up_inline_count;
> + func = mess_up_inline_inode;
> + break;
> + case INODE_INLINE_SIZE:
> + func = mess_up_inline_inode;
> + break;
> + case INODE_INLINE_CLUSTERS:
> + func = mess_up_inline_inode;
> break;
> case DUPLICATE_CLUSTERS:
> func = mess_up_dup_clusters;
> diff --git a/fswreck/include/fsck_type.h b/fswreck/include/fsck_type.h
> index 20056b4..3cc644a 100644
> --- a/fswreck/include/fsck_type.h
> +++ b/fswreck/include/fsck_type.h
> @@ -117,6 +117,8 @@ enum fsck_type
> CLUSTER_GROUP_DESC,
> INLINE_DATA_FLAG_INVALID,
> INLINE_DATA_COUNT_INVALID,
> + INODE_INLINE_SIZE,
> + INODE_INLINE_CLUSTERS,
> DUPLICATE_CLUSTERS,
> NUM_FSCK_TYPE
> };
> @@ -190,9 +192,8 @@ enum fsck_type
> *
> * Directory not connected error: DIR_NOT_CONNECTED
> *
> - * Inline file flag error: INLINE_DATA_FLAG_INVALID
> - *
> - * Inline file id_count error: INLINE_DATA_COUNT_INVALID
> + * Inline file: INLINE_DATA_FLAG_INVALID, INLINE_DATA_COUNT_INVALID
> + * INODE_INLINE_SIZE, INODE_INLINE_CLUSTERS
> *
> */
> #endif
> diff --git a/fswreck/include/inode.h b/fswreck/include/inode.h
> index f55ec4f..8d01ae7 100644
> --- a/fswreck/include/inode.h
> +++ b/fswreck/include/inode.h
> @@ -35,7 +35,7 @@ void mess_up_inode_alloc(ocfs2_filesys *fs, enum fsck_type type,
> uint16_t slotnum);
> void mess_up_inline_flag(ocfs2_filesys *fs, enum fsck_type type,
> uint64_t blkno);
> -void mess_up_inline_count(ocfs2_filesys *fs, enum fsck_type type,
> +void mess_up_inline_inode(ocfs2_filesys *fs, enum fsck_type type,
> uint64_t blkno);
> void mess_up_dup_clusters(ocfs2_filesys *fs, enum fsck_type type,
> uint64_t blkno);
> diff --git a/fswreck/inode.c b/fswreck/inode.c
> index 70e849e..a66ff3f 100644
> --- a/fswreck/inode.c
> +++ b/fswreck/inode.c
> @@ -275,7 +275,7 @@ void mess_up_inline_flag(ocfs2_filesys *fs, enum fsck_type type, uint64_t blkno)
> return;
> }
>
> -void mess_up_inline_count(ocfs2_filesys *fs, enum fsck_type type, uint64_t blkno)
> +void mess_up_inline_inode(ocfs2_filesys *fs, enum fsck_type type, uint64_t blkno)
> {
> int i;
> errcode_t ret;
> @@ -313,18 +313,36 @@ void mess_up_inline_count(ocfs2_filesys *fs, enum fsck_type type, uint64_t blkno
> if (!(di->i_dyn_features & OCFS2_INLINE_DATA_FL))
> di->i_dyn_features |= OCFS2_INLINE_DATA_FL;
>
> - di->id2.i_data.id_count = 0;
> - di->i_size = max_inline_sz + 1;
> - di->i_clusters = 1;
> + switch (type) {
> + case INLINE_DATA_COUNT_INVALID:
> + di->id2.i_data.id_count = 0;
> + fprintf(stdout, "INLINE_DATA_COUNT_INVALID: "
> + "Create an inlined inode#%"PRIu64"(%s),"
> + "whose id_count has been messed up.\n",
> + inline_blkno, file_type);
> + break;
> + case INODE_INLINE_SIZE:
> + di->i_size = max_inline_sz + 1;
> + fprintf(stdout, "INODE_INLINE_SIZE: "
> + "Create an inlined inode#%"PRIu64"(%s),"
> + "whose i_size has been messed up.\n",
> + inline_blkno, file_type);
> + break;
> + case INODE_INLINE_CLUSTERS:
> + di->i_clusters = 1;
> + fprintf(stdout, "INODE_INLINE_CLUSTERS: "
> + "Create an inlined inode#%"PRIu64"(%s),"
> + "whose i_clusters has been messed up.\n",
> + inline_blkno, file_type);
> + break;
> +
> + default:
> + FSWRK_FATAL("Invalid type[%d]\n", type);
> + }
>
> ret = ocfs2_write_inode(fs, inline_blkno, buf);
> if (ret)
> FSWRK_COM_FATAL(progname, ret);
> -
> - fprintf(stdout, "INLINE_DATA_COUNT_INVALID: "
> - "Create an inlined inode#%"PRIu64"(%s),"
> - "whose id_count, i_size and i_clusters "
> - "been messed up\n", inline_blkno, file_type);
> }
>
> if (buf)
> diff --git a/fswreck/main.c b/fswreck/main.c
> index ea15fb7..ecd254b 100644
> --- a/fswreck/main.c
> +++ b/fswreck/main.c
> @@ -140,8 +140,11 @@ static struct prompt_code prompt_codes[NUM_FSCK_TYPE] = {
> define_prompt_code(INLINE_DATA_FLAG_INVALID, corrupt_file,
> "Create an inlined inode on a unsupported volume"),
> define_prompt_code(INLINE_DATA_COUNT_INVALID, corrupt_file,
> - "Corrupt inlined inode's id_count, "
> - "i_size and i_clusters"),
> + "Corrupt inlined inode's id_count"),
> + define_prompt_code(INODE_INLINE_SIZE, corrupt_file,
> + "Corrupt inlined inode's i_size"),
> + define_prompt_code(INODE_INLINE_CLUSTERS, corrupt_file,
> + "Corrupt inlined inode's i_clusters"),
> define_prompt_code(DUPLICATE_CLUSTERS, corrupt_file,
> "Allocate same cluster to different files"),
> define_prompt_code(CHAIN_COUNT, corrupt_sys_file,
> --
> 1.5.5
>
>
> _______________________________________________
> Ocfs2-tools-devel mailing list
> Ocfs2-tools-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-tools-devel
--
"When I am working on a problem I never think about beauty. I
only think about how to solve the problem. But when I have finished, if
the solution is not beautiful, I know it is wrong."
- Buckminster Fuller
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-tools-devel
mailing list