automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
if (a->where) {
- r = repeat_unmount(a->where, MNT_DETACH);
+ r = repeat_unmount(a->where, MNT_DETACH|UMOUNT_NOFOLLOW);
if (r < 0)
log_error_errno(r, "Failed to unmount: %m");
}
safe_close_pair(p);
if (mounted) {
- r = repeat_unmount(a->where, MNT_DETACH);
+ r = repeat_unmount(a->where, MNT_DETACH|UMOUNT_NOFOLLOW);
if (r < 0)
log_error_errno(r, "Failed to unmount, ignoring: %m");
}
r = mount_nofollow_verbose(LOG_ERR, NULL, hd, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
if (r < 0) {
- (void) umount_verbose(hd);
+ (void) umount_verbose(LOG_ERR, hd, UMOUNT_NOFOLLOW);
return r;
}
fail:
if (mounted)
- (void) umount_verbose("/run/systemd/user-home-mount");
+ (void) umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (dm_activated)
(void) crypt_deactivate(cd, setup->dm_name);
root_fd = safe_close(root_fd);
- r = umount_verbose("/run/systemd/user-home-mount");
+ r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (r < 0)
goto fail;
root_fd = safe_close(root_fd);
if (mounted)
- (void) umount_verbose("/run/systemd/user-home-mount");
+ (void) umount_verbose(LOG_WARNING, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (dm_activated)
(void) crypt_deactivate(cd, dm_name);
}
if (setup->undo_mount) {
- r = umount_verbose("/run/systemd/user-home-mount");
+ r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (r < 0)
return r;
if (r < 0)
return r;
- r = umount_verbose("/run/systemd/user-home-mount");
+ r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (r < 0)
return r;
}
if (setup->undo_mount) {
- q = umount_verbose("/run/systemd/user-home-mount");
+ q = umount_verbose(LOG_DEBUG, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
if (q < 0)
r = q;
}
log_error_errno(r, "Failed to chown() cgroup %s: %m", fn);
finish:
if (undo_mount)
- (void) umount_verbose(tree);
+ (void) umount_verbose(LOG_ERR, tree, UMOUNT_NOFOLLOW);
(void) rmdir(tree);
return r;
return r;
}
- r = umount_verbose(full);
+ r = umount_verbose(LOG_ERR, full, UMOUNT_NOFOLLOW);
if (r < 0)
return r;
r = mount_nofollow_verbose(m->graceful ? LOG_DEBUG : LOG_ERR, NULL, where, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL);
if (r < 0) {
- (void) umount_verbose(where);
+ (void) umount_verbose(m->graceful ? LOG_DEBUG : LOG_ERR, where, UMOUNT_NOFOLLOW);
return m->graceful ? 0 : r;
}
fail:
if (bind_mounted)
- (void) umount_verbose(t);
+ (void) umount_verbose(LOG_ERR, t, UMOUNT_NOFOLLOW);
if (tmpfs_mounted)
- (void) umount_verbose(template);
+ (void) umount_verbose(LOG_ERR, template, UMOUNT_NOFOLLOW);
+
(void) rmdir(template);
return r;
}
finish:
if (tmpfs_mounted)
- (void) umount_verbose(template);
+ (void) umount_verbose(LOG_ERR, template, UMOUNT_NOFOLLOW);
(void) rmdir(template);
return r;
return 0;
}
-int umount_verbose(const char *what) {
+int umount_verbose(
+ int error_log_level,
+ const char *what,
+ int flags) {
+
+ assert(what);
+
log_debug("Umounting %s...", what);
- if (umount(what) < 0)
- return log_error_errno(errno, "Failed to unmount %s: %m", what);
+
+ if (umount2(what, flags) < 0)
+ return log_full_errno(error_log_level, errno,
+ "Failed to unmount %s: %m", what);
+
return 0;
}
return mount_verbose_full(error_log_level, what, where, type, flags, options, false);
}
-int umount_verbose(const char *where);
+int umount_verbose(
+ int error_log_level,
+ const char *where,
+ int flags);
int mount_option_mangle(
const char *options,
finish:
if (tmpfs_mounted)
- (void) umount_verbose("/run/systemd/overlay-sysroot");
+ (void) umount_verbose(LOG_ERR, "/run/systemd/overlay-sysroot", UMOUNT_NOFOLLOW);
(void) rmdir("/run/systemd/overlay-sysroot");
return r;