Don't restart a zram device that exists but is swapped off
The resize guard reads the Used column for /dev/zram0 out of /proc/swaps and treats a missing row as an empty device, which is right for a device that doesn't exist yet: the restart is what brings it up against the config daemon-reload just generated. A device that exists and is merely swapped off reads the same, and there the restart resets it first, which returns EBUSY for as long as anything still holds it open. That leaves a bare "Job failed. See 'journalctl -xe' for details." in the migration output and falls through to asking for the reboot that would have resized it anyway. Tell the two apart by whether /sys/block/zram0/disksize is there at all. The test modelled an absent device as a blank disksize file, which no longer stands in for one, so it removes the file instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b4d6b775c7
commit
751165e201
@@ -30,7 +30,16 @@ if sudo systemctl daemon-reload; then
|
||||
# pressure keeps its old size until the next boot.
|
||||
zram_used=$(awk '$1 == "/dev/zram0" {print $4}' "$swaps")
|
||||
|
||||
if [[ ${zram_used:-0} == 0 ]] && sudo systemctl restart dev-zram0.swap; then
|
||||
# No row at all means the device is not swap right now, and that covers two
|
||||
# unlike situations. A device that doesn't exist yet is the one worth acting
|
||||
# on: the restart brings it up against the config daemon-reload just picked
|
||||
# up. A device that exists but is swapped off is not, because the restart
|
||||
# resets it first, and reset returns EBUSY for as long as anything still
|
||||
# holds it open. That leaves a "Job failed" from systemd in the migration
|
||||
# output and still ends up asking for the reboot, so go straight there.
|
||||
if [[ -n $zram_used || ! -e $zram_disksize ]] &&
|
||||
[[ ${zram_used:-0} == 0 ]] &&
|
||||
sudo systemctl restart dev-zram0.swap; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user