On Tue, Jan 26, 2016 at 09:53:33PM +0100, Johannes Berg wrote: > Oh. Interesting. Yeah, I guess that should be OK then. > > It's not *nice*, since that's pretty much unexpected, and you then do > need the rcu_read_lock() ... hmm. Yeah, I puzzled over that a bit last week as well -- I rewrote it like this in the series I haven't posted yet: void mesh_path_flush_by_nexthop(struct sta_info *sta) { [...] rhashtable_walk_start(&iter); while ((mpath = rhashtable_walk_next(&iter))) { if (IS_ERR(mpath) && PTR_ERR(mpath) == -EAGAIN) continue; if (IS_ERR(mpath)) break; if (rcu_access_pointer(mpath->next_hop) == sta) __mesh_path_del(tbl, mpath); } rhashtable_walk_stop(&iter); [...] } ...this still relies on the rcu read lock inside _walk_start and _walk_stop, though. -- Bob Copeland %% http://bobcopeland.com/ -- 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