Commit 71b41c32 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Shashank Mittal
Browse files

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: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarShashank Mittal <mittals@codeaurora.org>
parent cc04ed89
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment