lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.9 60/64] component: fix loop condition to call unbind() if bind() fails
    Date
    From: Banajit Goswami <bgoswami@codeaurora.org>

    [ Upstream commit bdae566d5d9733b6e32b378668b84eadf28a94d4 ]

    During component_bind_all(), if bind() fails for any
    particular component associated with a master, unbind()
    should be called for all previous components in that
    master's match array, whose bind() might have completed
    successfully. As per the current logic, if bind() fails
    for the component at position 'n' in the master's match
    array, it would start calling unbind() from component in
    'n'th position itself and work backwards, and will always
    skip calling unbind() for component in 0th position in the
    master's match array.
    Fix this by updating the loop condition, and the logic to
    refer to the components in master's match array, so that
    unbind() is called for all components starting from 'n-1'st
    position in the array, until (and including) component in
    0th position.

    Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/base/component.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/base/component.c b/drivers/base/component.c
    index 89b032f2ffd22..08da6160e94dd 100644
    --- a/drivers/base/component.c
    +++ b/drivers/base/component.c
    @@ -461,9 +461,9 @@ int component_bind_all(struct device *master_dev, void *data)
    }

    if (ret != 0) {
    - for (; i--; )
    - if (!master->match->compare[i].duplicate) {
    - c = master->match->compare[i].component;
    + for (; i > 0; i--)
    + if (!master->match->compare[i - 1].duplicate) {
    + c = master->match->compare[i - 1].component;
    component_unbind(c, master, data);
    }
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-08 12:47    [W:4.387 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site