The bug is in the get_free_page code, if there is enought free memory, then it
will return the memory or NULL. In the case of GFP_DMA, it shouldn't return
NULL without first trying to swap. We need to either fix this, or modify the
scsi tape module to play silly buggers allocating and freeing memory until
you create the dma buffer you need.
Summary: get_free_pages does normally swap in order to satisfy requests, but
it will stop swapping when there is enought free ram even if it is not
suitable for DMA (fragmented or beyond the DMA limit). I think get_free_pages
should only ever return NULL when called GFP_ATOMIC (this fix is simple to
change the if condition).
-- Jon. <jon@gte.esi.us.es, http://www.esi.us.es/~jon>