X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vswitchd%2Fsystem-stats.c;h=842bc204ac7c6e726130cb842dcdc8a914ebe9c3;hb=f40869bdf6feca4d3ff7c59a1fb1f7ac101bc967;hp=e0937a3931b5570326e5fcd2e9bb99e55faa689c;hpb=e368cad8ecf6dbf272b2a3775b2e3e5e2dc6a5cf;p=sliver-openvswitch.git diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c index e0937a393..842bc204a 100644 --- a/vswitchd/system-stats.c +++ b/vswitchd/system-stats.c @@ -17,7 +17,6 @@ #include "system-stats.h" -#include #include #include #include @@ -48,13 +47,12 @@ VLOG_DEFINE_THIS_MODULE(system_stats); /* #ifdefs make it a pain to maintain code: you have to try to build both ways. * Thus, this file tries to compile as much of the code as possible regardless - * of the target, by writing "if (LINUX)" instead of "#ifdef __linux__" where - * this is possible. */ -#ifdef __linux__ + * of the target, by writing "if (LINUX_DATAPATH)" instead of "#ifdef + * __linux__" where this is possible. */ +#ifdef LINUX_DATAPATH #include -#define LINUX 1 #else -#define LINUX 0 +#define LINUX_DATAPATH 0 #endif static void @@ -97,9 +95,13 @@ get_page_size(void) static void get_memory_stats(struct smap *stats) { - if (!LINUX) { + if (!LINUX_DATAPATH) { unsigned int pagesize = get_page_size(); +#ifdef _SC_PHYS_PAGES long int phys_pages = sysconf(_SC_PHYS_PAGES); +#else + long int phys_pages = 0; +#endif #ifdef _SC_AVPHYS_PAGES long int avphys_pages = sysconf(_SC_AVPHYS_PAGES); #else @@ -170,7 +172,7 @@ get_boot_time(void) static long long int cache_expiration = LLONG_MIN; static long long int boot_time; - assert(LINUX); + ovs_assert(LINUX_DATAPATH); if (time_msec() >= cache_expiration) { static const char stat_file[] = "/proc/stat"; @@ -202,7 +204,7 @@ get_boot_time(void) static unsigned long long int ticks_to_ms(unsigned long long int ticks) { - assert(LINUX); + ovs_assert(LINUX_DATAPATH); #ifndef USER_HZ #define USER_HZ 100 @@ -235,7 +237,7 @@ get_raw_process_info(pid_t pid, struct raw_process_info *raw) FILE *stream; int n; - assert(LINUX); + ovs_assert(LINUX_DATAPATH); sprintf(file_name, "/proc/%lu/stat", (unsigned long int) pid); stream = fopen(file_name, "r"); @@ -320,7 +322,7 @@ count_crashes(pid_t pid) int crashes = 0; FILE *stream; - assert(LINUX); + ovs_assert(LINUX_DATAPATH); sprintf(file_name, "/proc/%lu/cmdline", (unsigned long int) pid); stream = fopen(file_name, "r"); @@ -363,7 +365,7 @@ get_process_info(pid_t pid, struct process_info *pinfo) { struct raw_process_info child; - assert(LINUX); + ovs_assert(LINUX_DATAPATH); if (!get_raw_process_info(pid, &child)) { return false; } @@ -428,7 +430,7 @@ get_process_stats(struct smap *stats) key = xasprintf("process_%.*s", (int) (extension - de->d_name), de->d_name); if (!smap_get(stats, key)) { - if (LINUX && get_process_info(pid, &pinfo)) { + if (LINUX_DATAPATH && get_process_info(pid, &pinfo)) { smap_add_format(stats, key, "%lu,%lu,%lld,%d,%lld,%lld", pinfo.vsz, pinfo.rss, pinfo.cputime, pinfo.crashes, pinfo.booted, pinfo.uptime); @@ -445,9 +447,11 @@ get_process_stats(struct smap *stats) static void get_filesys_stats(struct smap *stats OVS_UNUSED) { -#if HAVE_SETMNTENT && HAVE_STATVFS +#if HAVE_GETMNTENT_R && HAVE_STATVFS static const char file_name[] = "/etc/mtab"; + struct mntent mntent; struct mntent *me; + char buf[4096]; FILE *stream; struct ds s; @@ -458,7 +462,7 @@ get_filesys_stats(struct smap *stats OVS_UNUSED) } ds_init(&s); - while ((me = getmntent(stream)) != NULL) { + while ((me = getmntent_r(stream, &mntent, buf, sizeof buf)) != NULL) { unsigned long long int total, free; struct statvfs vfs; char *p; @@ -492,7 +496,7 @@ get_filesys_stats(struct smap *stats OVS_UNUSED) smap_add(stats, "file_systems", ds_cstr(&s)); } ds_destroy(&s); -#endif /* HAVE_SETMNTENT && HAVE_STATVFS */ +#endif /* HAVE_GETMNTENT_R && HAVE_STATVFS */ } #define SYSTEM_STATS_INTERVAL (5 * 1000) /* In milliseconds. */ @@ -641,7 +645,7 @@ system_stats_reply_cb(struct ofpbuf *reply, smap_init(received_stats); smap_from_json(received_stats, json); - assert(state == S_REQUEST_SENT); + ovs_assert(state == S_REQUEST_SENT); state = S_REPLY_RECEIVED; json_destroy(json);