Patch "async_tx: use GFP_NOWAIT rather than GFP_IO" has been added to the 3.14-stable tree
This is a note to let you know that I've just added the patch titled
async_tx: use GFP_NOWAIT rather than GFP_IO
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
async_tx-use-gfp_nowait-rather-than-gfp_io.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b02bab6b0f928d49dbfb03e1e4e9dd43647623d7Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Thu, 7 Jan 2016 11:02:34 +1100
Subject: async_tx: use GFP_NOWAIT rather than GFP_IO
From: NeilBrown <[email protected]>
commit b02bab6b0f928d49dbfb03e1e4e9dd43647623d7 upstream.
These async_XX functions are called from md/raid5 in an atomic section, between get_cpu() and put_cpu(), so they must not sleep. So use GFP_NOWAIT rather than GFP_IO.
Dan Williams writes: Longer term async_tx needs to be merged into md directly as we can allocate this unmap data statically per-stripe rather than per request.
Fixed: 7476bd79fc01 ("async_pq: convert to dmaengine_unmap_data")
--- crypto/async_tx/async_memcpy.c | 2 +- crypto/async_tx/async_pq.c | 4 ++-- crypto/async_tx/async_raid6_recov.c | 4 ++-- crypto/async_tx/async_xor.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-)
crypto/async_tx/async_memcpy.c +1 -1
@@ -53,7 +53,7 @@ async_memcpy(struct page *dest, struct pstruct dmaengine_unmap_data *unmap =NULL ;if (device) - unmap =dmaengine_get_unmap_data (device->dev,2 ,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (device->dev,2 ,GFP_NOWAIT );if (unmap &&is_dma_copy_aligned (device, src_offset, dest_offset, len)) {unsigned long dma_prep_flags =0 ;
crypto/async_tx/async_pq.c +2 -2
@@ -176,7 +176,7 @@ async_gen_syndrome(struct page **blocks,BUG_ON (disks >255 || !(P (blocks, disks) ||Q (blocks, disks)));if (device) - unmap =dmaengine_get_unmap_data (device->dev, disks,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (device->dev, disks,GFP_NOWAIT ); if (unmap && (src_cnt <= dma_maxpq(device, 0) ||
@@ -294,7 +294,7 @@ async_syndrome_val(struct page **blocks,BUG_ON (disks <4 );if (device) - unmap =dmaengine_get_unmap_data (device->dev, disks,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (device->dev, disks,GFP_NOWAIT );if (unmap && disks <=dma_maxpq (device,0 ) &&is_dma_pq_aligned (device, offset,0 , len)) {
crypto/async_tx/async_raid6_recov.c +2 -2
@@ -41,7 +41,7 @@ async_sum_product(struct page *dest, stru8 *a, *b, *c;if (dma) - unmap =dmaengine_get_unmap_data (dma->dev,3 ,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (dma->dev,3 ,GFP_NOWAIT );if (unmap) {struct device *dev = dma->dev;
@@ -105,7 +105,7 @@ async_mult(struct page *dest, struct pagu8 *d, *s;if (dma) - unmap =dmaengine_get_unmap_data (dma->dev,3 ,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (dma->dev,3 ,GFP_NOWAIT );if (unmap) {dma_addr_t dma_dest[2 ];
crypto/async_tx/async_xor.c +2 -2
@@ -182,7 +182,7 @@ async_xor(struct page *dest, struct pageBUG_ON (src_cnt <=1 );if (device) - unmap =dmaengine_get_unmap_data (device->dev, src_cnt+1 ,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (device->dev, src_cnt+1 ,GFP_NOWAIT );if (unmap &&is_dma_xor_aligned (device, offset,0 , len)) {struct dma_async_tx_descriptor *tx;
@@ -278,7 +278,7 @@ async_xor_val(struct page *dest, structBUG_ON (src_cnt <=1 );if (device) - unmap =dmaengine_get_unmap_data (device->dev, src_cnt,GFP_NOIO ); + unmap =dmaengine_get_unmap_data (device->dev, src_cnt,GFP_NOWAIT );if (unmap && src_cnt <= device->max_xor &&is_dma_xor_aligned (device, offset,0 , len)) {
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/async_tx-use-gfp_nowait-rather-than-gfp_io.patch