[systemd-devel] [PATCH 2/5] fsckd: Fix some error return values
Didier Roche
didrocks at ubuntu.com
Tue Mar 10 09:57:30 PDT 2015
Le 10/03/2015 11:41, Lennart Poettering a écrit :
> On Tue, 10.03.15 11:33, Didier Roche (didrocks at ubuntu.com) wrote:
>
>> diff --git a/src/fsckd/fsckd.c b/src/fsckd/fsckd.c
>> index 3fc923b..9393379 100644
>> --- a/src/fsckd/fsckd.c
>> +++ b/src/fsckd/fsckd.c
>> @@ -220,7 +220,7 @@ static int manager_connect_plymouth(Manager *m) {
>> goto fail;
>> }
>>
>> - return 1;
>> + return 0;
> Oh, well, this doesn't matter too much I guess, since we don't check
> for the precise value, but just < 0 or >= 0...
>
> Returning 1 in this case is actually a bit of a pattern I am trying to
> adopt across the codebase: return 0 if all is OK but we didn't do
> anything. Return > 1 if all is OK and we actually did something. In
> this case this distinction is of course entirely irrelevant, but it
> was more of an automatism...
>
>>
>> fail:
>> manager_disconnect_plymouth(m);
>> @@ -406,10 +406,8 @@ static int manager_new_connection_handler(sd_event_source *s, int fd, uint32_t r
>> log_debug("New fsck client connected to fd: %d", new_client_fd);
>>
>> c = new0(Client, 1);
>> - if (!c) {
>> - log_oom();
>> - return 0;
>> - }
>> + if (!c)
>> + return log_oom();
> Well, I think logging and ignoring the OOM condition in this case is a
> good idea. THink about the effect of returning an error up here: when
> a handler callback returns an error sd-event will disable the event
> source automatically. This means if fsckd hits an OOM once here, it
> will become completely unresponsive, as it never processes incoming
> connections anymore. However, if we simply log, close the connection,
> and continue without propagating an error up, we are slightly more
> robust: sure, the connection will fail, but subsequent connections
> might not...
>
>> c->fd = new_client_fd;
>> new_client_fd = -1;
>> @@ -417,7 +415,7 @@ static int manager_new_connection_handler(sd_event_source *s, int fd, uint32_t r
>> r = sd_event_add_io(m->event, &c->event_source, c->fd, EPOLLIN, client_progress_handler, c);
>> if (r < 0) {
>> log_oom();
>> - return 0;
>> + return r;
> Same here.
Thanks for the explanations, I dropped that patch. Note that I needed to
do a slight change to the paradigm in the replacement of patch 04_*
Didier
More information about the systemd-devel
mailing list