Hello,

Here you are (of course it is just 1/3 of the original patch).
---
diff --git a/initd/early.c b/initd/early.c
index a9f6afb..b4a375f 100644
--- a/initd/early.c
+++ b/initd/early.c
@@ -12,34 +12,130 @@
  * GNU General Public License for more details.
  */
 
-#include <sys/mount.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <stdio.h>
+#include <errno.h>
 #include <fcntl.h>
-#include <unistd.h>
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
 
 #include "../log.h"
 #include "init.h"
 
+static long
+check_ramsize(void)
+{
+       FILE *fp;
+       char line[256];
+       char *key;
+       long val = 0;
+
+       fp = fopen("/proc/meminfo", "r");
+       if(fp == NULL)
+       {
+               ERROR("Can't open /proc/meminfo: %s\n", strerror(errno));
+               return errno;
+       }
+
+       while(fgets(line, sizeof(line), fp))
+       {
+               key = strtok(line, ":");
+               val = atol(strtok(NULL, " kB\n"));
+
+               if (!key || !val)
+                       continue;
+
+               if (!strcasecmp(key, "MemTotal"))
+                       break;
+       }
+
+       fclose(fp);
+
+       return val;
+}
+
+static int
+mount_zram_on_tmp(void)
+{
+       FILE *fp;
+       long zramsize = (check_ramsize() / 2);
+       pid_t pid;
+
+       if(!zramsize)
+       {
+               ERROR("Can't read size of RAM. Assuming 16 MB.\n");
+               zramsize = 8192;
+       }
+
+       fp = fopen("/sys/block/zram0/disksize", "r+");
+       if(fp == NULL)
+       {
+               ERROR("Can't open /sys/block/zram0/disksize: %s\n", 
strerror(errno));
+               return errno;
+       }
+
+       fprintf(fp, "%ld", (zramsize * 1024));
+
+       fclose(fp);
+
+       pid = fork();
+
+       if (!pid)
+       {
+               char *mkfs[] = { "/sbin/mke2fs", "-b", "4096", "-F", "-L", 
"TEMP", "-m", "0", "/dev/zram0", NULL };
+               int fd = open("/dev/null", O_RDWR);
+
+               if (fd > -1) {
+                       dup2(fd, STDIN_FILENO);
+                       dup2(fd, STDOUT_FILENO);
+                       dup2(fd, STDERR_FILENO);
+                       if (fd > STDERR_FILENO)
+                               close(fd);
+               }
+
+               execvp(mkfs[0], mkfs);
+               ERROR("Can't exec /sbin/mke2fs\n");
+               exit(-1);
+       }
+
+       if (pid <= 0)
+       {
+               ERROR("Can't exec /sbin/mke2fs\n");
+               return -1;
+       } else {
+               waitpid(pid, NULL, 0);
+       }
+
+       if(mount("/dev/zram0", "/tmp", "ext2", MS_NOSUID | MS_NODEV | 
MS_NOATIME, "check=none,errors=continue,noquota") < 0)
+       {
+               ERROR("Can't mount /dev/zram0 on /tmp: %s\n", strerror(errno));
+               return errno;
+       }
+
+       LOG("Using up to %ld kB of RAM as ZRAM storage on /mnt\n", zramsize);
+       return 0;
+}
+
 static void
-early_mounts(void)
+mount_tmpfs_on_tmp(void)
 {
-       mount("proc", "/proc", "proc", MS_NOATIME, 0);
-       mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0);
+       char line[256];
+       long tmpfssize = (check_ramsize() / 2);
 
-       mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV | MS_NOATIME, 
NULL);
-       mkdir("/tmp/run", 0777);
-       mkdir("/tmp/lock", 0777);
-       mkdir("/tmp/state", 0777);
-       symlink("/tmp", "/var");
+       if(!tmpfssize)
+       {
+               ERROR("Can't read size of RAM. Assuming 16 MB.\n");
+               tmpfssize = 8192;
+       }
 
