Because the function __skb_get_hash_symmetric always returns non-zero.

Signed-off-by: Zhang Yu <zhangy...@baidu.com>
Signed-off-by: Wang Li <wangl...@baidu.com>
---
 drivers/net/tun.c | 35 +++++++++++++----------------------
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e2648b5a3861..9647da2c5651 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -562,12 +562,11 @@ static inline void tun_flow_save_rps_rxhash(struct 
tun_flow_entry *e, u32 hash)
                e->rps_rxhash = hash;
 }
 
-/* We try to identify a flow through its rxhash first. The reason that
+/* We try to identify a flow through its rxhash. The reason that
  * we do not check rxq no. is because some cards(e.g 82599), chooses
  * the rxq based on the txq where the last packet of the flow comes. As
  * the userspace application move between processors, we may get a
- * different rxq no. here. If we could not get rxhash, then we would
- * hope the rxq no. may help here.
+ * different rxq no. here.
  */
 static u16 tun_automq_select_queue(struct tun_struct *tun, struct sk_buff *skb)
 {
@@ -578,18 +577,13 @@ static u16 tun_automq_select_queue(struct tun_struct 
*tun, struct sk_buff *skb)
        numqueues = READ_ONCE(tun->numqueues);
 
        txq = __skb_get_hash_symmetric(skb);
-       if (txq) {
-               e = tun_flow_find(&tun->flows[tun_hashfn(txq)], txq);
-               if (e) {
-                       tun_flow_save_rps_rxhash(e, txq);
-                       txq = e->queue_index;
-               } else
-                       /* use multiply and shift instead of expensive divide */
-                       txq = ((u64)txq * numqueues) >> 32;
-       } else if (likely(skb_rx_queue_recorded(skb))) {
-               txq = skb_get_rx_queue(skb);
-               while (unlikely(txq >= numqueues))
-                       txq -= numqueues;
+       e = tun_flow_find(&tun->flows[tun_hashfn(txq)], txq);
+       if (e) {
+               tun_flow_save_rps_rxhash(e, txq);
+               txq = e->queue_index;
+       } else {
+               /* use multiply and shift instead of expensive divide */
+               txq = ((u64)txq * numqueues) >> 32;
        }
 
        return txq;
@@ -1045,15 +1039,12 @@ static void tun_automq_xmit(struct tun_struct *tun, 
struct sk_buff *skb)
                 * RPS hash and save it into the flow_table here.
                 */
                __u32 rxhash;
+               struct tun_flow_entry *e;
 
                rxhash = __skb_get_hash_symmetric(skb);
-               if (rxhash) {
-                       struct tun_flow_entry *e;
-                       e = tun_flow_find(&tun->flows[tun_hashfn(rxhash)],
-                                       rxhash);
-                       if (e)
-                               tun_flow_save_rps_rxhash(e, rxhash);
-               }
+               e = tun_flow_find(&tun->flows[tun_hashfn(rxhash)], rxhash);
+               if (e)
+                       tun_flow_save_rps_rxhash(e, rxhash);
        }
 #endif
 }
-- 
2.15.2 (Apple Git-101.1)

Reply via email to