mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 13:15:30 +03:00
nixos/stc: Improve mount unit handling
We should sometimes restart the units rather than reloading them so the changes are actually applied. / and /nix are explicitly excluded because there was some very old issue where these were unmounted. I don't think this will affect many people since most people use fstab mounts instead but I plan to adapt this behavior for fstab mounts as well in the future (once I wrote a test for the fstab thingies).
This commit is contained in:
parent
37b8244412
commit
eb831f759b
3 changed files with 51 additions and 9 deletions
|
@ -313,7 +313,8 @@ sub unrecord_unit {
|
|||
# needs to be restarted or reloaded. If the units differ, the service
|
||||
# is restarted unless the only difference is `X-Reload-Triggers` in the
|
||||
# `Unit` section. If this is the only modification, the unit is reloaded
|
||||
# instead of restarted.
|
||||
# instead of restarted. If the only difference is `Options` in the
|
||||
# `[Mount]` section, the unit is reloaded rather than restarted.
|
||||
# Returns:
|
||||
# - 0 if the units are equal
|
||||
# - 1 if the units are different and a restart action is required
|
||||
|
@ -390,6 +391,11 @@ sub compare_units { ## no critic(Subroutines::ProhibitExcessComplexity)
|
|||
next;
|
||||
}
|
||||
}
|
||||
# If this is a mount unit, check if it was only `Options`
|
||||
if ($section_name eq "Mount" and $ini_key eq "Options") {
|
||||
$ret = 2;
|
||||
next;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -440,10 +446,18 @@ sub handle_modified_unit { ## no critic(Subroutines::ProhibitManyArgs, Subroutin
|
|||
# properties (resource limits and inotify watches)
|
||||
# seem to get applied on daemon-reload.
|
||||
} elsif ($unit =~ /\.mount$/msx) {
|
||||
# Reload the changed mount unit to force a remount.
|
||||
# FIXME: only reload when Options= changed, restart otherwise
|
||||
$units_to_reload->{$unit} = 1;
|
||||
record_unit($reload_list_file, $unit);
|
||||
# Just restart the unit. We wouldn't have gotten into this subroutine
|
||||
# if only `Options` was changed, in which case the unit would be reloaded.
|
||||
# The only exception is / and /nix because it's very unlikely we can safely
|
||||
# unmount them so we reload them instead. This means that we may not get
|
||||
# all changes into the running system but it's better than crashing it.
|
||||
if ($unit eq "-.mount" or $unit eq "nix.mount") {
|
||||
$units_to_reload->{$unit} = 1;
|
||||
record_unit($reload_list_file, $unit);
|
||||
} else {
|
||||
$units_to_restart->{$unit} = 1;
|
||||
record_unit($restart_list_file, $unit);
|
||||
}
|
||||
} elsif ($unit =~ /\.socket$/msx) {
|
||||
# FIXME: do something?
|
||||
# Attempt to fix this: https://github.com/NixOS/nixpkgs/pull/141192
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue