Skip to content

Commit

Permalink
component: fix loop condition to call unbind() if bind() fails
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Banajit Goswami authored and gregkh committed Sep 16, 2018
1 parent be6b1df commit bdae566
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/base/component.c
Original file line number Diff line number Diff line change
Expand Up @@ -536,9 +536,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);
}
}
Expand Down

0 comments on commit bdae566

Please sign in to comment.