static int manager_dirty_handler(sd_event_source *s, void *userdata) {
Manager *m = userdata;
Link *link;
+ int r;
assert(m);
- if (m->dirty)
- manager_save(m);
+ if (m->dirty) {
+ r = manager_save(m);
+ if (r < 0)
+ log_warning_errno(r, "Failed to update state file %s, ignoring: %m", m->state_file);
+ }
- SET_FOREACH(link, m->dirty_links)
- (void) link_save_and_clean(link);
+ SET_FOREACH(link, m->dirty_links) {
+ r = link_save_and_clean(link);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Failed to update link state file %s, ignoring: %m", link->state_file);
+ }
return 1;
}
/* The dirty handler will deal with future serialization, but the first one
must be done explicitly. */
- manager_save(m);
+ r = manager_save(m);
+ if (r < 0)
+ log_warning_errno(r, "Failed to update state file %s, ignoring: %m", m->state_file);
- HASHMAP_FOREACH(link, m->links)
- (void) link_save(link);
+ HASHMAP_FOREACH(link, m->links) {
+ r = link_save(link);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Failed to update link state file %s, ignoring: %m", link->state_file);
+ }
return 0;
}
LinkOperationalState operstate = LINK_OPERSTATE_OFF;
LinkCarrierState carrier_state = LINK_CARRIER_STATE_OFF;
LinkAddressState address_state = LINK_ADDRESS_STATE_OFF;
- _cleanup_free_ char *temp_path = NULL;
+ _cleanup_(unlink_and_freep) char *temp_path = NULL;
_cleanup_strv_free_ char **p = NULL;
_cleanup_fclose_ FILE *f = NULL;
Link *link;
r = fflush_and_check(f);
if (r < 0)
- goto fail;
+ return r;
r = conservative_rename(temp_path, m->state_file);
if (r < 0)
- goto fail;
+ return r;
+
+ temp_path = mfree(temp_path);
if (m->operational_state != operstate) {
m->operational_state = operstate;
if (p) {
r = manager_send_changed_strv(m, p);
if (r < 0)
- log_error_errno(r, "Could not emit changed properties: %m");
+ log_warning_errno(r, "Could not emit changed properties, ignoring: %m");
}
m->dirty = false;
return 0;
-
-fail:
- (void) unlink(m->state_file);
- (void) unlink(temp_path);
-
- return log_error_errno(r, "Failed to save network state to %s: %m", m->state_file);
}
static void print_link_hashmap(FILE *f, const char *prefix, Hashmap* h) {
int link_save(Link *link) {
const char *admin_state, *oper_state, *carrier_state, *address_state;
- _cleanup_free_ char *temp_path = NULL;
+ _cleanup_(unlink_and_freep) char *temp_path = NULL;
_cleanup_fclose_ FILE *f = NULL;
int r;
assert(link->lease_file);
assert(link->manager);
- if (link->state == LINK_STATE_LINGER) {
- (void) unlink(link->state_file);
+ if (link->state == LINK_STATE_LINGER)
return 0;
- }
link_lldp_save(link);
r = fopen_temporary(link->state_file, &f, &temp_path);
if (r < 0)
- goto fail;
+ return r;
(void) fchmod(fileno(f), 0644);
if (link->dhcp_lease) {
r = dhcp_lease_save(link->dhcp_lease, link->lease_file);
if (r < 0)
- goto fail;
+ return r;
fprintf(f,
"DHCP_LEASE=%s\n",
r = link_serialize_dhcp6_client(link, f);
if (r < 0)
- goto fail;
+ return r;
r = fflush_and_check(f);
if (r < 0)
- goto fail;
+ return r;
r = conservative_rename(temp_path, link->state_file);
if (r < 0)
- goto fail;
-
- return 0;
+ return r;
-fail:
- (void) unlink(link->state_file);
- if (temp_path)
- (void) unlink(temp_path);
+ temp_path = mfree(temp_path);
- return log_link_error_errno(link, r, "Failed to save link data to %s: %m", link->state_file);
+ return 0;
}
void link_dirty(Link *link) {