|
Michal Schmidt |
e43452 |
From ae1e1f08b63b11eee857598076dbc5aaa9020032 Mon Sep 17 00:00:00 2001
|
|
Michal Schmidt |
e43452 |
From: Lennart Poettering <lennart@poettering.net>
|
|
Michal Schmidt |
e43452 |
Date: Fri, 30 Dec 2011 15:34:21 +0100
|
|
Michal Schmidt |
f1996e |
Subject: [PATCH] remount-api-vfs: handle another OOM condition (cherry picked
|
|
Michal Schmidt |
f1996e |
from commit adb2ce5f694cb528f9294219941b1e37dc6a9530)
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
---
|
|
Michal Schmidt |
e43452 |
src/remount-api-vfs.c | 23 +++++++++++++++++------
|
|
Michal Schmidt |
e43452 |
1 files changed, 17 insertions(+), 6 deletions(-)
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
diff --git a/src/remount-api-vfs.c b/src/remount-api-vfs.c
|
|
Michal Schmidt |
e43452 |
index 8bbc021..7b14655 100644
|
|
Michal Schmidt |
e43452 |
--- a/src/remount-api-vfs.c
|
|
Michal Schmidt |
e43452 |
+++ b/src/remount-api-vfs.c
|
|
Michal Schmidt |
e43452 |
@@ -54,12 +54,14 @@ int main(int argc, char *argv[]) {
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
umask(0022);
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
- if (!(f = setmntent("/etc/fstab", "r"))) {
|
|
Michal Schmidt |
e43452 |
+ f = setmntent("/etc/fstab", "r");
|
|
Michal Schmidt |
e43452 |
+ if (!f) {
|
|
Michal Schmidt |
e43452 |
log_error("Failed to open /etc/fstab: %m");
|
|
Michal Schmidt |
e43452 |
goto finish;
|
|
Michal Schmidt |
e43452 |
}
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
- if (!(pids = hashmap_new(trivial_hash_func, trivial_compare_func))) {
|
|
Michal Schmidt |
e43452 |
+ pids = hashmap_new(trivial_hash_func, trivial_compare_func);
|
|
Michal Schmidt |
e43452 |
+ if (!pids) {
|
|
Michal Schmidt |
e43452 |
log_error("Failed to allocate set");
|
|
Michal Schmidt |
e43452 |
goto finish;
|
|
Michal Schmidt |
e43452 |
}
|
|
Michal Schmidt |
e43452 |
@@ -76,9 +78,10 @@ int main(int argc, char *argv[]) {
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
log_debug("Remounting %s", me->mnt_dir);
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
- if ((pid = fork()) < 0) {
|
|
Michal Schmidt |
e43452 |
+ pid = fork();
|
|
Michal Schmidt |
e43452 |
+ if (pid < 0) {
|
|
Michal Schmidt |
e43452 |
log_error("Failed to fork: %m");
|
|
Michal Schmidt |
e43452 |
- ret = 1;
|
|
Michal Schmidt |
e43452 |
+ ret = EXIT_FAILURE;
|
|
Michal Schmidt |
e43452 |
continue;
|
|
Michal Schmidt |
e43452 |
}
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
@@ -101,8 +104,15 @@ int main(int argc, char *argv[]) {
|
|
Michal Schmidt |
e43452 |
/* Parent */
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
s = strdup(me->mnt_dir);
|
|
Michal Schmidt |
e43452 |
+ if (!s) {
|
|
Michal Schmidt |
e43452 |
+ log_error("Out of memory.");
|
|
Michal Schmidt |
e43452 |
+ ret = EXIT_FAILURE;
|
|
Michal Schmidt |
e43452 |
+ continue;
|
|
Michal Schmidt |
e43452 |
+ }
|
|
Michal Schmidt |
e43452 |
+
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
- if ((k = hashmap_put(pids, UINT_TO_PTR(pid), s)) < 0) {
|
|
Michal Schmidt |
e43452 |
+ k = hashmap_put(pids, UINT_TO_PTR(pid), s);
|
|
Michal Schmidt |
e43452 |
+ if (k < 0) {
|
|
Michal Schmidt |
e43452 |
log_error("Failed to add PID to set: %s", strerror(-k));
|
|
Michal Schmidt |
e43452 |
ret = EXIT_FAILURE;
|
|
Michal Schmidt |
e43452 |
continue;
|
|
Michal Schmidt |
e43452 |
@@ -124,7 +134,8 @@ int main(int argc, char *argv[]) {
|
|
Michal Schmidt |
e43452 |
break;
|
|
Michal Schmidt |
e43452 |
}
|
|
Michal Schmidt |
e43452 |
|
|
Michal Schmidt |
e43452 |
- if ((s = hashmap_remove(pids, UINT_TO_PTR(si.si_pid)))) {
|
|
Michal Schmidt |
e43452 |
+ s = hashmap_remove(pids, UINT_TO_PTR(si.si_pid));
|
|
Michal Schmidt |
e43452 |
+ if (s) {
|
|
Michal Schmidt |
e43452 |
if (!is_clean_exit(si.si_code, si.si_status)) {
|
|
Michal Schmidt |
e43452 |
if (si.si_code == CLD_EXITED)
|
|
Michal Schmidt |
e43452 |
log_error("/bin/mount for %s exited with exit status %i.", s, si.si_status);
|