linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	chris.mason@oracle.com, david@fromorbit.com, hch@infradead.org,
	akpm@linux-foundation.org, jack@suse.cz, richard@rsk.demon.co.uk,
	damien.wyart@free.fr, dedekind1@gmail.com, fweisbec@gmail.com
Subject: Re: [PATCH 0/15] Per-bdi writeback flusher threads v10
Date: Tue, 16 Jun 2009 10:00:37 +0200	[thread overview]
Message-ID: <20090616080036.GO11363@kernel.dk> (raw)
In-Reply-To: <1245114397.2560.368.camel@ymzhang>

On Tue, Jun 16 2009, Zhang, Yanmin wrote:
> On Fri, 2009-06-12 at 14:54 +0200, Jens Axboe wrote:
> > Hi,
> > 
> > Here's the 10th version of the writeback patches. Changes since v9:
> > 
> > - Fix bdi task exit race leaving work on the list, flush it after we
> >   know we cannot be found anymore.
> > - Rename flusher tasks from bdi-foo to flush-foo. Should make it more
> >   clear to the casual observer.
> > - Fix a problem with the btrfs bdi register patch that would spew
> >   warnings for > 1 mounted btrfs file system.
> > - Rebase to current -git, there were some conflicts with the latest work
> >   from viro/hch.
> > - Fix a block layer core problem were stacked devices would overwrite
> >   the bdi state, causing problems and warning spew.
> > - In bdi_writeback_all(), in the race occurence of a work allocation
> >   failure, restart scanning from the beginning. Then we can drop the
> >   bdi_lock mutex before diving into bdi specific writeback.
> > - Convert bdi_lock to a spinlock.
> > - Use spin_trylock() in bdi_writeback_all(), if this isn't a data
> >   integrity writeback. Debatable, I kind of like it...
> > - Get rid of BDI_CAP_FLUSH_FORKER, just check for match with the
> >   default_backing_dev_info.
> > - Fix race in list checking in bdi_forker_task().
> > 
> > 
> > For ease of patching, I've put the full diff here:
> > 
> >   http://kernel.dk/writeback-v10.patch
> Jens,
> 
> I applied the patch to 2.6.30 and got a confliction. The attachment is
> the patch I ported to 2.6.30. Did I miss anything?
> 
> 
> With the patch, kernel reports below messages on 2 machines.
> 
> INFO: task sync:29984 blocked for more than 120 seconds.
> "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> sync          D ffff88002805e300  6168 29984  24581
>  ffff88022f84b780 0000000000000082 7fffffffffffffff ffff880133dbfe70
>  0000000000000000 ffff88022e2b4c50 ffff88022e2b4fd8 00000001000c7bb8
>  ffff88022f513fd0 ffff880133dbfde8 ffff880133dbfec8 ffff88022d5d13c8
> Call Trace:
>  [<ffffffff802b69e4>] ? bdi_sched_wait+0x0/0xd
>  [<ffffffff80780fde>] ? schedule+0x9/0x1d
>  [<ffffffff802b69ed>] ? bdi_sched_wait+0x9/0xd
>  [<ffffffff8078158d>] ? __wait_on_bit+0x40/0x6f
>  [<ffffffff802b69e4>] ? bdi_sched_wait+0x0/0xd
>  [<ffffffff80781628>] ? out_of_line_wait_on_bit+0x6c/0x78
>  [<ffffffff8024a426>] ? wake_bit_function+0x0/0x23
>  [<ffffffff802b67ac>] ? bdi_writeback_all+0x12a/0x152
>  [<ffffffff802b6805>] ? generic_sync_sb_inodes+0x31/0xde
>  [<ffffffff802b6935>] ? sync_inodes_sb+0x83/0x88
>  [<ffffffff802b6980>] ? __sync_inodes+0x46/0x8f
>  [<ffffffff802b94f2>] ? do_sync+0x36/0x5a
>  [<ffffffff802b9538>] ? sys_sync+0xe/0x12
>  [<ffffffff8020b9ab>] ? system_call_fastpath+0x16/0x1b

I don't think it is your backport, for some reason the v10 missed a
change that I think could solve this race. If not, there's another in
there that I need to look at.

So against your current base, could you try with the below added as
well? The printk() is just so we can see if this triggers for you or
not.

diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index b3e80c5..a065da5 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -384,6 +384,15 @@ static int bdi_start_fn(void *ptr)
 	 */
 	synchronize_srcu(&bdi->srcu);
 
+	/*
+	 * Flush any pending work. No more can be added, since
+	 * the bdi is no longer discoverable.
+	 */
+	if (!list_empty(&bdi->work_list)) {
+		printk("bdi: flushing racy work\n");
+		wb_do_writeback(wb);
+	}
+
 	bdi_put_wb(bdi, wb);
 	return ret;
 }

-- 
Jens Axboe


  reply	other threads:[~2009-06-16  8:00 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-12 12:54 [PATCH 0/15] Per-bdi writeback flusher threads v10 Jens Axboe
2009-06-12 12:54 ` [PATCH 01/15] block: don't overwrite bdi->state after bdi_init() has been run Jens Axboe
2009-06-12 12:54 ` [PATCH 02/15] btrfs: properly register fs backing device Jens Axboe
2009-06-12 12:54 ` [PATCH 03/15] ubifs: register backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 04/15] writeback: move dirty inodes from super_block to backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 05/15] writeback: switch to per-bdi threads for flushing data Jens Axboe
2009-06-12 12:54 ` [PATCH 06/15] writeback: get rid of pdflush completely Jens Axboe
2009-06-12 12:54 ` [PATCH 07/15] writeback: separate the flushing state/task from the bdi Jens Axboe
2009-06-12 12:54 ` [PATCH 08/15] writeback: support > 1 flusher thread per bdi Jens Axboe
2009-06-12 12:54 ` [PATCH 09/15] writeback: allow sleepy exit of default writeback task Jens Axboe
2009-06-12 12:54 ` [PATCH 10/15] writeback: add some debug inode list counters to bdi stats Jens Axboe
2009-06-12 12:54 ` [PATCH 11/15] writeback: add name to backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 12/15] writeback: check for registered bdi in flusher add and inode dirty Jens Axboe
2009-06-12 12:54 ` [PATCH 13/15] writeback: restart bdi list scan on allocation failure Jens Axboe
2009-06-12 12:54 ` [PATCH 14/15] writeback: convert bdi_lock to a spinlock Jens Axboe
2009-06-12 12:54 ` [PATCH 15/15] writeback: use spin_trylock() in bdi_writeback_all() for WB_SYNC_NONE Jens Axboe
2009-06-16  1:06 ` [PATCH 0/15] Per-bdi writeback flusher threads v10 Zhang, Yanmin
2009-06-16  8:00   ` Jens Axboe [this message]
2009-06-16 19:53     ` Jens Axboe
2009-06-18  1:01       ` Zhang, Yanmin
2009-06-18  5:13         ` Jens Axboe
2009-06-18  5:19           ` Zhang, Yanmin
2009-06-18 12:35             ` Jens Axboe
2009-06-19  4:44               ` Zhang, Yanmin
2009-06-19  5:01                 ` Jens Axboe
2009-06-17  1:35     ` Zhang, Yanmin
2009-06-17  4:21       ` Jens Axboe

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=20090616080036.GO11363@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=chris.mason@oracle.com \
    --cc=damien.wyart@free.fr \
    --cc=david@fromorbit.com \
    --cc=dedekind1@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=richard@rsk.demon.co.uk \
    --cc=yanmin_zhang@linux.intel.com \
    /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).