[Ocfs2-tools-devel] [PATCH 17/18] tunefs.ocfs2: Progress for enable/disable of unwritten extents.
Mark Fasheh
mfasheh at suse.com
Wed Jan 14 14:56:25 PST 2009
Signed-off-by: Mark Fasheh <mfasheh at suse.com>
On Mon, Jan 05, 2009 at 06:33:53PM -0800, Joel Becker wrote:
> Display a progress spinner while we enable and disable unwritten
> extents.
>
> Signed-off-by: Joel Becker <joel.becker at oracle.com>
> ---
> tunefs.ocfs2/feature_unwritten_extents.c | 36 ++++++++++++++++++++++++++---
> 1 files changed, 32 insertions(+), 4 deletions(-)
>
> diff --git a/tunefs.ocfs2/feature_unwritten_extents.c b/tunefs.ocfs2/feature_unwritten_extents.c
> index 2a1f8a6..a43b308 100644
> --- a/tunefs.ocfs2/feature_unwritten_extents.c
> +++ b/tunefs.ocfs2/feature_unwritten_extents.c
> @@ -35,6 +35,7 @@ static int enable_unwritten_extents(ocfs2_filesys *fs, int flags)
> {
> errcode_t ret = 0;
> struct ocfs2_super_block *super = OCFS2_RAW_SB(fs->fs_super);
> + struct tools_progress *prog;
>
> if (ocfs2_writes_unwritten_extents(super)) {
> verbosef(VL_APP,
> @@ -56,6 +57,13 @@ static int enable_unwritten_extents(ocfs2_filesys *fs, int flags)
> fs->fs_devname))
> goto out;
>
> + prog = tools_progress_start("Enable unwritten", "unwritten", 1);
> + if (!prog) {
> + ret = TUNEFS_ET_NO_MEMORY;
> + tcom_err(ret, "while initializing the progress display");
> + goto out;
> + }
> +
> OCFS2_SET_RO_COMPAT_FEATURE(super,
> OCFS2_FEATURE_RO_COMPAT_UNWRITTEN);
> tunefs_block_signals();
> @@ -64,19 +72,22 @@ static int enable_unwritten_extents(ocfs2_filesys *fs, int flags)
> if (ret)
> tcom_err(ret, "while writing out the superblock");
>
> + tools_progress_step(prog, 1);
> + tools_progress_stop(prog);
> out:
> return ret;
> }
>
> static errcode_t unwritten_iterate(ocfs2_filesys *fs,
> struct ocfs2_dinode *di,
> - void *unused)
> + void *user_data)
> {
> errcode_t ret = 0;
> uint32_t clusters, v_cluster = 0, p_cluster, num_clusters;
> uint16_t extent_flags;
> uint64_t p_blkno;
> ocfs2_cached_inode *ci = NULL;
> + struct tools_progress *prog = user_data;
>
> if (!S_ISREG(di->i_mode))
> goto bail;
> @@ -105,6 +116,7 @@ static errcode_t unwritten_iterate(ocfs2_filesys *fs,
> if (ret)
> break;
>
> + tools_progress_step(prog, 1);
> tunefs_block_signals();
> ret = ocfs2_mark_extent_written(fs, di, v_cluster,
> num_clusters,
> @@ -112,6 +124,7 @@ static errcode_t unwritten_iterate(ocfs2_filesys *fs,
> tunefs_unblock_signals();
> if (ret)
> break;
> + tools_progress_step(prog, 1);
> }
>
> v_cluster += num_clusters;
> @@ -120,18 +133,22 @@ static errcode_t unwritten_iterate(ocfs2_filesys *fs,
> bail:
> if (ci)
> ocfs2_free_cached_inode(fs, ci);
> + tools_progress_step(prog, 1);
> +
> return ret;
> }
>
> -static errcode_t clear_unwritten_extents(ocfs2_filesys *fs)
> +static errcode_t clear_unwritten_extents(ocfs2_filesys *fs,
> + struct tools_progress *prog)
> {
> - return tunefs_foreach_inode(fs, unwritten_iterate, NULL);
> + return tunefs_foreach_inode(fs, unwritten_iterate, prog);
> }
>
> static int disable_unwritten_extents(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_writes_unwritten_extents(super)) {
> verbosef(VL_APP,
> @@ -145,7 +162,14 @@ static int disable_unwritten_extents(ocfs2_filesys *fs, int flags)
> fs->fs_devname))
> goto out;
>
> - ret = clear_unwritten_extents(fs);
> + prog = tools_progress_start("Disabling unwritten", "nounwritten", 0);
> + if (!prog) {
> + ret = TUNEFS_ET_NO_MEMORY;
> + tcom_err(ret, "while initializing the progress display");
> + goto out;
> + }
> +
> + ret = clear_unwritten_extents(fs, prog);
> if (ret) {
> tcom_err(ret,
> "while trying to clear the unwritten extents on "
> @@ -162,7 +186,11 @@ static int disable_unwritten_extents(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;
> }
>
> --
> 1.5.6.5
--
Mark Fasheh
More information about the Ocfs2-tools-devel
mailing list