lkml.org 
[lkml]   [2015]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/5] watchdog: implement error handling in update_watchdog_all_cpus() and callers
    Date
    update_watchdog_all_cpus() now passes errors from watchdog_park_threads()
    up to functions in the call chain. This allows watchdog_enable_all_cpus()
    and proc_watchdog_update() to handle such errors too.

    Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com>
    ---
    kernel/watchdog.c | 30 +++++++++++++++++++++++-------
    1 file changed, 23 insertions(+), 7 deletions(-)

    diff --git a/kernel/watchdog.c b/kernel/watchdog.c
    index eb9527c..457113c 100644
    --- a/kernel/watchdog.c
    +++ b/kernel/watchdog.c
    @@ -731,10 +731,17 @@ void lockup_detector_resume(void)
    mutex_unlock(&watchdog_proc_mutex);
    }

    -static void update_watchdog_all_cpus(void)
    +static int update_watchdog_all_cpus(void)
    {
    - watchdog_park_threads();
    + int ret;
    +
    + ret = watchdog_park_threads();
    + if (ret)
    + return ret;
    +
    watchdog_unpark_threads();
    +
    + return 0;
    }

    static int watchdog_enable_all_cpus(void)
    @@ -753,9 +760,17 @@ static int watchdog_enable_all_cpus(void)
    * Enable/disable the lockup detectors or
    * change the sample period 'on the fly'.
    */
    - update_watchdog_all_cpus();
    + err = update_watchdog_all_cpus();
    +
    + if (err) {
    + watchdog_disable_all_cpus();
    + pr_err("Failed to update lockup detectors, disabled\n");
    + }
    }

    + if (err)
    + watchdog_enabled = 0;
    +
    return err;
    }

    @@ -851,12 +866,13 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
    } while (cmpxchg(&watchdog_enabled, old, new) != old);

    /*
    - * Update the run state of the lockup detectors.
    - * Restore 'watchdog_enabled' on failure.
    + * Update the run state of the lockup detectors. There is _no_
    + * need to check the value returned by proc_watchdog_update()
    + * and to restore the previous value of 'watchdog_enabled' as
    + * both lockup detectors are disabled if proc_watchdog_update()
    + * returns an error.
    */
    err = proc_watchdog_update();
    - if (err)
    - watchdog_enabled = old;
    }
    out:
    mutex_unlock(&watchdog_proc_mutex);
    --
    1.7.11.7


    \
     
     \ /
      Last update: 2015-09-28 23:01    [W:5.009 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site