[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Cluster-devel] [gfs2-utils PATCH] fsck.gfs2: time each of the passes



----- Original Message -----
> Hi,
> 
> On 11/07/14 18:41, Bob Peterson wrote:
> > ----- Original Message -----
> > (snip)
> >> Use timersub() here perhaps?
> >>
> >> Otherwise looks good,
> >>
> >> Steve.
> > Hi Steve,
> >
> > Thanks for the suggestion. How about this version?
> Yes, that looks better. There is probably a nicer way to do the
> conversion to string too... a quick google points at using a time_t to
> contain tv_secs, converting to tm and then appending the tv_usecs after.
> Should be a bit cleaner than doing it manually,
> 
> Steve.

Hi,

I could implement your suggestion like this. I could also use strftime,
but it's ugly as sin, so I'm reluctant to do so. What do you think?

Regards,

Bob Peterson
---
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index b4b1a03..ad42b0d 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,8 @@
 #include <signal.h>
 #include <libintl.h>
 #include <locale.h>
+#include <sys/time.h>
+#include <time.h>
 #define _(String) gettext(String)
 
 #include "copyright.cf"
@@ -244,11 +246,15 @@ static const struct fsck_pass passes[] = {
 static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
 {
 	int ret;
+	struct	timeval	before, after, diff;
+	time_t runtime;
+	struct tm *run_tm;
 
 	if (fsck_abort)
 		return FSCK_CANCELED;
 	pass = p->name;
 	log_notice( _("Starting %s\n"), p->name);
+	gettimeofday(&before, 0);
 	ret = p->f(sdp);
 	if (ret)
 		exit(ret);
@@ -257,7 +263,16 @@ static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
 		log_notice( _("%s interrupted   \n"), p->name);
 		return FSCK_CANCELED;
 	}
-	log_notice( _("%s complete      \n"), p->name);
+	gettimeofday(&after, 0);
+	timersub(&after, &before, &diff);
+	runtime = (time_t)diff.tv_sec;
+	run_tm = gmtime(&runtime);
+	log_notice( _("%s completed in "), p->name);
+	if (run_tm->tm_hour)
+		log_notice("%dh", run_tm->tm_hour);
+	if (run_tm->tm_min)
+		log_notice("%dm", run_tm->tm_min);
+	log_notice("%d.%03lds      \n", run_tm->tm_sec, diff.tv_usec / 1000);
 	return 0;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]