diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2010-10-30 22:16:56 +0200 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2010-10-30 22:16:56 +0200 |
| commit | f1e095f1d206b81b44160f41278ce5c78641e9b7 (patch) | |
| tree | bd293d46d2d3e4cdf435a22ddb2877c6ba1b8acc /drivers/net/wireless/ath/carl9170/usb.c | |
| parent | b0438a1b71955c425c304a2a483765ef24841766 (diff) | |
| parent | 1792f17b7210280a3d7ff29da9614ba779cfcedb (diff) | |
Merge branch 'master' into for-next
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/usb.c')
| -rw-r--r-- | drivers/net/wireless/ath/carl9170/usb.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c index c7f6193934ea..d8607f4c144d 100644 --- a/drivers/net/wireless/ath/carl9170/usb.c +++ b/drivers/net/wireless/ath/carl9170/usb.c @@ -591,16 +591,23 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd, const bool free_buf) { struct urb *urb; + int err = 0; - if (!IS_INITIALIZED(ar)) - return -EPERM; + if (!IS_INITIALIZED(ar)) { + err = -EPERM; + goto err_free; + } - if (WARN_ON(cmd->hdr.len > CARL9170_MAX_CMD_LEN - 4)) - return -EINVAL; + if (WARN_ON(cmd->hdr.len > CARL9170_MAX_CMD_LEN - 4)) { + err = -EINVAL; + goto err_free; + } urb = usb_alloc_urb(0, GFP_ATOMIC); - if (!urb) - return -ENOMEM; + if (!urb) { + err = -ENOMEM; + goto err_free; + } usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev, AR9170_USB_EP_CMD), cmd, cmd->hdr.len + 4, @@ -613,6 +620,12 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct carl9170_cmd *cmd, usb_free_urb(urb); return carl9170_usb_submit_cmd_urb(ar); + +err_free: + if (free_buf) + kfree(cmd); + + return err; } int carl9170_exec_cmd(struct ar9170 *ar, const enum carl9170_cmd_oids cmd, |
