From f07969fb89b9e50efb797382a6d054fe56057781 Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Wed, 20 Jun 2007 23:56:30 -0400 Subject: [PATCH] Re-examine and simplify code where "return" is followed by "else" Try to make the code flow more linear. Handle easy cases early. This avoids unnecessary identation and a complex tree structure of the code. In at76_iw_handler_get_power(), an at76_dbg() call was supposed to cover the "disabled" case but would not actually be called. Fix it. Signed-off-by: Pavel Roskin --- at76_usb.c | 199 +++++++++++++++++++++++++++++-------------------------------- 1 file changed, 96 insertions(+), 103 deletions(-) diff --git a/at76_usb.c b/at76_usb.c index 3e84c7b..d6572f7 100644 --- a/at76_usb.c +++ b/at76_usb.c @@ -396,10 +396,10 @@ static int at76_usbdfu_download(struct usb_device *udev, u8 *dfu_buffer, exit: kfree(dmabuf); - if (ret < 0) - return ret; - else - return 0; + if (ret >= 0) + ret = 0; + + return ret; } /* Report that the scan results are ready */ @@ -3247,17 +3247,14 @@ static int at76_iw_handler_get_power(struct net_device *netdev, { struct at76_priv *priv = netdev_priv(netdev); - if ((power->disabled = (priv->pm_mode == AT76_PM_OFF))) - return 0; - else { - power->flags = IW_POWER_PERIOD; + power->disabled = (priv->pm_mode == AT76_PM_OFF); + if (!power->disabled) { + power->flags = IW_POWER_PERIOD | IW_POWER_ALL_R; power->value = priv->pm_period; } - power->flags |= IW_POWER_ALL_R; - at76_dbg(DBG_IOCTL, - "%s: SIOCGIWPOWER - disabled %s flags x%x value x%x", - netdev->name, (power->disabled) ? "true" : "false", + at76_dbg(DBG_IOCTL, "%s: SIOCGIWPOWER - %s flags x%x value x%x", + netdev->name, power->disabled ? "disabled" : "enabled", power->flags, power->value); return 0; @@ -5501,113 +5498,109 @@ static struct sk_buff *at76_check_for_rx_frags(struct at76_priv *priv) if (bptr->seqnr == seqnr) { int left; /* the fragment has the current sequence number */ - if (((bptr->fragnr + 1) & 0xf) == fragnr) { - bptr->last_rx = jiffies; - /* the next following fragment number -> - add the data at the end */ - /* is & 0xf necessary above ??? */ - - /* for test only ??? */ - left = skb_tailroom(bptr->skb); - if (left < data_len) { - printk(KERN_INFO - "%s: only %d byte free (need %d)\n", - priv->netdev->name, left, - data_len); - } else - memcpy(skb_put(bptr->skb, data_len), - data, data_len); - bptr->fragnr = fragnr; - if (!(frame_ctl & IEEE80211_FCTL_MOREFRAGS)) { - /* this was the last fragment - send it */ - skb = bptr->skb; - bptr->skb = NULL; /* free the entry */ - at76_dbg(DBG_RX_FRAGS, - "%s: last frag of seq %d", - priv->netdev->name, seqnr); - return skb; - } else - return NULL; - } else { + if (((bptr->fragnr + 1) & 0xf) != fragnr) { /* wrong fragment number -> ignore it */ + /* is & 0xf necessary above ??? */ at76_dbg(DBG_RX_FRAGS, "%s: frag nr does not match: %d+1 != %d", priv->netdev->name, bptr->fragnr, fragnr); return NULL; } - } else { - /* got another sequence number */ - if (fragnr == 0) { - /* it's the start of a new chain - replace the - old one by this */ - /* bptr->sender has the correct value already */ - at76_dbg(DBG_RX_FRAGS, - "%s: start of new seq %d, " - "removing old seq %d", - priv->netdev->name, seqnr, - bptr->seqnr); - bptr->seqnr = seqnr; - bptr->fragnr = 0; - bptr->last_rx = jiffies; - /* swap bptr->skb and priv->rx_skb */ - skb = bptr->skb; - bptr->skb = priv->rx_skb; - priv->rx_skb = skb; - } else { - /* it from the middle of a new chain -> - delete the old entry and skip the new one */ - at76_dbg(DBG_RX_FRAGS, - "%s: middle of new seq %d (%d) " - "removing old seq %d", - priv->netdev->name, seqnr, fragnr, - bptr->seqnr); - dev_kfree_skb(bptr->skb); - bptr->skb = NULL; - } - return NULL; - } - } else { - /* if we didn't find a chain for the sender address optr - points either to the first free or the oldest entry */ + bptr->last_rx = jiffies; + /* the next following fragment number -> + add the data at the end */ - if (fragnr != 0) { - /* this is not the begin of a fragment chain ... */ - at76_dbg(DBG_RX_FRAGS, - "%s: no chain for non-first fragment (%d)", - priv->netdev->name, fragnr); - return NULL; + /* for test only ??? */ + left = skb_tailroom(bptr->skb); + if (left < data_len) { + printk(KERN_INFO + "%s: only %d byte free (need %d)\n", + priv->netdev->name, left, data_len); + } else + memcpy(skb_put(bptr->skb, data_len), data, + data_len); + bptr->fragnr = fragnr; + if (frame_ctl & IEEE80211_FCTL_MOREFRAGS) + return NULL; + + /* this was the last fragment - send it */ + skb = bptr->skb; + bptr->skb = NULL; /* free the entry */ + at76_dbg(DBG_RX_FRAGS, "%s: last frag of seq %d", + priv->netdev->name, seqnr); + return skb; } - at76_assert(optr != NULL); - if (optr == NULL) - return NULL; - - if (optr->skb != NULL) { - /* swap the skb's */ - skb = optr->skb; - optr->skb = priv->rx_skb; - priv->rx_skb = skb; + /* got another sequence number */ + if (fragnr == 0) { + /* it's the start of a new chain - replace the + old one by this */ + /* bptr->sender has the correct value already */ at76_dbg(DBG_RX_FRAGS, - "%s: free old contents: sender %s seq/frag %d/%d", - priv->netdev->name, mac2str(optr->sender), - optr->seqnr, optr->fragnr); - + "%s: start of new seq %d, removing old seq %d", + priv->netdev->name, seqnr, bptr->seqnr); + bptr->seqnr = seqnr; + bptr->fragnr = 0; + bptr->last_rx = jiffies; + /* swap bptr->skb and priv->rx_skb */ + skb = bptr->skb; + bptr->skb = priv->rx_skb; + priv->rx_skb = skb; } else { - /* take the skb from priv->rx_skb */ - optr->skb = priv->rx_skb; - priv->rx_skb = NULL; /* let at76_submit_rx_urb() allocate a new skb */ - - at76_dbg(DBG_RX_FRAGS, "%s: use a free entry", - priv->netdev->name); + /* it from the middle of a new chain -> + delete the old entry and skip the new one */ + at76_dbg(DBG_RX_FRAGS, + "%s: middle of new seq %d (%d) " + "removing old seq %d", + priv->netdev->name, seqnr, fragnr, + bptr->seqnr); + dev_kfree_skb(bptr->skb); + bptr->skb = NULL; } - memcpy(optr->sender, i802_11_hdr->addr2, ETH_ALEN); - optr->seqnr = seqnr; - optr->fragnr = 0; - optr->last_rx = jiffies; + return NULL; + } + /* if we didn't find a chain for the sender address, optr + points either to the first free or the oldest entry */ + + if (fragnr != 0) { + /* this is not the begin of a fragment chain ... */ + at76_dbg(DBG_RX_FRAGS, + "%s: no chain for non-first fragment (%d)", + priv->netdev->name, fragnr); return NULL; } + at76_assert(optr != NULL); + if (optr == NULL) + return NULL; + + if (optr->skb != NULL) { + /* swap the skb's */ + skb = optr->skb; + optr->skb = priv->rx_skb; + priv->rx_skb = skb; + + at76_dbg(DBG_RX_FRAGS, + "%s: free old contents: sender %s seq/frag %d/%d", + priv->netdev->name, mac2str(optr->sender), + optr->seqnr, optr->fragnr); + + } else { + /* take the skb from priv->rx_skb */ + optr->skb = priv->rx_skb; + /* let at76_submit_rx_urb() allocate a new skb */ + priv->rx_skb = NULL; + + at76_dbg(DBG_RX_FRAGS, "%s: use a free entry", + priv->netdev->name); + } + memcpy(optr->sender, i802_11_hdr->addr2, ETH_ALEN); + optr->seqnr = seqnr; + optr->fragnr = 0; + optr->last_rx = jiffies; + + return NULL; } /* Rx interrupt: we expect the complete data buffer in priv->rx_skb */ -- cgit v1.2.3