[Ocfs2-tools-devel] [PATCH 1/1] Fsck.ocfs2: Correctly check i_size for directory in a sparse filesystem.

Sunil Mushran sunil.mushran at oracle.com
Mon Mar 8 13:07:38 PST 2010


sob

Tristan Ye wrote:
> As we know, i_size(in clusters) of an sparse file shouldn't be less
> than its cluster offset, while it's not the case for a directory inode.
> We therefore need to let fsck.ocfs2 handle this correctly on a sparse fs.
>
> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
> ---
>  fsck.ocfs2/pass1.c |   12 ++++++++++--
>  1 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/fsck.ocfs2/pass1.c b/fsck.ocfs2/pass1.c
> index 0763259..8035bb6 100644
> --- a/fsck.ocfs2/pass1.c
> +++ b/fsck.ocfs2/pass1.c
> @@ -935,8 +935,16 @@ size_cluster_check:
>  			expected *=  fs->fs_clustersize;
>  			unexpected = expected - fs->fs_clustersize;
>  
> -			/* i_size is checked for symlinks elsewhere */
> -			if (!S_ISLNK(di->i_mode) && di->i_size <= unexpected &&
> +			/*
> +			 * NOTE:
> +			 *  -	 i_size is checked for symlinks elsewhere
> +			 *  -    We're not going to check this for dirs
> +			 * 	 since it would be legal for a dir inode
> +			 *	 whose i_size(in clusters) was less than
> +			 *	 i_clusters, even in a sparse filesystem
> +			 */
> +			if (!S_ISLNK(di->i_mode) && !S_ISDIR(di->i_mode) &&
> +			    di->i_size <= unexpected &&
>  			    prompt(ost, PY, PR_INODE_SPARSE_SIZE, "Inode %"PRIu64
>  				   " has a size of %"PRIu64" but has %"PRIu64
>  				   " blocks of actual data. "
>   




More information about the Ocfs2-tools-devel mailing list