lkml.org 
[lkml]   [2020]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 04/11] fault_inject: Don't rely on "return value" from WRITE_ONCE()
    Date
    It's a bit weird that WRITE_ONCE() evaluates to the value it stores and
    it's different to smp_store_release(), which can't be used this way.

    In preparation for preventing this in WRITE_ONCE(), change the fault
    injection code to use a local variable instead.

    Cc: Akinobu Mita <akinobu.mita@gmail.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    ---
    lib/fault-inject.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/lib/fault-inject.c b/lib/fault-inject.c
    index 8186ca84910b..ce12621b4275 100644
    --- a/lib/fault-inject.c
    +++ b/lib/fault-inject.c
    @@ -106,7 +106,9 @@ bool should_fail(struct fault_attr *attr, ssize_t size)
    unsigned int fail_nth = READ_ONCE(current->fail_nth);

    if (fail_nth) {
    - if (!WRITE_ONCE(current->fail_nth, fail_nth - 1))
    + fail_nth--;
    + WRITE_ONCE(current->fail_nth, fail_nth);
    + if (!fail_nth)
    goto fail;

    return false;
    --
    2.26.1.301.g55bc3eb7cb9-goog
    \
     
     \ /
      Last update: 2020-04-21 17:16    [W:4.703 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site