linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Overstreet <kmo@daterainc.com>
To: Stefan Priebe <s.priebe@profihost.ag>
Cc: Jens Axboe <axboe@kernel.dk>,
	linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org
Subject: Re: bcache: Fix a writeback performance regression
Date: Mon, 19 Aug 2013 15:27:18 -0700	[thread overview]
Message-ID: <20130819222718.GA32104@kmo-pixel> (raw)
In-Reply-To: <52114614.4070509@profihost.ag>

On Mon, Aug 19, 2013 at 12:09:24AM +0200, Stefan Priebe wrote:
> 
> Vanilla 3.10.7 + bcache: Fix a writeback performance regression
> 
> http://pastebin.com/raw.php?i=LXZk4cMH

Whoops, at first I thought this was the same bug as one I'd already been
chasing down that had been a harmless bug - turns out I didn't look
closely enough at the backtrace.

What happened is background writeback is deadlocking, because for some
reason the workqueue it's running out of is a singlethreaded workqueue,
so as soon as it decides to queue enough writeback bios that it has to
sleep on that semaphore (which often won't happen due to the PD
controller based ratelimiting) - boom, deadlock.

Here's the fixup patch I just tested and am applying:


>From 0af68de350e05e43fd093b36dcb0fe8aa838fabf Mon Sep 17 00:00:00 2001
From: Kent Overstreet <kmo@daterainc.com>
Date: Mon, 19 Aug 2013 15:26:22 -0700
Subject: [PATCH] bcache: Fix a writeback deadlock

Signed-off-by: Kent Overstreet <kmo@daterainc.com>

diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index f88c62e..27ac519 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -351,7 +351,7 @@ static void write_dirty(struct closure *cl)
 
 	closure_bio_submit(&io->bio, cl, &io->dc->disk);
 
-	continue_at(cl, write_dirty_finish, dirty_wq);
+	continue_at(cl, write_dirty_finish, system_wq);
 }
 
 static void read_dirty_endio(struct bio *bio, int error)
@@ -371,7 +371,7 @@ static void read_dirty_submit(struct closure *cl)
 
 	closure_bio_submit(&io->bio, cl, &io->dc->disk);
 
-	continue_at(cl, write_dirty, dirty_wq);
+	continue_at(cl, write_dirty, system_wq);
 }
 
 static void read_dirty(struct closure *cl)
@@ -512,7 +512,7 @@ void bch_writeback_exit(void)
 
 int __init bch_writeback_init(void)
 {
-	dirty_wq = create_singlethread_workqueue("bcache_writeback");
+	dirty_wq = create_workqueue("bcache_writeback");
 	if (!dirty_wq)
 		return -ENOMEM;
 

  reply	other threads:[~2013-08-19 22:27 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-14 22:59 [GIT PULL] bcache fixes for 3.11 Kent Overstreet
2013-08-15  6:43 ` Stefan Priebe - Profihost AG
2013-08-15  7:07   ` Kent Overstreet
2013-08-16 10:11   ` Stefan Priebe - Profihost AG
2013-08-18 22:09     ` bcache: Fix a writeback performance regression Stefan Priebe
2013-08-19 22:27       ` Kent Overstreet [this message]
2013-08-20  8:01         ` Stefan Priebe - Profihost AG
2013-08-20  8:07           ` Stefan Priebe - Profihost AG
2013-08-21 21:10             ` Kent Overstreet
2013-08-21 23:47             ` Kent Overstreet
2013-08-22  5:25               ` Stefan Priebe
2013-08-22  5:27               ` Stefan Priebe
2013-08-22  5:43                 ` Kent Overstreet
2013-08-22  5:59                   ` Stefan Priebe
2013-08-22  6:02                     ` Kent Overstreet
2013-08-22  7:32                       ` Stefan Priebe - Profihost AG
2013-08-22  7:42                         ` Kent Overstreet
2013-08-26 19:21                         ` Stefan Priebe
2013-08-28  3:37                           ` kernel neophyte
2013-08-28  6:05                             ` Kent Overstreet
2013-08-28 18:12                               ` kernel neophyte
2013-08-28 18:38                                 ` Stefan Priebe - Profihost AG
2013-08-28 18:47                                   ` kernel neophyte
2013-08-28 19:20                                     ` Stefan Priebe
2013-08-28 20:12                                       ` kernel neophyte
2013-08-28 20:15                                         ` Stefan Priebe
2013-08-28 22:45                                           ` kernel neophyte
2013-08-29 18:52                                           ` Stefan Priebe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130819222718.GA32104@kmo-pixel \
    --to=kmo@daterainc.com \
    --cc=axboe@kernel.dk \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=s.priebe@profihost.ag \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).