Blob Blame History Raw
From f9752adcd732441cc2d5604cb9b24ecfc29a6acb Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@orange.fr.fake>
Date: Mon, 20 May 2013 17:14:05 +0200
Subject: [PATCH] Filesystems stats: Display unmounted filesystems in summary
 list

This patch enables sar -F to display filesystems in its summary list (the
last stats displayed by sar) even if those filesystems have been
unmounted before the end of the report.

(cherry picked from commit c8b1f890f7fc242eceafc94ab3ba117247f3d577)
---
 pr_stats.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/pr_stats.c b/pr_stats.c
index 85a3a20..d1edb5b 100644
--- a/pr_stats.c
+++ b/pr_stats.c
@@ -2445,17 +2445,14 @@ __print_funct_t print_avg_pwr_usb_stats(struct activity *a, int prev, int curr,
  *
  * IN:
  * @a		Activity structure with statistics.
- * @prev	Index in array where stats used as reference are.
  * @curr	Index in array for current sample statistics.
- * @itv		Interval of time in jiffies.
  * @dispavg	TRUE if displaying average statistics.
  ***************************************************************************
  */
-__print_funct_t stub_print_filesystem_stats(struct activity *a, int prev, int curr,
-					    unsigned long long itv, int dispavg)
+__print_funct_t stub_print_filesystem_stats(struct activity *a, int curr, int dispavg)
 {
-	int i;
-	struct stats_filesystem *sfc;
+	int i, j;
+	struct stats_filesystem *sfc, *sfm;
 
 	
 	if (dis) {
@@ -2486,6 +2483,23 @@ __print_funct_t stub_print_filesystem_stats(struct activity *a, int prev, int cu
 		       sfc->f_files ? SP_VALUE(sfc->f_ffree, sfc->f_files, sfc->f_files)
 				    : 0.0,
 		       sfc->fs_name);
+		
+		if (!dispavg) {
+			/* Save current filesystem in summary list */
+			for (j = 0; j < a->nr; j++) {
+				sfm = (struct stats_filesystem *) ((char *) a->buf[2] + j * a->msize);
+				
+				if (!strcmp(sfm->fs_name, sfc->fs_name) ||
+				    !sfm->f_blocks) {
+					/*
+					 * Filesystem found in list (then save again its stats)
+					 * or free slot (end of list).
+					 */
+					*sfm = *sfc;
+					break;
+				}
+			}
+		}
 	}
 }
 
@@ -2503,7 +2517,7 @@ __print_funct_t stub_print_filesystem_stats(struct activity *a, int prev, int cu
 __print_funct_t print_filesystem_stats(struct activity *a, int prev, int curr,
 				       unsigned long long itv)
 {
-	stub_print_filesystem_stats(a, prev, curr, itv, FALSE);
+	stub_print_filesystem_stats(a, curr, FALSE);
 }
 
 /*
@@ -2520,5 +2534,5 @@ __print_funct_t print_filesystem_stats(struct activity *a, int prev, int curr,
 __print_funct_t print_avg_filesystem_stats(struct activity *a, int prev, int curr,
 					   unsigned long long itv)
 {
-	stub_print_filesystem_stats(a, prev, curr, itv, TRUE);
+	stub_print_filesystem_stats(a, 2, TRUE);
 }
-- 
2.14.3