Skip to content

Commit

Permalink
rt2x00: Fix broken recover-on-error path
Browse files Browse the repository at this point in the history
During initialization the initialize() callback function
in rt2x00pci and rt2x00usb will cleanup the mess they made.

rt2x00lib shouldn't call uninitialize because the callback function already
cleaned up _and_ the DEVICE_INITIALIZED isn't set which causes the
rt2x00lib_uninitialize() to halt directly anyway. All that is required
to be cleaned up by rt2x00lib is the queue, and that can be done by
calling rt2x00queue_uninitialize() directly.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Ivo van Doorn authored and John W. Linville committed May 13, 2008
1 parent 7872089 commit ed49998
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions drivers/net/wireless/rt2x00/rt2x00dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
* Initialize the device.
*/
status = rt2x00dev->ops->lib->initialize(rt2x00dev);
if (status)
goto exit;
if (status) {
rt2x00queue_uninitialize(rt2x00dev);
return status;
}

__set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);

Expand All @@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
rt2x00rfkill_register(rt2x00dev);

return 0;

exit:
rt2x00lib_uninitialize(rt2x00dev);

return status;
}

int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
Expand Down

0 comments on commit ed49998

Please sign in to comment.