]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/mac80211/mesh_hwmp.c
mac80211: push rx status into skb->cb
[mv-sheeva.git] / net / mac80211 / mesh_hwmp.c
index 60b35accda9147305f9213215515c509495bdf28..f49ef288e2e28841a2e6308c2ab94e83cf2d1717 100644 (file)
@@ -637,7 +637,7 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags)
        struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
        struct mesh_preq_queue *preq_node;
 
-       preq_node = kmalloc(sizeof(struct mesh_preq_queue), GFP_KERNEL);
+       preq_node = kmalloc(sizeof(struct mesh_preq_queue), GFP_ATOMIC);
        if (!preq_node) {
                printk(KERN_DEBUG "Mesh HWMP: could not allocate PREQ node\n");
                return;
@@ -836,8 +836,14 @@ void mesh_path_timer(unsigned long data)
        mpath = rcu_dereference(mpath);
        if (!mpath)
                goto endmpathtimer;
-       spin_lock_bh(&mpath->state_lock);
        sdata = mpath->sdata;
+
+       if (sdata->local->quiescing) {
+               rcu_read_unlock();
+               return;
+       }
+
+       spin_lock_bh(&mpath->state_lock);
        if (mpath->flags & MESH_PATH_RESOLVED ||
                        (!(mpath->flags & MESH_PATH_RESOLVING)))
                mpath->flags &= ~(MESH_PATH_RESOLVING | MESH_PATH_RESOLVED);