mac80211: Don't sleep when growing the mesh path
authorJavier Cardona <javier@cozybit.com>
Tue, 17 May 2011 23:13:34 +0000 (16:13 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 19 May 2011 17:54:14 +0000 (13:54 -0400)
After commit 1928ecab620907a0953f811316d05f367f3f4dba (mac80211: fix and
simplify mesh locking) mesh table allocation is performed with the
pathtbl_resize_lock taken.  Under those conditions one should not sleep.
This patch makes the allocations GFP_ATOMIC to prevent that.

Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/mesh_pathtbl.c

index 2bda0ac62326e35ddef1023b3cc3f715d0ff0099..51f6fe86d8907d3a6bd9ff9569c5157ac6793ba7 100644 (file)
@@ -76,12 +76,12 @@ static struct mesh_table *mesh_table_alloc(int size_order)
        int i;
        struct mesh_table *newtbl;
 
-       newtbl = kmalloc(sizeof(struct mesh_table), GFP_KERNEL);
+       newtbl = kmalloc(sizeof(struct mesh_table), GFP_ATOMIC);
        if (!newtbl)
                return NULL;
 
        newtbl->hash_buckets = kzalloc(sizeof(struct hlist_head) *
-                       (1 << size_order), GFP_KERNEL);
+                       (1 << size_order), GFP_ATOMIC);
 
        if (!newtbl->hash_buckets) {
                kfree(newtbl);
@@ -89,7 +89,7 @@ static struct mesh_table *mesh_table_alloc(int size_order)
        }
 
        newtbl->hashwlock = kmalloc(sizeof(spinlock_t) *
-                       (1 << size_order), GFP_KERNEL);
+                       (1 << size_order), GFP_ATOMIC);
        if (!newtbl->hashwlock) {
                kfree(newtbl->hash_buckets);
                kfree(newtbl);