aboutsummaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorlandley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277>2005-08-30 18:50:37 +0000
committerlandley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277>2005-08-30 18:50:37 +0000
commitf3e0225aa10da15956b2555ede02efbe4e1cd464 (patch)
treee16eabe2df3ef6680f7d2f41a72b883b19f8e2dd /init
parent9b3aaab75bcbbd6f9f0651a99651a8b552ee9c95 (diff)
downloadbusybox-w32-f3e0225aa10da15956b2555ede02efbe4e1cd464.tar.gz
busybox-w32-f3e0225aa10da15956b2555ede02efbe4e1cd464.tar.bz2
busybox-w32-f3e0225aa10da15956b2555ede02efbe4e1cd464.zip
Why have a separate CONFIG_INIT_SWAPON when we already have CONFIG_SWAPONOFF?
git-svn-id: svn://busybox.net/trunk/busybox@11291 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'init')
-rw-r--r--init/Config.in8
-rw-r--r--init/init.c78
2 files changed, 14 insertions, 72 deletions
diff --git a/init/Config.in b/init/Config.in
index a3584aaf5..91d990c38 100644
--- a/init/Config.in
+++ b/init/Config.in
@@ -35,14 +35,6 @@ config CONFIG_FEATURE_INIT_COREDUMPS
35 core file sizes. If this option is disabled, processes 35 core file sizes. If this option is disabled, processes
36 will not generate any core files. 36 will not generate any core files.
37 37
38config CONFIG_FEATURE_INIT_SWAPON
39 bool " Should init run swapon if short on memory?"
40 default y
41 depends on CONFIG_INIT
42 help
43 If the system has less than one megabyte of total memory, init
44 will run '/sbin/swapon -a' to add swap memory.
45
46config CONFIG_FEATURE_INIT_SCTTY 38config CONFIG_FEATURE_INIT_SCTTY
47 bool " Support running commands with a controlling-tty?" 39 bool " Support running commands with a controlling-tty?"
48 default n 40 default n
diff --git a/init/init.c b/init/init.c
index 7656bf334..058a47a83 100644
--- a/init/init.c
+++ b/init/init.c
@@ -308,37 +308,6 @@ static void set_term(int fd)
308 tcsetattr(fd, TCSANOW, &tty); 308 tcsetattr(fd, TCSANOW, &tty);
309} 309}
310 310
311#ifdef CONFIG_FEATURE_INIT_SWAPON
312/* How much memory does this machine have?
313 Units are kBytes to avoid overflow on 4GB machines */
314static unsigned int check_free_memory(void)
315{
316 struct sysinfo info;
317 unsigned int result, u, s = 10;
318
319 if (sysinfo(&info) != 0) {
320 bb_perror_msg("Error checking free memory");
321 return -1;
322 }
323
324 /* Kernels 2.0.x and 2.2.x return info.mem_unit==0 with values in bytes.
325 * Kernels 2.4.0 return info.mem_unit in bytes. */
326 u = info.mem_unit;
327 if (u == 0)
328 u = 1;
329 while ((u & 1) == 0 && s > 0) {
330 u >>= 1;
331 s--;
332 }
333 result = (info.totalram >> s) + (info.totalswap >> s);
334 if (((unsigned long long)result * (unsigned long long)u) > UINT_MAX) {
335 return(UINT_MAX);
336 } else {
337 return(result * u);
338 }
339}
340#endif /* CONFIG_FEATURE_INIT_SWAPON */
341
342static void console_init(void) 311static void console_init(void)
343{ 312{
344 int fd; 313 int fd;
@@ -918,38 +887,6 @@ static void delete_init_action(struct init_action *action)
918 } 887 }
919} 888}
920 889
921#ifdef CONFIG_FEATURE_INIT_SWAPON
922/* Make sure there is enough memory to do something useful. *
923 * Calls "swapon -a" if needed so be sure /etc/fstab is present... */
924static void check_memory(void)
925{
926 struct stat statBuf;
927
928 if (check_free_memory() > 1000)
929 return;
930
931#if !defined(__UCLIBC__) || defined(__ARCH_HAS_MMU__)
932 if (stat("/etc/fstab", &statBuf) == 0) {
933 /* swapon -a requires /proc typically */
934 new_init_action(SYSINIT, "/bin/mount -t proc proc /proc", "");
935 /* Try to turn on swap */
936 new_init_action(SYSINIT, "/sbin/swapon -a", "");
937 run_actions(SYSINIT); /* wait and removing */
938 if (check_free_memory() < 1000)
939 goto goodnight;
940 } else
941 goto goodnight;
942 return;
943#endif
944
945 goodnight:
946 message(CONSOLE, "Sorry, your computer does not have enough memory.");
947 loop_forever();
948}
949#else
950# define check_memory()
951#endif /* CONFIG_FEATURE_INIT_SWAPON */
952
953/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, 890/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
954 * then parse_inittab() simply adds in some default 891 * then parse_inittab() simply adds in some default
955 * actions(i.e., runs INIT_SCRIPT and then starts a pair 892 * actions(i.e., runs INIT_SCRIPT and then starts a pair
@@ -1149,7 +1086,20 @@ extern int init_main(int argc, char **argv)
1149 message(MAYBE_CONSOLE | LOG, "init started: %s", bb_msg_full_version); 1086 message(MAYBE_CONSOLE | LOG, "init started: %s", bb_msg_full_version);
1150 1087
1151 /* Make sure there is enough memory to do something useful. */ 1088 /* Make sure there is enough memory to do something useful. */
1152 check_memory(); 1089 if (ENABLE_SWAPONOFF) {
1090 struct sysinfo info;
1091
1092 if (!sysinfo(&info) &&
1093 (info.mem_unit ? : 1) * (long long)info.totalram < MEGABYTE)
1094 {
1095 message(CONSOLE,"Low memory: forcing swapon.");
1096 /* swapon -a requires /proc typically */
1097 new_init_action(SYSINIT, "/bin/mount -t proc proc /proc", "");
1098 /* Try to turn on swap */
1099 new_init_action(SYSINIT, "/sbin/swapon -a", "");
1100 run_actions(SYSINIT); /* wait and removing */
1101 }
1102 }
1153 1103
1154 /* Check if we are supposed to be in single user mode */ 1104 /* Check if we are supposed to be in single user mode */
1155 if (argc > 1 && (!strcmp(argv[1], "single") || 1105 if (argc > 1 && (!strcmp(argv[1], "single") ||