diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-25 16:20:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-25 16:20:34 +0000 |
commit | d970b407fc0f4fba35fc31aab80ea6ea69788a52 (patch) | |
tree | 491e11b95bf9ea1a3fb1e6a886a65b8491cf9841 /raid6check.c | |
parent | Adding debian version 4.2-5. (diff) | |
download | mdadm-d970b407fc0f4fba35fc31aab80ea6ea69788a52.tar.xz mdadm-d970b407fc0f4fba35fc31aab80ea6ea69788a52.zip |
Merging upstream version 4.2+20230223.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'raid6check.c')
-rw-r--r-- | raid6check.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/raid6check.c b/raid6check.c index a8e6005..9947776 100644 --- a/raid6check.c +++ b/raid6check.c @@ -24,7 +24,6 @@ #include "mdadm.h" #include <stdint.h> -#include <signal.h> #include <sys/mman.h> #define CHECK_PAGE_BITS (12) @@ -130,30 +129,36 @@ void raid6_stats(int *disk, int *results, int raid_disks, int chunk_size) } int lock_stripe(struct mdinfo *info, unsigned long long start, - int chunk_size, int data_disks, sighandler_t *sig) { + int chunk_size, int data_disks, sighandler_t *sig) +{ int rv; + + sig[0] = signal_s(SIGTERM, SIG_IGN); + sig[1] = signal_s(SIGINT, SIG_IGN); + sig[2] = signal_s(SIGQUIT, SIG_IGN); + + if (sig[0] == SIG_ERR || sig[1] == SIG_ERR || sig[2] == SIG_ERR) + return 1; + if(mlockall(MCL_CURRENT | MCL_FUTURE) != 0) { return 2; } - sig[0] = signal(SIGTERM, SIG_IGN); - sig[1] = signal(SIGINT, SIG_IGN); - sig[2] = signal(SIGQUIT, SIG_IGN); - rv = sysfs_set_num(info, NULL, "suspend_lo", start * chunk_size * data_disks); rv |= sysfs_set_num(info, NULL, "suspend_hi", (start + 1) * chunk_size * data_disks); return rv * 256; } -int unlock_all_stripes(struct mdinfo *info, sighandler_t *sig) { +int unlock_all_stripes(struct mdinfo *info, sighandler_t *sig) +{ int rv; rv = sysfs_set_num(info, NULL, "suspend_lo", 0x7FFFFFFFFFFFFFFFULL); rv |= sysfs_set_num(info, NULL, "suspend_hi", 0); rv |= sysfs_set_num(info, NULL, "suspend_lo", 0); - signal(SIGQUIT, sig[2]); - signal(SIGINT, sig[1]); - signal(SIGTERM, sig[0]); + signal_s(SIGQUIT, sig[2]); + signal_s(SIGINT, sig[1]); + signal_s(SIGTERM, sig[0]); if(munlockall() != 0) return 3; |