[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