On Tue, 2005-09-20 at 12:56 -0700, Mark Haverkamp wrote: > + && ((hw_fib_pool = kmalloc(sizeof > (struct hw_fib *) * num, GFP_ATOMIC|GFP_KERNEL))) > + && ((fib_pool = kmalloc(sizeof(struct > fib *) * num, GFP_ATOMIC|GFP_KERNEL)))) { > + hw_fib_p = hw_fib_pool; > + fib_p = fib_pool; > + while (hw_fib_p < &hw_fib_pool > [num]) { > + if (!(*(hw_fib_p++) = > kmalloc(sizeof(struct hw_fib), GFP_ATOMIC|GFP_KERNEL))) { > + --hw_fib_p; > + break; > + } > + if (!(*(fib_p++) = > kmalloc(sizeof(struct fib), GFP_ATOMIC|GFP_KERNEL))) { all of these allocations should be either GFP_ATOMIC or GFP_KERNEL, but not both (it looks like they should be GFP_KERNEL). What GFP_KERNEL| GFP_ATOMIC actually gives you is a potentially sleeping allocation that will exhaust the emergency pools, which sounds really undesirable. James - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html