[PATCH] xfstests: src/feature.c: print a number of online CPUs

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

 



For this purpose we use sysconf() as it is the
preferred platform neutral interface for getting this
sort of information.

Based on Dave Chinner proposal.

Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@xxxxxxxxxx>
---
 src/feature.c |   31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/src/feature.c b/src/feature.c
index 2619ca5..a3ce9b8 100644
--- a/src/feature.c
+++ b/src/feature.c
@@ -30,6 +30,7 @@
  * Return code: 0 is true, anything else is error/not supported
  *
  * Test for machine features
+ *   -o  report a number of online cpus
  *   -s  report pagesize
  *   -w  report bits per long
  */
@@ -39,6 +40,7 @@
 #include <sys/quota.h>
 #include <sys/resource.h>
 #include <signal.h>
+#include <unistd.h>
 
 #ifdef HAVE_XFS_XQM_H
 #include <xfs/xqm.h>
@@ -64,7 +66,7 @@ usage(void)
 	fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n");
 	fprintf(stderr, "       feature [-v] -c <file>\n");
 	fprintf(stderr, "       feature [-v] -t <file>\n");
-	fprintf(stderr, "       feature -s | -w\n");
+	fprintf(stderr, "       feature -o | -s | -w\n");
 	exit(1);
 }
 
@@ -212,9 +214,10 @@ main(int argc, char **argv)
 	int	uflag = 0;
 	int	Uflag = 0;
 	int	wflag = 0;
+	int	oflag = 0;
 	char	*fs = NULL;
 
-	while ((c = getopt(argc, argv, "ctgGpPqsuUvw")) != EOF) {
+	while ((c = getopt(argc, argv, "ctgGopPqsuUvw")) != EOF) {
 		switch (c) {
 		case 'c':
 			cflag++;
@@ -228,6 +231,9 @@ main(int argc, char **argv)
 		case 'G':
 			Gflag++;
 			break;
+		case 'o':
+			oflag++;
+			break;
 		case 'p':
 			pflag++;
 			break;
@@ -262,7 +268,7 @@ main(int argc, char **argv)
 		if (optind != argc-1)	/* need a device */
 			usage();
 		fs = argv[argc-1];
-	} else if (wflag || sflag) {
+	} else if (wflag || sflag || oflag) {
 		if (optind != argc)
 			usage();
 	} else 
@@ -306,6 +312,25 @@ bozo!
 #endif
 		exit(0);
 	}
+	if (oflag) {
+		long ncpus;
+
+#if defined(_SC_NPROCESSORS_ONLN)
+		/* Linux */
+		ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+#elif defined(_SC_NPROC_ONLN)
+		/* IRIX */
+		ncpus = sysconf(_SC_NPROC_ONLN);
+#else
+		ncpus = 0;
+#endif
+		if (ncpus == -1)
+			ncpus = 0;
+
+		printf("%ld\n", ncpus);
+
+		exit(0);
+	}
 
 	fprintf(stderr, "feature: dunno what you're after.\n");
 	return(1);
-- 
1.7.1

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux