diff options
Diffstat (limited to 'package/system/zram-swap')
-rwxr-xr-x[-rw-r--r--] | package/system/zram-swap/files/zram.init | 74 |
1 files changed, 29 insertions, 45 deletions
diff --git a/package/system/zram-swap/files/zram.init b/package/system/zram-swap/files/zram.init index 1eba3f4d98..2db986f9a8 100644..100755 --- a/package/system/zram-swap/files/zram.init +++ b/package/system/zram-swap/files/zram.init @@ -26,11 +26,6 @@ zram_applicable() { local zram_dev="$1" - grep -sq ^"$zram_dev " /proc/swaps && { - logger -s -t zram_applicable -p daemon.notice "[OK] '$zram_dev' already active" - return 1 - } - [ -e "$zram_dev" ] || { logger -s -t zram_applicable -p daemon.crit "[ERROR] device '$zram_dev' not found" return 1 @@ -54,9 +49,8 @@ zram_applicable() zram_dev() { - local core="$1" - - echo "/dev/zram${core:-0}" + local idx="$1" + echo "/dev/zram${idx:-0}" } zram_reset() @@ -69,6 +63,19 @@ zram_reset() echo "1" >"$proc_entry" } +zram_getdev() +{ + #get unallocated zram dev + local zdev=$( zram_dev ) + + if [ "$(mount | grep $zdev)" ]; then + local idx=`cat /sys/class/zram-control/hot_add` + zdev="$( zram_dev $idx )" + fi + + echo $zdev +} + zram_comp_algo() { local dev="$1" @@ -86,49 +93,26 @@ zram_comp_algo() fi } -list_cpu_idx() -{ - # Offset by 1 if /dev/zram0 is in use by /tmp - if mount | grep -q /dev/zram0; then - local line i=1 - # Hot-add new ZRAM device (if necessary) - if [ ! -b /dev/zram1 ]; then - cat /sys/class/zram-control/hot_add - fi - else - local line i=0 - fi - - while read line; do { - case "$line" in - [Pp]rocessor*) - echo $i - i=$(( i + 1 )) - ;; - esac - } done <"/proc/cpuinfo" -} - start() { - # http://shmilyxbq-compcache.googlecode.com/hg/README - # if >1 cpu_core, reinit kmodule with e.g. num_devices=4 - local zram_size="$( zram_size )" - local zram_dev core + local zram_dev - for core in $( list_cpu_idx ); do { - zram_dev="$( zram_dev "$core" )" - zram_applicable "$zram_dev" || return 1 + if [ $( grep -cs zram /proc/swaps ) -ne 0 ]; then + logger -s -t zram_start -p daemon.notice "[OK] zram swap is already mounted" + return 1 + fi - logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)" + zram_dev="$( zram_getdev )" + zram_applicable "$zram_dev" || return 1 - zram_reset "$zram_dev" "enforcing defaults" - echo $(( zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize" - zram_comp_algo "$zram_dev" - mkswap "$zram_dev" - swapon "$zram_dev" - } done + logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)" + + zram_reset "$zram_dev" "enforcing defaults" + zram_comp_algo "$zram_dev" + echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize" + mkswap "$zram_dev" + swapon "$zram_dev" } stop() |