[Ocfs2-tools-devel] [PATCH 08/18] tunefs.ocfs2: Progress display for enable/disable of inline-data.

Mark Fasheh mfasheh at suse.com
Wed Jan 14 14:50:59 PST 2009


Signed-off-by: Mark Fasheh <mfasheh at suse.com>

On Mon, Jan 05, 2009 at 06:33:44PM -0800, Joel Becker wrote:
> Display progress when changing the inline-data feature.
> 
> Signed-off-by: Joel Becker <joel.becker at oracle.com>
> ---
>  tunefs.ocfs2/feature_inline_data.c |   54 ++++++++++++++++++++++++++++++++++++
>  1 files changed, 54 insertions(+), 0 deletions(-)
> 
> diff --git a/tunefs.ocfs2/feature_inline_data.c b/tunefs.ocfs2/feature_inline_data.c
> index f9f878d..f8669e0 100644
> --- a/tunefs.ocfs2/feature_inline_data.c
> +++ b/tunefs.ocfs2/feature_inline_data.c
> @@ -44,6 +44,7 @@ struct inline_data_context {
>  	errcode_t ret;
>  	uint32_t more_clusters;
>  	struct list_head inodes;
> +	struct tools_progress *prog;
>  };
>  
>  
> @@ -51,6 +52,7 @@ static int enable_inline_data(ocfs2_filesys *fs, int flags)
>  {
>  	errcode_t ret = 0;
>  	struct ocfs2_super_block *super = OCFS2_RAW_SB(fs->fs_super);
> +	struct tools_progress *prog = NULL;
>  
>  	if (ocfs2_support_inline_data(super)) {
>  		verbosef(VL_APP,
> @@ -64,6 +66,13 @@ static int enable_inline_data(ocfs2_filesys *fs, int flags)
>  			    fs->fs_devname))
>  		goto out;
>  
> +	prog = tools_progress_start("Enabling inline-data", "inline-data", 1);
> +	if (!prog) {
> +		ret = TUNEFS_ET_NO_MEMORY;
> +		tcom_err(ret, "while initializing the progress display");
> +		goto out;
> +	}
> +
>  	OCFS2_SET_INCOMPAT_FEATURE(super,
>  				   OCFS2_FEATURE_INCOMPAT_INLINE_DATA);
>  	tunefs_block_signals();
> @@ -72,7 +81,12 @@ static int enable_inline_data(ocfs2_filesys *fs, int flags)
>  	if (ret)
>  		tcom_err(ret, "while writing out the superblock");
>  
> +	tools_progress_step(prog, 1);
> +
>  out:
> +	if (prog)
> +		tools_progress_stop(prog);
> +
>  	return ret;
>  }
>  
> @@ -97,6 +111,8 @@ static errcode_t inline_iterate(ocfs2_filesys *fs, struct ocfs2_dinode *di,
>  	ctxt->more_clusters++;
>  	list_add_tail(&idi->list, &ctxt->inodes);
>  
> +	tools_progress_step(ctxt->prog, 1);
> +
>  	return 0;
>  
>  bail:
> @@ -109,6 +125,13 @@ static errcode_t find_inline_data(ocfs2_filesys *fs,
>  	errcode_t ret;
>  	uint32_t free_clusters = 0;
>  
> +	ctxt->prog = tools_progress_start("Scanning filesystem", "scanning",
> +					  0);
> +	if (!ctxt->prog) {
> +		ret = TUNEFS_ET_NO_MEMORY;
> +		goto bail;
> +	}
> +
>  	ret = tunefs_foreach_inode(fs, inline_iterate, ctxt);
>  	if (ret)
>  		goto bail;
> @@ -126,6 +149,9 @@ static errcode_t find_inline_data(ocfs2_filesys *fs,
>  		ret = OCFS2_ET_NO_SPACE;
>  
>  bail:
> +	if (ctxt->prog)
> +		tools_progress_stop(ctxt->prog);
> +
>  	return ret;
>  }
>  
> @@ -148,6 +174,12 @@ static errcode_t expand_inline_data(ocfs2_filesys *fs,
>  	struct list_head *pos;
>  	struct inline_data_inode *idi;
>  	ocfs2_cached_inode *ci = NULL;
> +	struct tools_progress *prog;
> +
> +	prog = tools_progress_start("Expanding inline files", "expanding",
> +				    ctxt->more_clusters);
> +	if (!ctxt->prog)
> +		return TUNEFS_ET_NO_MEMORY;
>  
>  	list_for_each(pos, &ctxt->inodes) {
>  		idi = list_entry(pos, struct inline_data_inode, list);
> @@ -160,7 +192,11 @@ static errcode_t expand_inline_data(ocfs2_filesys *fs,
>  
>  		if (ret)
>  			break;
> +		
> +		tools_progress_step(prog, 1);
>  	}
> +	
> +	tools_progress_stop(prog);
>  
>  	return ret;
>  }
> @@ -170,6 +206,7 @@ static int disable_inline_data(ocfs2_filesys *fs, int flags)
>  	errcode_t ret = 0;
>  	struct ocfs2_super_block *super = OCFS2_RAW_SB(fs->fs_super);
>  	struct inline_data_context ctxt;
> +	struct tools_progress *prog = NULL;
>  
>  	if (!ocfs2_support_inline_data(super)) {
>  		verbosef(VL_APP,
> @@ -183,6 +220,14 @@ static int disable_inline_data(ocfs2_filesys *fs, int flags)
>  			    fs->fs_devname))
>  		goto out;
>  
> +	prog = tools_progress_start("Disabling inline-data", "noinline-data", 3);
> +
> +	if (!prog) {
> +		ret = TUNEFS_ET_NO_MEMORY;
> +		tcom_err(ret, "while initializing the progress display");
> +		goto out;
> +	}
> +
>  	memset(&ctxt, 0, sizeof(ctxt));
>  	INIT_LIST_HEAD(&ctxt.inodes);
>  	ret = find_inline_data(fs, &ctxt);
> @@ -197,6 +242,8 @@ static int disable_inline_data(ocfs2_filesys *fs, int flags)
>  		goto out_cleanup;
>  	}
>  
> +	tools_progress_step(prog, 1);
> +
>  	ret = expand_inline_data(fs, &ctxt);
>  	if (ret) {
>  		tcom_err(ret,
> @@ -206,6 +253,8 @@ static int disable_inline_data(ocfs2_filesys *fs, int flags)
>  		goto out_cleanup;
>  	}
>  
> +	tools_progress_step(prog, 1);
> +
>  	OCFS2_CLEAR_INCOMPAT_FEATURE(super,
>  				     OCFS2_FEATURE_INCOMPAT_INLINE_DATA);
>  	tunefs_block_signals();
> @@ -214,10 +263,15 @@ static int disable_inline_data(ocfs2_filesys *fs, int flags)
>  	if (ret)
>  		tcom_err(ret, "while writing out the superblock");
>  
> +	tools_progress_step(prog, 1);
> +
>  out_cleanup:
>  	empty_inline_data_context(&ctxt);
>  
>  out:
> +	if (prog)
> +		tools_progress_stop(prog);
> +
>  	return ret;
>  }
>  
> -- 
> 1.5.6.5
--
Mark Fasheh



More information about the Ocfs2-tools-devel mailing list