On Fri, 2018-08-31 at 15:12 +0800, Yuan-Chi Pang wrote: > void ieee80211s_init(void); > void ieee80211s_update_metric(struct ieee80211_local *local, > - struct sta_info *sta, struct sk_buff *skb); > + struct sta_info *sta, struct ieee80211_tx_status *st); please keep things indented properly > void ieee80211s_update_metric(struct ieee80211_local *local, > - struct sta_info *sta, struct sk_buff *skb) > + struct sta_info *sta, struct ieee80211_tx_status *st) and maybe fix the indentation here while you're changing it > { > - struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb); > - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; > + struct ieee80211_tx_info *txinfo = st->info; > int failed; > > - if (!ieee80211_is_data(hdr->frame_control)) > - return; Why are you removing this condition? You didn't say anything about that. I sort of see why (you no longer even have the skb/hdr), but you should indicate why this is OK. > rate_control_tx_status(local, sband, status); > + if (ieee80211_vif_is_mesh(&sta->sdata->vif)) > + ieee80211s_update_metric(local, sta, status) This is the only "real" change I guess, some more description about it would be good. I can sort of reverse engineer it from your commit log, but you should be more explicit. johannes