[rhel6-branch] Let tmp use more than 250M when there is more RAM (#1123791)

Brian C. Lane bcl at redhat.com
Wed Aug 20 00:12:54 UTC 2014


There are 2 potential problems related to tmpfs size on /tmp. bug 540146
addressed part of it, making sure /tmp is at least 250M.

1. On small systems it may be < 250M if there is less than 500M of RAM.
   This can cause a crash because there isn't enough space for install.img

2. On large systems with lots of RAM it doesn't take advantage of the
   extra RAM and may run out of /tmp space when using large numbers of
   disks and/or driver disks.

This patch checks the total memory available and sets the /tmp size to
250M if the available RAM is < 512M. Otherwise it will let it use 50%
of the available RAM.

Resolves: rhbz#1123791
---
 loader/Makefile.am |  3 ++-
 loader/init.c      | 16 ++++++++++++++--
 loader/init.h      |  3 +++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/loader/Makefile.am b/loader/Makefile.am
index 9a2352c..9a080fc 100644
--- a/loader/Makefile.am
+++ b/loader/Makefile.am
@@ -56,7 +56,8 @@ loader_SOURCES     = loader.c copy.c log.c moduleinfo.c loadermisc.c \
 
 init_CFLAGS        = $(COMMON_CFLAGS) $(GLIB_CFLAGS)
 init_LDADD	   = $(GLIB_LIBS)
-init_SOURCES       = init.c undomounts.c shutdown.c copy.c modules.c log.c
+init_SOURCES       = init.c undomounts.c shutdown.c copy.c modules.c log.c \
+                     totalmemory.c
 
 shutdown_CFLAGS    = $(COMMON_CFLAGS) -DAS_SHUTDOWN=1
 shutdown_SOURCES   = shutdown.c undomounts.c
diff --git a/loader/init.c b/loader/init.c
index 53b7a15..f54023d 100644
--- a/loader/init.c
+++ b/loader/init.c
@@ -64,6 +64,7 @@
 #include "devices.h"
 #include "modules.h"
 #include "log.h"
+#include "totalmemory.h"
 
 #endif
 
@@ -759,8 +760,19 @@ int main(int argc, char **argv) {
 
     printf("mounting /tmp as tmpfs... ");
     fflush(stdout);
-    if (mount("none", "/tmp", "tmpfs", 0, "size=250m"))
-        fatal_error(1);
+
+    /* On systems with small memory tmpfs needs to be at least 250M so that
+     * there is space for install.img and the logs.
+     * On larger systems it should be 50% of available RAM so that there is
+     * room for more logs, driver disks, etc.
+     */
+    if (totalMemory() < MIN_TMPFS_RAM) {
+        if (mount("none", "/tmp", "tmpfs", 0, "size=250m"))
+            fatal_error(1);
+    } else {
+        if (mount("none", "/tmp", "tmpfs", 0, "size=50%"))
+            fatal_error(1);
+    }
     printf("done\n");
 
     copyDirectory("/oldtmp", "/tmp", copyErrorFn, copyErrorFn);
diff --git a/loader/init.h b/loader/init.h
index e1e5b70..9e8e9de 100644
--- a/loader/init.h
+++ b/loader/init.h
@@ -28,4 +28,7 @@ typedef enum {
         DELAYED_REBOOT
 } reboot_action;
 
+/* When there is less than this amount of ram, set the tmpfs size to 250M */
+#define MIN_TMPFS_RAM   524288
+
 #endif /* INIT_H */
-- 
1.9.3



More information about the anaconda-patches mailing list