summaryrefslogtreecommitdiff
path: root/drivers/ipack
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2013-05-10 14:37:15 +0100
committerAlasdair G Kergon <agk@redhat.com>2013-05-10 14:37:15 +0100
commit502624bdad3dba45dfaacaf36b7d83e39e74b2d2 (patch)
tree56c7d8236425193eb21730f2591868c735db9a5a /drivers/ipack
parent09e8b813897a0f85bb401435d009228644c81214 (diff)
downloadlinux-3.10-502624bdad3dba45dfaacaf36b7d83e39e74b2d2.tar.gz
linux-3.10-502624bdad3dba45dfaacaf36b7d83e39e74b2d2.tar.bz2
linux-3.10-502624bdad3dba45dfaacaf36b7d83e39e74b2d2.zip
dm bufio: avoid a possible __vmalloc deadlock
This patch uses memalloc_noio_save to avoid a possible deadlock in dm-bufio. (it could happen only with large block size, at most PAGE_SIZE << MAX_ORDER (typically 8MiB). __vmalloc doesn't fully respect gfp flags. The specified gfp flags are used for allocation of requested pages, structures vmap_area, vmap_block and vm_struct and the radix tree nodes. However, the kernel pagetables are allocated always with GFP_KERNEL. Thus the allocation of pagetables can recurse back to the I/O layer and cause a deadlock. This patch uses the function memalloc_noio_save to set per-process PF_MEMALLOC_NOIO flag and the function memalloc_noio_restore to restore it. When this flag is set, all allocations in the process are done with implied GFP_NOIO flag, thus the deadlock can't happen. This should be backported to stable kernels, but they don't have the PF_MEMALLOC_NOIO flag and memalloc_noio_save/memalloc_noio_restore functions. So, PF_MEMALLOC should be set and restored instead. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Cc: stable@kernel.org Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/ipack')
0 files changed, 0 insertions, 0 deletions