On Wed, 2018-07-04 at 10:39 -0400, Mikulas Patocka wrote: > This is backport of the upstream patch > 41c73a49df31151f4ff868f28fe4f129f113fa2c. It should be backported to > stable kernels because this performance problem was seen on the android > 4.4 kernel. Also queued this up for 3.16, thanks. Ben. > commit 41c73a49df31151f4ff868f28fe4f129f113fa2c > Author: Mikulas Patocka <mpatocka@xxxxxxxxxx> > Date: Wed Nov 23 17:04:00 2016 -0500 > > dm bufio: drop the lock when doing GFP_NOIO allocation > > If the first allocation attempt using GFP_NOWAIT fails, drop the lock > and retry using GFP_NOIO allocation (lock is dropped because the > allocation can take some time). > > Note that we won't do GFP_NOIO allocation when we loop for the second > time, because the lock shouldn't be dropped between __wait_for_free_buffer > and __get_unclaimed_buffer. > > Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> > Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx> > > diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c > index 9ef88f0e2382..1c2e1dd7ca16 100644 > --- a/drivers/md/dm-bufio.c > +++ b/drivers/md/dm-bufio.c > @@ -822,6 +822,7 @@ enum new_flag { > static struct dm_buffer *__alloc_buffer_wait_no_callback(struct dm_bufio_client *c, enum new_flag nf) > { > struct dm_buffer *b; > + bool tried_noio_alloc = false; > > /* > * dm-bufio is resistant to allocation failures (it just keeps > @@ -846,6 +847,15 @@ static struct dm_buffer *__alloc_buffer_wait_no_callback(struct dm_bufio_client > if (nf == NF_PREFETCH) > return NULL; > > + if (dm_bufio_cache_size_latch != 1 && !tried_noio_alloc) { > + dm_bufio_unlock(c); > + b = alloc_buffer(c, GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); > + dm_bufio_lock(c); > + if (b) > + return b; > + tried_noio_alloc = true; > + } > + > if (!list_empty(&c->reserved_buffers)) { > b = list_entry(c->reserved_buffers.next, > struct dm_buffer, lru_list); -- Ben Hutchings Kids! Bringing about Armageddon can be dangerous. Do not attempt it in your own home. - Terry Pratchett and Neil Gaiman, `Good Omens'
Attachment:
signature.asc
Description: This is a digitally signed message part