nfs-blkmapd: PID file read by systemd failed
This commit is contained in:
parent
d11e300a03
commit
97c364ccf7
94
0005-nfs-blkmapd-PID-file-read-by-systemd-failed.patch
Normal file
94
0005-nfs-blkmapd-PID-file-read-by-systemd-failed.patch
Normal file
@ -0,0 +1,94 @@
|
||||
From 9565ab64e60f8282967e138f43c6057562dc5c27 Mon Sep 17 00:00:00 2001
|
||||
From: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
Date: Sat, 19 Nov 2022 11:50:07 -0500
|
||||
Subject: [PATCH] nfs-blkmapd: PID file read by systemd failed
|
||||
|
||||
When started nfs-blkmap.service, the PID file can't be opened, The
|
||||
cause is that the child process does not create the PID file before
|
||||
the systemd reads the PID file.
|
||||
|
||||
Adding "ExecStartPost=/bin/sleep 0.1" to
|
||||
/usr/lib/systemd/system/nfs-blkmap.service will probably solve this
|
||||
problem, However, there is no guarantee that the above solutions are
|
||||
effective under high cpu pressure.So replace the daemon function with
|
||||
the fork function, and put the behavior of creating the PID file in
|
||||
the parent process to solve the above problems.
|
||||
|
||||
Signed-off-by: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
utils/blkmapd/device-discovery.c | 48 ++++++++++++++++++++++++++--------------
|
||||
1 file changed, 32 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
||||
index bd89059..a565fdb 100644
|
||||
--- a/utils/blkmapd/device-discovery.c
|
||||
+++ b/utils/blkmapd/device-discovery.c
|
||||
@@ -504,28 +504,44 @@ int main(int argc, char **argv)
|
||||
if (fg) {
|
||||
openlog("blkmapd", LOG_PERROR, 0);
|
||||
} else {
|
||||
- if (daemon(0, 0) != 0) {
|
||||
- fprintf(stderr, "Daemonize failed\n");
|
||||
- exit(1);
|
||||
+ pid_t pid = fork();
|
||||
+ if (pid < 0) {
|
||||
+ BL_LOG_ERR("fork error\n");
|
||||
+ exit(1);
|
||||
+ } else if (pid != 0) {
|
||||
+ pidfd = open(PID_FILE, O_WRONLY | O_CREAT, 0644);
|
||||
+ if (pidfd < 0) {
|
||||
+ BL_LOG_ERR("Create pid file %s failed\n", PID_FILE);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (lockf(pidfd, F_TLOCK, 0) < 0) {
|
||||
+ BL_LOG_ERR("Already running; Exiting!");
|
||||
+ close(pidfd);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ if (ftruncate(pidfd, 0) < 0)
|
||||
+ BL_LOG_ERR("ftruncate on %s failed: m\n", PID_FILE);
|
||||
+ sprintf(pidbuf, "%d\n", pid);
|
||||
+ if (write(pidfd, pidbuf, strlen(pidbuf)) != (ssize_t)strlen(pidbuf))
|
||||
+ BL_LOG_ERR("write on %s failed: m\n", PID_FILE);
|
||||
+ exit(0);
|
||||
+ }
|
||||
+
|
||||
+ (void)setsid();
|
||||
+ if (chdir("/")) {
|
||||
+ BL_LOG_ERR("chdir error\n");
|
||||
+ }
|
||||
+ int fd = open("/dev/null", O_RDWR, 0);
|
||||
+ if (fd >= 0) {
|
||||
+ (void)dup2(fd, STDIN_FILENO);
|
||||
+ (void)dup2(fd, STDOUT_FILENO);
|
||||
+ (void)dup2(fd, STDERR_FILENO);
|
||||
+
|
||||
+ (void)close(fd);
|
||||
}
|
||||
|
||||
openlog("blkmapd", LOG_PID, 0);
|
||||
- pidfd = open(PID_FILE, O_WRONLY | O_CREAT, 0644);
|
||||
- if (pidfd < 0) {
|
||||
- BL_LOG_ERR("Create pid file %s failed\n", PID_FILE);
|
||||
- exit(1);
|
||||
- }
|
||||
-
|
||||
- if (lockf(pidfd, F_TLOCK, 0) < 0) {
|
||||
- BL_LOG_ERR("Already running; Exiting!");
|
||||
- close(pidfd);
|
||||
- exit(1);
|
||||
- }
|
||||
- if (ftruncate(pidfd, 0) < 0)
|
||||
- BL_LOG_WARNING("ftruncate on %s failed: m\n", PID_FILE);
|
||||
- sprintf(pidbuf, "%d\n", getpid());
|
||||
- if (write(pidfd, pidbuf, strlen(pidbuf)) != (ssize_t)strlen(pidbuf))
|
||||
- BL_LOG_WARNING("write on %s failed: m\n", PID_FILE);
|
||||
}
|
||||
|
||||
signal(SIGINT, sig_die);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
Name: nfs-utils
|
||||
Version: 2.6.2
|
||||
Release: 2
|
||||
Release: 3
|
||||
Epoch: 2
|
||||
Summary: The Linux NFS userland utility package
|
||||
License: MIT and GPLv2 and GPLv2+ and BSD
|
||||
@ -17,6 +17,7 @@ Patch1: 0001-correct-the-statd-path-in-man.patch
|
||||
Patch2: 0002-nfs-utils-set-use-gss-proxy-1-to-enable-gss-proxy-by.patch
|
||||
Patch3: 0003-fix-coredump-in-bl_add_disk.patch
|
||||
Patch4: 0004-nfs-blkmaped-Fix-the-error-status-when-nfs_blkmapd-s.patch
|
||||
Patch5: 0005-nfs-blkmapd-PID-file-read-by-systemd-failed.patch
|
||||
BuildRequires: libevent-devel,libcap-devel, libtirpc-devel libblkid-devel
|
||||
BuildRequires: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2
|
||||
BuildRequires: automake, libtool, gcc, device-mapper-devel
|
||||
@ -288,6 +289,9 @@ fi
|
||||
%{_mandir}/*/*
|
||||
|
||||
%changelog
|
||||
* Mon Nov 21 2022 fangchuang <fangchuangchuang@huawei.com> - 2:2.6.2-3
|
||||
- nfs-blkmapd: PID file read by systemd failed
|
||||
|
||||
* Mon Oct 24 2022 fushanqing <fushanqing@kylinos.cn> - 2:2.6.2-2
|
||||
- add subpackage libnfsidmap and nfs-utils-min
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user