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. |