Browse Source

zram-swap: fix zram dev reset for multicore cpu devices

 * "zram stop" could reset up to $(num_of_cores) zram devices even if
   some of those were not mounted as swap dev's. This fix tries to
   enumerate mounted swap zram dev's before making a reset

 * remove hot-added zram devs on stop (except zram0)

Signed-off-by: Emil Muratov <[email protected]>
Emil Muratov 7 years ago
parent
commit
9edc1fe8ab
1 changed files with 10 additions and 12 deletions
  1. 10 12
      package/system/zram-swap/files/zram.init

+ 10 - 12
package/system/zram-swap/files/zram.init

@@ -133,18 +133,16 @@ start()
 
 stop()
 {
-	local zram_dev proc_entry
-
-	for core in $( list_cpu_idx ); do {
-		zram_dev="$( zram_dev "$core" )"
-		proc_entry="/sys/block/$( basename "$zram_dev" )/reset"
-
-		grep -sq ^"$zram_dev " /proc/swaps && {
-			logger -s -t zram_stop -p daemon.debug "deactivate swap $zram_dev"
-			swapoff "$zram_dev"
-		}
-
-		zram_reset "$zram_dev" "claiming memory back"
+	local zram_dev
+
+	for zram_dev in $( grep zram /proc/swaps |awk '{print $1}' ); do {
+		logger -s -t zram_stop -p daemon.debug "deactivate swap $zram_dev"
+		swapoff "$zram_dev" && zram_reset "$zram_dev" "claiming memory back"
+		local dev_index="$( echo $zram_dev | grep -o "[0-9]*$" )"
+		if [ $dev_index -ne 0 ]; then
+			logger -s -t zram_stop -p daemon.debug "removing zram $zram_dev"
+			echo $dev_index > /sys/class/zram-control/hot_remove
+		fi
 	} done
 }