[Ocfs2-tools-devel] [PATCH 10/18] tunefs.ocfs2: Display progress when changing the number of slots.

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


Display progress when adding or removing slots.

Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
 tunefs.ocfs2/op_set_slot_count.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/tunefs.ocfs2/op_set_slot_count.c b/tunefs.ocfs2/op_set_slot_count.c
index 07bc0e4..7d94b98 100644
--- a/tunefs.ocfs2/op_set_slot_count.c
+++ b/tunefs.ocfs2/op_set_slot_count.c
@@ -60,6 +60,7 @@ static errcode_t add_slots(ocfs2_filesys *fs, int num_slots)
 	uint64_t blkno;
 	int i, j, max_slots;
 	int ftype;
+	struct tools_progress *prog = NULL;
 
 	if (ocfs2_uses_extended_slot_map(OCFS2_RAW_SB(fs->fs_super))) {
 		ret = TUNEFS_ET_TOO_MANY_SLOTS_EXTENDED;
@@ -71,6 +72,15 @@ static errcode_t add_slots(ocfs2_filesys *fs, int num_slots)
 	if (num_slots > max_slots)
 		goto bail;
 
+	prog = tools_progress_start("Adding slots", "addslots",
+				    (NUM_SYSTEM_INODES -
+				     OCFS2_LAST_GLOBAL_SYSTEM_INODE - 1) *
+				    (num_slots - old_num));
+	if (!prog) {
+		ret = TUNEFS_ET_NO_MEMORY;
+		goto bail;
+	}
+
 	ret = 0;
 	for (i = OCFS2_LAST_GLOBAL_SYSTEM_INODE + 1; i < NUM_SYSTEM_INODES; ++i) {
 		for (j = old_num; j < num_slots; ++j) {
@@ -87,6 +97,7 @@ static errcode_t add_slots(ocfs2_filesys *fs, int num_slots)
 				verbosef(VL_APP,
 					 "System file \"%s\" already exists\n",
 					 fname);
+				tools_progress_step(prog, 1);
 				continue;
 			}
 
@@ -132,10 +143,14 @@ static errcode_t add_slots(ocfs2_filesys *fs, int num_slots)
 			}
 			verbosef(VL_APP, "System file \"%s\" created\n",
 				 fname);
+			tools_progress_step(prog, 1);
 		}
 	}
 
 bail:
+	if (prog)
+		tools_progress_stop(prog);
+
 	return ret;
 }
 
@@ -864,11 +879,20 @@ static errcode_t remove_slots(ocfs2_filesys *fs, int num_slots)
 	errcode_t ret;
 	uint16_t old_num = OCFS2_RAW_SB(fs->fs_super)->s_max_slots;
 	uint16_t removed_slot = old_num - 1;
+	struct tools_progress *prog = NULL;
 
 	ret = remove_slot_check(fs, num_slots);
 	if (ret)
 		goto bail;
 
+	/* We have seven steps in removing each slot */
+	prog = tools_progress_start("Removing slots", "rmslots",
+				    (old_num - num_slots) * 7);
+	if (!prog) {
+		ret = TUNEFS_ET_NO_MEMORY;
+		goto bail;
+	}
+
 	/* This is cleared up in update_slot_count() if everything works */
 	ret = tunefs_set_in_progress(fs, OCFS2_TUNEFS_INPROG_REMOVE_SLOT);
 	if (ret)
@@ -883,12 +907,14 @@ static errcode_t remove_slots(ocfs2_filesys *fs, int num_slots)
 					  EXTENT_ALLOC_SYSTEM_INODE);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* Link the specified inode alloc file to others. */
 		ret = relink_system_alloc(fs, removed_slot, num_slots,
 					  INODE_ALLOC_SYSTEM_INODE);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* Truncate the orphan dir to release its clusters
 		 * to the global bitmap.
@@ -896,11 +922,13 @@ static errcode_t remove_slots(ocfs2_filesys *fs, int num_slots)
 		ret = truncate_orphan_dir(fs, removed_slot);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* empty the content of journal and truncate its clusters. */
 		ret = empty_and_truncate_journal(fs, removed_slot);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* Now, we decrease the max_slots first and then remove the
 		 * slots for the reason that:
@@ -922,11 +950,13 @@ static errcode_t remove_slots(ocfs2_filesys *fs, int num_slots)
 		ret = ocfs2_write_primary_super(fs);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* The extra system dir entries should be removed. */
 		ret = remove_slot_entry(fs, removed_slot);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		/* Decrease the i_links_count in system file directory
 		 * since the orphan_dir is removed.
@@ -934,11 +964,15 @@ static errcode_t remove_slots(ocfs2_filesys *fs, int num_slots)
 		ret = decrease_link_count(fs, fs->fs_sysdir_blkno);
 		if (ret)
 			goto bail;
+		tools_progress_step(prog, 1);
 
 		removed_slot--;
 	}
 
 bail:
+	if (prog)
+		tools_progress_stop(prog);
+
 	return ret;
 }
 
-- 
1.5.6.5




More information about the Ocfs2-tools-devel mailing list