diff options
Diffstat (limited to 'src/core/automount.c')
-rw-r--r-- | src/core/automount.c | 75 |
1 files changed, 25 insertions, 50 deletions
diff --git a/src/core/automount.c b/src/core/automount.c index 14bf7e6..6cb9d52 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -38,10 +38,10 @@ #include "unit.h" static const UnitActiveState state_translation_table[_AUTOMOUNT_STATE_MAX] = { - [AUTOMOUNT_DEAD] = UNIT_INACTIVE, + [AUTOMOUNT_DEAD] = UNIT_INACTIVE, [AUTOMOUNT_WAITING] = UNIT_ACTIVE, [AUTOMOUNT_RUNNING] = UNIT_ACTIVE, - [AUTOMOUNT_FAILED] = UNIT_FAILED + [AUTOMOUNT_FAILED] = UNIT_FAILED, }; static int open_dev_autofs(Manager *m); @@ -51,10 +51,8 @@ static void automount_stop_expire(Automount *a); static int automount_send_ready(Automount *a, Set *tokens, int status); static void automount_init(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); - assert(a); - assert(u); assert(u->load_state == UNIT_STUB); a->pipe_fd = -EBADF; @@ -88,9 +86,7 @@ static void unmount_autofs(Automount *a) { } static void automount_done(Unit *u) { - Automount *a = AUTOMOUNT(u); - - assert(a); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); unmount_autofs(a); @@ -126,7 +122,7 @@ static int automount_add_mount_dependencies(Automount *a) { if (r < 0) return r; - return unit_require_mounts_for(UNIT(a), parent, UNIT_DEPENDENCY_IMPLICIT); + return unit_add_mounts_for(UNIT(a), parent, UNIT_DEPENDENCY_IMPLICIT, UNIT_MOUNT_REQUIRES); } static int automount_add_default_dependencies(Automount *a) { @@ -227,10 +223,9 @@ static int automount_add_extras(Automount *a) { } static int automount_load(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(u); assert(u->load_state == UNIT_STUB); /* Load a .automount file */ @@ -250,6 +245,7 @@ static int automount_load(Unit *u) { static void automount_set_state(Automount *a, AutomountState state) { AutomountState old_state; + assert(a); if (a->state != state) @@ -271,10 +267,9 @@ static void automount_set_state(Automount *a, AutomountState state) { } static int automount_coldplug(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(a); assert(a->state == AUTOMOUNT_DEAD); if (a->deserialized_state == a->state) @@ -310,9 +305,7 @@ static int automount_coldplug(Unit *u) { } static void automount_dump(Unit *u, FILE *f, const char *prefix) { - Automount *a = AUTOMOUNT(u); - - assert(a); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); fprintf(f, "%sAutomount State: %s\n" @@ -478,30 +471,22 @@ static int automount_send_ready(Automount *a, Set *tokens, int status) { r = 0; /* Autofs thankfully does not hand out 0 as a token */ - while ((token = PTR_TO_UINT(set_steal_first(tokens)))) { - int k; - + while ((token = PTR_TO_UINT(set_steal_first(tokens)))) /* Autofs fun fact: * - * if you pass a positive status code here, kernels - * prior to 4.12 will freeze! Yay! */ - - k = autofs_send_ready(UNIT(a)->manager->dev_autofs_fd, - ioctl_fd, - token, - status); - if (k < 0) - r = k; - } + * if you pass a positive status code here, kernels prior to 4.12 will freeze! Yay! */ + RET_GATHER(r, autofs_send_ready(UNIT(a)->manager->dev_autofs_fd, + ioctl_fd, + token, + status)); return r; } static void automount_trigger_notify(Unit *u, Unit *other) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(a); assert(other); /* Filter out invocations with bogus state */ @@ -697,11 +682,10 @@ static int asynchronous_expire(int dev_autofs_fd, int ioctl_fd) { } static int automount_dispatch_expire(sd_event_source *source, usec_t usec, void *userdata) { + Automount *a = ASSERT_PTR(AUTOMOUNT(userdata)); _cleanup_close_ int ioctl_fd = -EBADF; - Automount *a = AUTOMOUNT(userdata); int r; - assert(a); assert(source == a->expire_event_source); ioctl_fd = open_ioctl_fd(UNIT(a)->manager->dev_autofs_fd, a->where, a->dev_id); @@ -815,13 +799,12 @@ fail: } static int automount_start(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(a); assert(IN_SET(a->state, AUTOMOUNT_DEAD, AUTOMOUNT_FAILED)); - if (path_is_mount_point(a->where, NULL, 0) > 0) + if (path_is_mount_point(a->where) > 0) return log_unit_error_errno(u, SYNTHETIC_ERRNO(EEXIST), "Path %s is already a mount point, refusing start.", a->where); r = unit_test_trigger_loaded(u); @@ -838,9 +821,8 @@ static int automount_start(Unit *u) { } static int automount_stop(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); - assert(a); assert(IN_SET(a->state, AUTOMOUNT_WAITING, AUTOMOUNT_RUNNING)); automount_enter_dead(a, AUTOMOUNT_SUCCESS); @@ -848,11 +830,10 @@ static int automount_stop(Unit *u) { } static int automount_serialize(Unit *u, FILE *f, FDSet *fds) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); void *p; int r; - assert(a); assert(f); assert(fds); @@ -873,10 +854,9 @@ static int automount_serialize(Unit *u, FILE *f, FDSet *fds) { } static int automount_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(a); assert(fds); if (streq(key, "state")) { @@ -958,13 +938,12 @@ static bool automount_may_gc(Unit *u) { } static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, void *userdata) { + Automount *a = ASSERT_PTR(AUTOMOUNT(userdata)); _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; union autofs_v5_packet_union packet; - Automount *a = AUTOMOUNT(userdata); Unit *trigger; int r; - assert(a); assert(fd == a->pipe_fd); if (events & (EPOLLHUP|EPOLLERR)) { @@ -1048,9 +1027,7 @@ static void automount_shutdown(Manager *m) { } static void automount_reset_failed(Unit *u) { - Automount *a = AUTOMOUNT(u); - - assert(a); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); if (a->state == AUTOMOUNT_FAILED) automount_set_state(a, AUTOMOUNT_DEAD); @@ -1068,11 +1045,9 @@ static bool automount_supported(void) { } static int automount_can_start(Unit *u) { - Automount *a = AUTOMOUNT(u); + Automount *a = ASSERT_PTR(AUTOMOUNT(u)); int r; - assert(a); - r = unit_test_start_limit(u); if (r < 0) { automount_enter_dead(a, AUTOMOUNT_FAILURE_START_LIMIT_HIT); |