mirror of
https://github.com/systemd/systemd.git
synced 2024-11-08 11:27:32 +03:00
automount: handle state changes of the corresponding mount unit correctly
The expire timeout must be started/stopped if the corresponding mount unit changes its state, e.g. it is started via local-fs.target or stopped by a manual umount.
This commit is contained in:
parent
5f8ae398ae
commit
3dbadf9ef9
@ -471,13 +471,20 @@ static int automount_send_ready(Automount *a, Set *tokens, int status) {
|
||||
return r;
|
||||
}
|
||||
|
||||
static int automount_start_expire(Automount *a);
|
||||
|
||||
int automount_update_mount(Automount *a, MountState old_state, MountState state) {
|
||||
int r;
|
||||
|
||||
assert(a);
|
||||
|
||||
switch (state) {
|
||||
case MOUNT_MOUNTED:
|
||||
case MOUNT_REMOUNTING:
|
||||
automount_send_ready(a, a->tokens, 0);
|
||||
r = automount_start_expire(a);
|
||||
if (r < 0)
|
||||
log_unit_warning_errno(UNIT(a), r, "Failed to start expiration timer, ignoring: %m");
|
||||
break;
|
||||
case MOUNT_DEAD:
|
||||
case MOUNT_UNMOUNTING:
|
||||
@ -490,6 +497,7 @@ int automount_update_mount(Automount *a, MountState old_state, MountState state)
|
||||
case MOUNT_FAILED:
|
||||
if (old_state != state)
|
||||
automount_send_ready(a, a->tokens, -ENODEV);
|
||||
(void) sd_event_source_set_enabled(a->expire_event_source, SD_EVENT_OFF);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -633,8 +641,6 @@ static void *expire_thread(void *p) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int automount_start_expire(Automount *a);
|
||||
|
||||
static int automount_dispatch_expire(sd_event_source *source, usec_t usec, void *userdata) {
|
||||
Automount *a = AUTOMOUNT(userdata);
|
||||
_cleanup_(expire_data_freep) struct expire_data *data = NULL;
|
||||
@ -733,10 +739,6 @@ static void automount_enter_runnning(Automount *a) {
|
||||
}
|
||||
}
|
||||
|
||||
r = automount_start_expire(a);
|
||||
if (r < 0)
|
||||
log_unit_warning_errno(UNIT(a), r, "Failed to start expiration timer, ignoring: %m");
|
||||
|
||||
automount_set_state(a, AUTOMOUNT_RUNNING);
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user