[Ocfs2-tools-devel] [PATCH 05/18] tunefs.ocfs2: Display progress of the high-level tunefs operations.

Joel Becker joel.becker at oracle.com
Mon Jan 5 18:33:41 PST 2009


At the toplevel, tunefs.ocfs2 just shows the percentage of operations
complete.

Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
 tunefs.ocfs2/libocfs2ne.h |    1 +
 tunefs.ocfs2/ocfs2ne.c    |   36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/tunefs.ocfs2/libocfs2ne.h b/tunefs.ocfs2/libocfs2ne.h
index debf2c5..6138724 100644
--- a/tunefs.ocfs2/libocfs2ne.h
+++ b/tunefs.ocfs2/libocfs2ne.h
@@ -23,6 +23,7 @@
 
 #include "o2ne_err.h"
 #include "tools-internal/verbose.h"
+#include "tools-internal/progress.h"
 
 /*
  * Adding a capability to ocfs2ne is pretty simple.  You create a source
diff --git a/tunefs.ocfs2/ocfs2ne.c b/tunefs.ocfs2/ocfs2ne.c
index fa830f2..c9051a4 100644
--- a/tunefs.ocfs2/ocfs2ne.c
+++ b/tunefs.ocfs2/ocfs2ne.c
@@ -99,8 +99,14 @@ extern struct tunefs_operation set_slot_count_op;
 extern struct tunefs_operation update_cluster_stack_op;
 extern struct tunefs_operation cloned_volume_op;
 
+/* List of operations we're going to run */
 static LIST_HEAD(tunefs_run_list);
 
+/* Number of operations we're going to run */
+static int tunefs_op_count;
+/* Progress display for tunefs operations */
+static struct tools_progress *tunefs_op_progress;
+
 static struct tunefs_journal_option set_journal_size_option = {
 	.jo_name	= "size",
 	.jo_help	= "size=<journal-size>",
@@ -135,6 +141,7 @@ static errcode_t tunefs_append_operation(struct tunefs_operation *op)
 	if (!err) {
 		run->tr_op = op;
 		list_add_tail(&run->tr_list, &tunefs_run_list);
+		tunefs_op_count++;
 	}
 
 	return err;
@@ -149,6 +156,7 @@ static errcode_t tunefs_prepend_operation(struct tunefs_operation *op)
 	if (!err) {
 		run->tr_op = op;
 		list_add(&run->tr_list, &tunefs_run_list);
+		tunefs_op_count++;
 	}
 
 	return err;
@@ -201,6 +209,12 @@ static int handle_interactive(struct tunefs_option *opt, char *arg)
 	return 0;
 }
 
+static int handle_progress(struct tunefs_option *opt, char *arg)
+{
+	tools_progress_enable();
+	return 0;
+}
+
 static int handle_answer(struct tunefs_option *opt, char *arg)
 {
 	int rc = 0;
@@ -425,6 +439,15 @@ static struct tunefs_option interactive_option = {
 	.opt_handle	= handle_interactive,
 };
 
+static struct tunefs_option progress_option = {
+	.opt_option	= {
+		.name	= "progress",
+		.val	= 'p',
+	},
+	.opt_help	= "-p|--progress",
+	.opt_handle	= handle_progress,
+};
+
 static struct tunefs_option yes_option = {
 	.opt_option	= {
 		.name	= "yes",
@@ -565,6 +588,7 @@ static struct tunefs_option *options[] = {
 	&help_option,
 	&version_option,
 	&interactive_option,
+	&progress_option,
 	&verbose_option,
 	&quiet_option,
 	&set_label_option,
@@ -958,6 +982,7 @@ static int run_operation_filter(ocfs2_filesys *fs, int filter)
 			}
 			break;
 		}
+		tools_progress_step(tunefs_op_progress, 1);
 	}
 
 	return err;
@@ -1048,8 +1073,19 @@ int main(int argc, char *argv[])
 		goto out;
 	}
 
+	tunefs_op_progress = tools_progress_start("tunefs.ocfs2",
+						  "tunefs",
+						  tunefs_op_count);
+	if (!tunefs_op_progress) {
+		tcom_err(TUNEFS_ET_NO_MEMORY,
+			 "while initializing the progress display");
+		goto out;
+	}
+
 	rc = run_operations(device);
 
+	tools_progress_stop(tunefs_op_progress);
+
 out:
 	return rc;
 }
-- 
1.5.6.5




More information about the Ocfs2-tools-devel mailing list