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

Reply via email to