Bug 176444
Summary: | chkfontpath should check for running xfs before killing it | ||
---|---|---|---|
Product: | [Fedora] Fedora | Reporter: | Ralf Ertzinger <redhat-bugzilla> |
Component: | chkfontpath | Assignee: | Mike A. Harris <mharris> |
Status: | CLOSED RAWHIDE | QA Contact: | Ben Levenson <benl> |
Severity: | low | Docs Contact: | |
Priority: | medium | ||
Version: | rawhide | ||
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | 1.10.1-1 | Doc Type: | Bug Fix |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2006-02-16 14:03:12 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | |||
Bug Blocks: | 150221 |
Description
Ralf Ertzinger
2005-12-22 21:17:47 UTC
Hrm... Perhaps checking for the pid file, parsing it, and then testing the pid would work better. That would be a bit racey though, and there's no guarantee that the pid pointed to by the pid file is actually still xfs (ie: xfs crashes, some other app runs and gets the same pid) Adding to FC5Target for closer review for FC5. Thanks for the report. "kill -q" does not exist, at least not on FC1 or FC4 on my systems, neither in the manpage nor usage() info for kill Here is the current code: void restartXfs(void) { struct stat st; FILE *pidfile; pid_t pid; char buf[MAXPIDBUF]; /* Make sure /proc is mounted, and /sbin/pidof exists */ if ((stat("/proc/version", &st) == 0) && (stat("/sbin/pidof", &st) == 0)) { system("kill -USR1 `/sbin/pidof xfs` 2>&1 >/dev/null"); /* If not, then test if xfs subsystem is locked, and there is a pid file */ } else if ((stat(XFS_SUBSYSLOCK, &st) == 0) && (stat(XFS_PIDFILE, &st) == 0)) { if (NULL != (pidfile = fopen(XFS_PIDFILE, "r"))) { fgets(buf, sizeof(buf), pidfile); fclose(pidfile); if(NULL != buf) pid = (pid_t) atol(buf); if(pid > 1) kill(pid, SIGUSR1); } } } The current method favours invoking the kill command if /proc is mounted, so that it's getting the PID of a running xfs server, but falls back to using the xfs pid file if /proc is not mounted, so it seems it already can do what I suggested in comment #1, but only if /proc isn't there. It appears the problem is due to the ordering of the commandline passed to kill: system("kill -USR1 `/sbin/pidof xfs` 2>&1 >/dev/null"); should instead be: system("kill -USR1 `/sbin/pidof xfs` >/dev/null 2>&1"); Example: pts/7 mharris@laser:/tmp/xfs-1.0.1/os$ ls io.c sdfasdf /bin/ls: sdfasdf: No such file or directory io.c pts/7 mharris@laser:/tmp/xfs-1.0.1/os$ ls io.c sdfasdf 2>&1 >/dev/null /bin/ls: sdfasdf: No such file or directory pts/7 mharris@laser:/tmp/xfs-1.0.1/os$ ls io.c sdfasdf >/dev/null 2>&1 pts/7 mharris@laser:/tmp/xfs-1.0.1/os$ I'm committing this change to chkfontpath CVS, and it'll be in the next build. Fixed in 1.10.1-1 and built in rawhide. The "-q" is valid for killall only. But if a simple reordering of output redirections has the same effect that's fine, too. |