-       mount("tmpfs", "/dev", "tmpfs", MS_NOATIME, "mode=0755,size=512K");
-       mkdir("/dev/shm", 0755);
-       mkdir("/dev/pts", 0755);
-       mount("devpts", "/dev/pts", "devpts", MS_NOATIME, "mode=600");
+       snprintf(line, 256, "size=%ldk", tmpfssize);
+       mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV | MS_NOATIME, 
line);
+       LOG("Using up to %ld kB of RAM as TMPFS storage on /tmp\n", tmpfssize);
 }
 
 static void
@@ -50,6 +146,25 @@ early_dev(void)
 }
 
 static void
+early_mounts(void)
+{
+       mount("proc", "/proc", "proc", MS_NOATIME, 0);
+       mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0);
+       mount("tmpfs", "/dev", "tmpfs", MS_NOATIME, "mode=0755,size=512K");
+       mkdir("/dev/shm", 0755);
+       mkdir("/dev/pts", 0755);
+       mount("devpts", "/dev/pts", "devpts", MS_NOATIME, "mode=600");
+       early_dev();
+
+       if(mount_zram_on_tmp() !=0)
+               mount_tmpfs_on_tmp();
+       mkdir("/tmp/run", 0777);
+       mkdir("/tmp/lock", 0777);
+       mkdir("/tmp/state", 0777);
+       symlink("/tmp", "/var");
+}
+
+static void
 early_console(const char *dev)
 {
        struct stat s;
@@ -89,7 +204,6 @@ early(void)
                return;
 
        early_mounts();
-       early_dev();
        early_env();
        early_console("/dev/console");
 


W dniu 22.10.2014 o 09:38, John Crispin pisze:
> Hi,
> 
> please send patches directly against the procd git tree.
> 
>       John
> 
> On 22/10/2014 09:20, Tomasz Wasiak wrote:
>> Devices with less memory are still common so why limit ZRAM usage
>> just to swap when it could be very useful as for /tmp storage.
>>
>> This patch changes 3 things: - sets default number of ZRAM devices
>> to 2 (1st for /tmp, 2nd for swap) - adds ZRAM (default) support to
>> procd's init (TMPFS is used when ZRAM is not available - changes
>> zram-swap so it will use /dev/zram1 for 1st CPU, /dev/zram2 for
>> 2nd and so on as /dev/zram0 is in use for /tmp.
>>
>> Signed-off-by: Tomasz Wasiak <tjwas...@gmail.com> --- 
>> package/system/procd/patches/procd-support_for_tmp_on_zram.patch
>> |  185 ++++++++++ package/system/zram-swap/files/zram.init
>> |   15 
>> target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch
>> |   11 3 files changed, 203 insertions(+), 8 deletions(-)
>>
>> ---
>> a/package/system/procd/patches/procd-support_for_tmo_on_zram.patch 
>> +++
>> b/package/system/procd/patches/procd-support_for_tmp_on_zram.patch 
>> @@ -0,0 +1,185 @@ +--- a/initd/early.c ++++ b/initd/early.c +@@
>> -12,34 +12,130 @@ +  * GNU General Public License for more
>> details. +  */ + +-#include <sys/mount.h> +-#include <sys/types.h> 
>> +-#include <sys/stat.h> +- +-#include <stdio.h> ++#include
>> <errno.h> + #include <fcntl.h> +-#include <unistd.h> ++#include
>> <stdio.h> + #include <stdlib.h> ++#include <string.h> ++#include
>> <strings.h> ++#include <unistd.h> ++#include <sys/mount.h> 
>> ++#include <sys/stat.h> ++#include <sys/types.h> ++#include
>> <sys/wait.h> + + #include "../log.h" + #include "init.h" + ++static
>> long ++check_ramsize(void) ++{ ++    FILE *fp; ++    char line[256]; ++
>> char *key; ++        long val = 0; ++ ++     fp = fopen("/proc/meminfo",
>> "r"); ++     if(fp == NULL) ++       { ++            ERROR("Can't open 
>> /proc/meminfo:
>> %s\n", strerror(errno)); ++          return errno; ++        } ++ ++
>> while(fgets(line, sizeof(line), fp)) ++      { ++            key = 
>> strtok(line,
>> ":"); ++             val = atol(strtok(NULL, " kB\n")); ++ ++                
>> if (!key ||
>> !val) ++                     continue; ++ ++         if (!strcasecmp(key, 
>> "MemTotal")) ++
>> break; ++    } ++ ++ fclose(fp); ++ ++       return val; ++} ++ ++static
>> int ++mount_zram_on_tmp(void) ++{ ++ FILE *fp; ++    long zramsize =
>> (check_ramsize() / 2); ++    pid_t pid; ++ ++        if(!zramsize) ++        
>> { ++
>> ERROR("Can't read size of RAM. Assuming 16 MB.\n"); ++               
>> zramsize =
>> 8192; ++     } ++ ++ fp = fopen("/sys/block/zram0/disksize", "r+"); ++
>> if(fp == NULL) ++    { ++            ERROR("Can't open
>> /sys/block/zram0/disksize: %s\n", strerror(errno)); ++               return
>> errno; ++    } ++ ++ fprintf(fp, "%ld", (zramsize * 1024)); ++ ++
>> fclose(fp); ++ ++    pid = fork(); ++ ++     if (!pid) ++    { ++            
>> char
>> *mkfs[] = { "/sbin/mke2fs", "-b", "4096", "-F", "-L", "TEMP", "-m",
>> "0", "/dev/zram0", NULL }; ++                int fd = open("/dev/null", 
>> O_RDWR); 
>> ++ ++                if (fd > -1) { ++                       dup2(fd, 
>> STDIN_FILENO); ++                      dup2(fd,
>> STDOUT_FILENO); ++                   dup2(fd, STDERR_FILENO); ++             
>>         if (fd >
>> STDERR_FILENO) ++                            close(fd); ++           } ++ ++ 
>>         execvp(mkfs[0],
>> mkfs); ++            ERROR("Can't exec /sbin/mke2fs\n"); ++          
>> exit(-1); ++    } 
>> ++ ++        if (pid <= 0) ++        { ++            ERROR("Can't exec 
>> /sbin/mke2fs\n"); ++
>> return -1; ++        } else { ++             waitpid(pid, NULL, 0); ++       
>> } ++ ++
>> if(mount("/dev/zram0", "/tmp", "ext2", MS_NOSUID | MS_NODEV |
>> MS_NOATIME, "check=none,errors=continue,noquota") < 0) ++    { ++
>> ERROR("Can't mount /dev/zram0 on /tmp: %s\n", strerror(errno)); ++
>> return errno; ++     } ++ ++ LOG("Using up to %ld kB of RAM as ZRAM
>> storage on /mnt\n", zramsize); ++    return 0; ++} ++ + static void 
>> +-early_mounts(void) ++mount_tmpfs_on_tmp(void) + { +-
>> mount("proc", "/proc", "proc", MS_NOATIME, 0); +-    mount("sysfs",
>> "/sys", "sysfs", MS_NOATIME, 0); ++  char line[256]; ++      long
>> tmpfssize = (check_ramsize() / 2); + +-      mount("tmpfs", "/tmp",
>> "tmpfs", MS_NOSUID | MS_NODEV | MS_NOATIME, NULL); +-
>> mkdir("/tmp/run", 0777); +-  mkdir("/tmp/lock", 0777); +-
>> mkdir("/tmp/state", 0777); +-        symlink("/tmp", "/var"); ++
>> if(!tmpfssize) ++    { ++            ERROR("Can't read size of RAM. Assuming 
>> 16
>> MB.\n"); ++          tmpfssize = 8192; ++    } + +-  mount("tmpfs", "/dev",
>> "tmpfs", MS_NOATIME, "mode=0755,size=512K"); +-      mkdir("/dev/shm",
>> 0755); +-    mkdir("/dev/pts", 0755); +-     mount("devpts", "/dev/pts",
>> "devpts", MS_NOATIME, "mode=600"); ++        snprintf(line, 256,
>> "size=%ldk", tmpfssize); ++  mount("tmpfs", "/tmp", "tmpfs",
>> MS_NOSUID | MS_NODEV | MS_NOATIME, line); ++ LOG("Using up to %ld
>> kB of RAM as TMPFS storage on /tmp\n", tmpfssize); + } + + static
>> void +@@ -50,6 +146,25 @@ early_dev(void) + } + + static void 
>> ++early_mounts(void) ++{ ++  mount("proc", "/proc", "proc",
>> MS_NOATIME, 0); ++   mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0); 
>> ++   mount("tmpfs", "/dev", "tmpfs", MS_NOATIME,
>> "mode=0755,size=512K"); ++   mkdir("/dev/shm", 0755); ++
>> mkdir("/dev/pts", 0755); ++  mount("devpts", "/dev/pts", "devpts",
>> MS_NOATIME, "mode=600"); ++  early_dev(); ++ ++
>> if(mount_zram_on_tmp() !=0) ++               mount_tmpfs_on_tmp(); ++
>> mkdir("/tmp/run", 0777); ++  mkdir("/tmp/lock", 0777); ++
>> mkdir("/tmp/state", 0777); ++        symlink("/tmp", "/var"); ++} ++ 
>> ++static void + early_console(const char *dev) + { +         struct stat
>> s; +@@ -87,7 +202,6 @@ early(void) +                 return; + +
>> early_mounts(); +-   early_dev(); +  early_env(); +
>> early_console("/dev/console"); + ---
>> a/package/system/zram-swap/files/zram.init +++
>> b/package/system/zram-swap/files/zram.init @@ -15,10 +15,10 @@
>> zram_size()  # in megabytes local ram_size="$( ram_size )"
>>
>> if [ -z "$zram_size" ]; then -               # e.g. 6mb for 16mb-routers or 
>> 61mb
>> for 128mb-routers -          echo $(( $ram_size / 2048 )) +          # e.g. 
>> 3200kb
>> for 16mb-routers or 25600kb for 128mb-routers +              echo $(( 
>> $ram_size
>> * 2 / 10 )) else -           echo "$zram_size" +             echo $(( 
>> $zram_size * 1024
>> )) fi }
>>
>> @@ -54,9 +54,9 @@ zram_applicable()
>>
>> zram_dev() { -       local core="$1" +       local core=$(( $1 + 1 ))
>>
>> -    echo "/dev/zram${core:-0}" +    echo "/dev/zram${core:-1}" }
>>
>> zram_reset() @@ -95,10 +95,10 @@ start() zram_dev="$( zram_dev
>> "$core" )" zram_applicable "$zram_dev" || return 1
>>
>> -            logger -s -t zram_start -p daemon.debug "activating '$zram_dev'
>> for swapping ($zram_size MegaBytes)" +               logger -s -t zram_start 
>> -p
>> daemon.debug "activating '$zram_dev' for swapping ($zram_size
>> KiloBytes)"
>>
>> zram_reset "$zram_dev" "enforcing defaults" -                echo $(( 
>> $zram_size
>> * 1024 * 1024 )) >"/sys/block/$( basename $zram_dev )/disksize" +
>> echo $(( $zram_size * 1024 )) >"/sys/block/$( basename $zram_dev
>> )/disksize" mkswap "$zram_dev" swapon "$zram_dev" } done @@ -120,4
>> +120,3 @@ stop() zram_reset "$zram_dev" "claiming memory back" }
>> done } - ---
>> a/target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch
>>
>>
> +++
> b/target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch
>> @@ -0,0 +1,11 @@ +--- a/drivers/staging/zram/zram_drv.c ++++
>> b/drivers/staging/zram/zram_drv.c +@@ -40,7 +40,7 @@ static int
>> zram_major; + struct zram *zram_devices; + + /* Module params
>> (documentation at end) */ +-static unsigned int num_devices = 1; 
>> ++static unsigned int num_devices = 2; + + static void
>> zram_stat64_add(struct zram *zram, u64 *v, u64 inc) + { 
>> _______________________________________________ openwrt-devel
>> mailing list openwrt-devel@lists.openwrt.org 
>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
> 
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to