!66 nfs-blkmapd: PID file read by systemd failed
From: @fangchuang Reviewed-by: @liuzhiqiang26 Signed-off-by: @liuzhiqiang26
This commit is contained in:
commit
18a6069664
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
|
Name: nfs-utils
|
||||||
Version: 2.6.2
|
Version: 2.6.2
|
||||||
Release: 2
|
Release: 3
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Summary: The Linux NFS userland utility package
|
Summary: The Linux NFS userland utility package
|
||||||
License: MIT and GPLv2 and GPLv2+ and BSD
|
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
|
Patch2: 0002-nfs-utils-set-use-gss-proxy-1-to-enable-gss-proxy-by.patch
|
||||||
Patch3: 0003-fix-coredump-in-bl_add_disk.patch
|
Patch3: 0003-fix-coredump-in-bl_add_disk.patch
|
||||||
Patch4: 0004-nfs-blkmaped-Fix-the-error-status-when-nfs_blkmapd-s.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: libevent-devel,libcap-devel, libtirpc-devel libblkid-devel
|
||||||
BuildRequires: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2
|
BuildRequires: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2
|
||||||
BuildRequires: automake, libtool, gcc, device-mapper-devel
|
BuildRequires: automake, libtool, gcc, device-mapper-devel
|
||||||
@ -288,6 +289,9 @@ fi
|
|||||||
%{_mandir}/*/*
|
%{_mandir}/*/*
|
||||||
|
|
||||||
%changelog
|
%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
|
* Mon Oct 24 2022 fushanqing <fushanqing@kylinos.cn> - 2:2.6.2-2
|
||||||
- add subpackage libnfsidmap and nfs-utils-min
|
- add subpackage libnfsidmap and nfs-utils-min
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user