dm-crypt: fix possible mempool deadlock
This patch fixes a possible deadlock in mempool in dm-crypt.
Currently, dm-crypt reserves a mempool of MIN_BIO_PAGES reserved
pages. It allocates first MIN_BIO_PAGES with non-failing allocation
(the allocation cannot fail and waits until the mempool is refilled).
Further pages are allocated with different gfp flags that allow
failing.
Because allocations may be done in parallel, this code can deadlock.
Example:
There are two processes, each tries to allocate MIN_BIO_PAGES and
the processes run simultaneously.
It may end up in a situation where each process allocates
(MIN_BIO_PAGES / 2) pages. The mempool is exhausted. Each process
waits for more pages to be freed to the mempool, which never happens.
To avoid this deadlock scenario, this patch changes the code so that
only the first page is allocated with non-failing gfp mask. Allocation
of further pages may fail.
Change-Id: I9e64af1e016f13914aa46c3f1be8b5cd13cb3aa1
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
1 file changed