1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-28 20:25:25 +03:00

bootchart: more fixes for bootchart in the initramfs

This commit is contained in:
Harald Hoyer 2013-02-14 11:26:05 +01:00 committed by Auke Kok
parent 1fd961211d
commit b823b5e272
3 changed files with 21 additions and 5 deletions

View File

@ -23,6 +23,7 @@
#include <sys/time.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/stat.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
@ -32,6 +33,7 @@
#include <getopt.h>
#include <limits.h>
#include <errno.h>
#include <fcntl.h>
#include "bootchart.h"
@ -51,6 +53,7 @@ double interval;
FILE *of = NULL;
int overrun = 0;
static int exiting = 0;
int sysfd=-1;
/* graph defaults */
int entropy = 0;
@ -273,6 +276,9 @@ int main(int argc, char *argv[])
of = fopen(output_file, "w");
}
if (sysfd < 0) {
sysfd = open("/sys", O_RDONLY);
}
/* wait for /proc to become available, discarding samples */
if (!(graph_start > 0.0))
@ -331,7 +337,6 @@ int main(int argc, char *argv[])
if (ps->smaps)
fclose(ps->smaps);
}
closedir(proc);
if (!of) {
t = time(NULL);
@ -350,6 +355,9 @@ int main(int argc, char *argv[])
fprintf(stderr, "bootchartd: Wrote %s\n", output_file);
fclose(of);
closedir(proc);
close(sysfd);
/* nitpic cleanups */
ps = ps_first;
while (ps->next_ps) {

View File

@ -117,6 +117,8 @@ extern char init_path[PATH_MAX];
extern FILE *of;
extern DIR *proc;
extern int procfd;
extern int sysfd;
extern double gettime_ns(void);
extern void log_uptime(void);

View File

@ -28,6 +28,8 @@
#include <limits.h>
#include <unistd.h>
#include <sys/utsname.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "bootchart.h"
#include "util.h"
@ -151,10 +153,12 @@ static void svg_title(void)
char *c;
FILE *f;
time_t t;
int fd;
struct utsname uts;
/* grab /proc/cmdline */
f = fopen("/proc/cmdline", "r");
fd = openat(procfd, "cmdline", O_RDONLY);
f = fdopen(fd, "r");
if (f) {
if (!fgets(cmdline, 255, f))
sprintf(cmdline, "Unknown");
@ -167,8 +171,9 @@ static void svg_title(void)
strncpy(rootbdev, &c[10], 3);
rootbdev[3] = '\0';
}
sprintf(filename, "/sys/block/%s/device/model", rootbdev);
f = fopen(filename, "r");
sprintf(filename, "block/%s/device/model", rootbdev);
fd = openat(sysfd, filename, O_RDONLY);
f = fdopen(fd, "r");
if (f) {
if (!fgets(model, 255, f))
fprintf(stderr, "Error reading disk model for %s\n", rootbdev);
@ -184,7 +189,8 @@ static void svg_title(void)
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", localtime(&t));
/* CPU type */
f = fopen("/proc/cpuinfo", "r");
fd = openat(procfd, "cpuinfo", O_RDONLY);
f = fdopen(fd, "r");
if (f) {
while (fgets(buf, 255, f)) {
if (strstr(buf, "model name")) {