|
|
9a8d55 |
From 9728faf84cdc4acc674cc862a99f57d4e6552beb Mon Sep 17 00:00:00 2001
|
|
|
9a8d55 |
From: Sebastien GODARD <sysstat@users.noreply.github.com>
|
|
|
9a8d55 |
Date: Sun, 22 Jun 2014 16:09:18 +0200
|
|
|
9a8d55 |
Subject: [PATCH] Use statvfs() instead of statfs() system call
|
|
|
9a8d55 |
|
|
|
9a8d55 |
Use statvfs() system call instead of statfs() to get filesystems
|
|
|
9a8d55 |
statistics with sar since:
|
|
|
9a8d55 |
1) statfs() has been deprecated by the LSB (useful only to get fs
|
|
|
9a8d55 |
type which is not needed here),
|
|
|
9a8d55 |
2) statvfs() better handles large file sizes.
|
|
|
9a8d55 |
|
|
|
9a8d55 |
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
|
|
|
9a8d55 |
(cherry picked from commit 0936618a799918422012036aecbf7a2b0ee32354)
|
|
|
9a8d55 |
---
|
|
|
9a8d55 |
rd_stats.c | 18 +++++++++---------
|
|
|
9a8d55 |
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
|
9a8d55 |
|
|
|
9a8d55 |
diff --git a/rd_stats.c b/rd_stats.c
|
|
|
9a8d55 |
index 24a98f7..9f7fc37 100644
|
|
|
9a8d55 |
--- a/rd_stats.c
|
|
|
9a8d55 |
+++ b/rd_stats.c
|
|
|
9a8d55 |
@@ -27,7 +27,7 @@
|
|
|
9a8d55 |
#include <ctype.h>
|
|
|
9a8d55 |
#include <sys/types.h>
|
|
|
9a8d55 |
#include <sys/stat.h>
|
|
|
9a8d55 |
-#include <sys/vfs.h>
|
|
|
9a8d55 |
+#include <sys/statvfs.h>
|
|
|
9a8d55 |
#include <unistd.h>
|
|
|
9a8d55 |
|
|
|
9a8d55 |
#include "common.h"
|
|
|
9a8d55 |
@@ -1918,7 +1918,7 @@ void read_filesystem(struct stats_filesystem *st_filesystem, int nbr)
|
|
|
9a8d55 |
char line[256], fs_name[MAX_FS_LEN], mountp[128];
|
|
|
9a8d55 |
int fs = 0;
|
|
|
9a8d55 |
struct stats_filesystem *st_filesystem_i;
|
|
|
9a8d55 |
- struct statfs buf;
|
|
|
9a8d55 |
+ struct statvfs buf;
|
|
|
9a8d55 |
|
|
|
9a8d55 |
if ((fp = fopen(MTAB, "r")) == NULL)
|
|
|
9a8d55 |
return;
|
|
|
9a8d55 |
@@ -1931,14 +1931,14 @@ void read_filesystem(struct stats_filesystem *st_filesystem, int nbr)
|
|
|
9a8d55 |
|
|
|
9a8d55 |
/* Replace octal codes */
|
|
|
9a8d55 |
oct2chr(mountp);
|
|
|
9a8d55 |
-
|
|
|
9a8d55 |
- if ((statfs(mountp, &buf) < 0) || (!buf.f_blocks))
|
|
|
9a8d55 |
+
|
|
|
9a8d55 |
+ if ((statvfs(mountp, &buf) < 0) || (!buf.f_blocks))
|
|
|
9a8d55 |
continue;
|
|
|
9a8d55 |
|
|
|
9a8d55 |
st_filesystem_i = st_filesystem + fs++;
|
|
|
9a8d55 |
- st_filesystem_i->f_blocks = buf.f_blocks * buf.f_bsize;
|
|
|
9a8d55 |
- st_filesystem_i->f_bfree = buf.f_bfree * buf.f_bsize;
|
|
|
9a8d55 |
- st_filesystem_i->f_bavail = buf.f_bavail * buf.f_bsize;
|
|
|
9a8d55 |
+ st_filesystem_i->f_blocks = buf.f_blocks * buf.f_frsize;
|
|
|
9a8d55 |
+ st_filesystem_i->f_bfree = buf.f_bfree * buf.f_frsize;
|
|
|
9a8d55 |
+ st_filesystem_i->f_bavail = buf.f_bavail * buf.f_frsize;
|
|
|
9a8d55 |
st_filesystem_i->f_files = buf.f_files;
|
|
|
9a8d55 |
st_filesystem_i->f_ffree = buf.f_ffree;
|
|
|
9a8d55 |
strcpy(st_filesystem_i->fs_name, fs_name);
|
|
|
9a8d55 |
@@ -2382,7 +2382,7 @@ int get_filesystem_nr(void)
|
|
|
9a8d55 |
FILE *fp;
|
|
|
9a8d55 |
char line[256], fs_name[MAX_FS_LEN], mountp[128];
|
|
|
9a8d55 |
int fs = 0;
|
|
|
9a8d55 |
- struct statfs buf;
|
|
|
9a8d55 |
+ struct statvfs buf;
|
|
|
9a8d55 |
|
|
|
9a8d55 |
if ((fp = fopen(MTAB, "r")) == NULL)
|
|
|
9a8d55 |
/* File non-existent */
|
|
|
9a8d55 |
@@ -2399,7 +2399,7 @@ int get_filesystem_nr(void)
|
|
|
9a8d55 |
oct2chr(mountp);
|
|
|
9a8d55 |
|
|
|
9a8d55 |
/* Check that total size is not null */
|
|
|
9a8d55 |
- if (statfs(mountp, &buf) < 0)
|
|
|
9a8d55 |
+ if (statvfs(mountp, &buf) < 0)
|
|
|
9a8d55 |
continue;
|
|
|
9a8d55 |
|
|
|
9a8d55 |
if (buf.f_blocks) {
|
|
|
9a8d55 |
--
|
|
|
9a8d55 |
2.14.3
|
|
|
9a8d55 |
|