On Thu, 2008-05-29 at 14:38 -0400, Dan Williams wrote: > If there are no networks on the free list, expire the oldest one when > creating a new adhoc network. Because ipw2200 and the ieee80211 stack > don't actually cull old networks and place them back on the free list > unless they are needed for new probe responses, over time the free list > would become empty and creating an adhoc network would fail due to the ! > list_empty(...) check. > > Signed-off-by: Dan Williams <dcbw@xxxxxxxxxx> ACK. Looks like you are doing stress testing to create/delete ad-hoc networks (> 128) ;-) Thanks, -yi > diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c > index d74c061..db2bf46 100644 > --- a/drivers/net/wireless/ipw2200.c > +++ b/drivers/net/wireless/ipw2200.c > @@ -7558,8 +7558,31 @@ static int ipw_associate(void *data) > priv->ieee->iw_mode == IW_MODE_ADHOC && > priv->config & CFG_ADHOC_CREATE && > priv->config & CFG_STATIC_ESSID && > - priv->config & CFG_STATIC_CHANNEL && > - !list_empty(&priv->ieee->network_free_list)) { > + priv->config & CFG_STATIC_CHANNEL) { > + /* Use oldest network if the free list is empty */ > + if (list_empty(&priv->ieee->network_free_list)) { > + struct ieee80211_network *oldest = NULL; > + struct ieee80211_network *target; > + DECLARE_MAC_BUF(mac); > + > + list_for_each_entry(target, &priv->ieee->network_list, list) { > + if ((oldest == NULL) || > + (target->last_scanned < oldest->last_scanned)) > + oldest = target; > + } > + > + /* If there are no more slots, expire the oldest */ > + list_del(&oldest->list); > + target = oldest; > + IPW_DEBUG_ASSOC("Expired '%s' (%s) from " > + "network list.\n", > + escape_essid(target->ssid, > + target->ssid_len), > + print_mac(mac, target->bssid)); > + list_add_tail(&target->list, > + &priv->ieee->network_free_list); > + } > + > element = priv->ieee->network_free_list.next; > network = list_entry(element, struct ieee80211_network, list); > ipw_adhoc_create(priv, network); -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html