From: majianpeng <majianpeng@gmail.com>
To: Neil Brown <neilb@suse.de>
Cc: linux-raid <linux-raid@vger.kernel.org>
Subject: [PATCH] raid5: Flush data when do_md_stop in order to avoid stripe_cache leaking.
Date: Fri, 13 Jul 2012 13:58:00 +0800 [thread overview]
Message-ID: <201207131357572035860@gmail.com> (raw)
I found some kernel message below:
=============================================================================
[ 432.213819] BUG raid5-md0 (Not tainted): Objects remaining on kmem_cache_close()
[ 432.213820]
-----------------------------------------------------------------------------
[ 432.213820]
[ 432.213823] INFO: Slab 0xffffea00029cae00 objects=24 used=1
fp=0xffff8800a72bb910 flags=0x100000000004080
[ 432.213825] Pid: 6207, comm: mdadm Not tainted 3.5.0-rc6+ #56
[ 432.213827] Call Trace:
[ 432.213833] [<ffffffff8111b4a1>] slab_err+0x71/0x80
[ 432.213836] [<ffffffff810e4998>] ? __free_pages+0x18/0x30
[ 432.213839] [<ffffffff8111f45a>] ? kmem_cache_destroy+0x16a/0x3a0
[ 432.213841] [<ffffffff8111f47d>] kmem_cache_destroy+0x18d/0x3a0
[ 432.213845] [<ffffffffa007ef8d>] free_conf+0x2d/0xf0 [raid456]
[ 432.213848] [<ffffffffa007f8b1>] stop+0x41/0x60 [raid456]
[ 432.213851] [<ffffffff81475e4a>] md_stop+0x1a/0x60
[ 432.213854] [<ffffffff8147ef20>] do_md_stop+0x90/0x4c0
[ 432.213857] [<ffffffff81248ea3>] ? security_capable+0x13/0x20
[ 432.213859] [<ffffffff81480f94>] md_ioctl+0x5f4/0x11f0
[ 432.213862] [<ffffffff8105cb5b>] ?lock_hrtimer_base.isra.24+0x2b/0x60
[ 432.213865] [<ffffffff81283228>] blkdev_ioctl+0xd8/0x790
[ 432.213867] [<ffffffff8105ce7a>] ? hrtimer_cancel+0x1a/0x30
[ 432.213870] [<ffffffff811587fb>] block_ioctl+0x3b/0x40
[ 432.213873] [<ffffffff81135b86>] do_vfs_ioctl+0x96/0x550
[ 432.213876] [<ffffffff8124c1a5>] ?inode_has_perm.isra.37.constprop.61+0x25/0x30
[ 432.213878] [<ffffffff8124e0af>] ? file_has_perm+0x8f/0xa0
[ 432.213880] [<ffffffff8105c6e0>] ? update_rmtp+0x70/0x70
[ 432.213882] [<ffffffff811360d1>] sys_ioctl+0x91/0xa0
[ 432.213886] [<ffffffff8166a0a2>] system_call_fastpath+0x16/0x1b
[ 432.213888] INFO: Object 0xffff8800a72bbe40 @offset=15936
[ 432.213890] SLUB raid5-md0: kmem_cache_destroy called for cache that
still has objects.
[ 432.213892] Pid: 6207, comm: mdadm Not tainted 3.5.0-rc6+ #56
[ 432.213893] Call Trace:
[ 432.213895] [<ffffffff8111f61a>] kmem_cache_destroy+0x32a/0x3a0
[ 432.213898] [<ffffffffa007ef8d>] free_conf+0x2d/0xf0 [raid456]
[ 432.213900] [<ffffffffa007f8b1>] stop+0x41/0x60 [raid456]
[ 432.213902] [<ffffffff81475e4a>] md_stop+0x1a/0x60
[ 432.213904] [<ffffffff8147ef20>] do_md_stop+0x90/0x4c0
[ 432.213907] [<ffffffff81248ea3>] ? security_capable+0x13/0x20
[ 432.213909] [<ffffffff81480f94>] md_ioctl+0x5f4/0x11f0
[ 432.213911] [<ffffffff8105cb5b>] ?lock_hrtimer_base.isra.24+0x2b/0x60
[ 432.213913] [<ffffffff81283228>] blkdev_ioctl+0xd8/0x790
[ 432.213915] [<ffffffff8105ce7a>] ? hrtimer_cancel+0x1a/0x30
[ 432.213917] [<ffffffff811587fb>] block_ioctl+0x3b/0x40
[ 432.213919] [<ffffffff81135b86>] do_vfs_ioctl+0x96/0x550
[ 432.213921] [<ffffffff8124c1a5>] ?inode_has_perm.isra.37.constprop.61+0x25/0x30
[ 432.213923] [<ffffffff8124e0af>] ? file_has_perm+0x8f/0xa0
[ 432.213925] [<ffffffff8105c6e0>] ? update_rmtp+0x70/0x70
[ 432.213928] [<ffffffff811360d1>] sys_ioctl+0x91/0xa0
[ 432.213930] [<ffffffff8166a0a2>] system_call_fastpath+0x16/0x1b
By the following steps, it can reappear.
1:create raid5
2:dd if=/dev/zero of=/dev/md0 bs=1M
3:when exec "mdadm -S /dev/md0", press "CTRL+C" in dd-command screen.
In commit 271f5a9b8f8ae0db95de72779d115c9d0b9d3cc5
Author: NeilBrown <neilb@suse.de>
Remove invalidate_partition call from do_md_stop
Because the deadlock, Neil remove the flush data.But in this pathch,Neil
only thoungt the filesystem,but not consider the raw block deivces.
Using the latest kernel and readding "invalidate_partition" function.
By the patch suggested, i create os in md0(softraid5).But the deadlock
did not appear.
But maybe my test not correct,so i don't using "invalidate_partition" to
flush data. I used sync_block to flush data.
Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
---
drivers/md/md.c | 6 ++++++
drivers/md/raid5.c | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index a4c219e..5716569 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5395,10 +5395,16 @@ static int do_md_stop(struct mddev * mddev, int mode, int is_open)
}
if (mddev->pers) {
+ struct block_device *bdev;
if (mddev->ro)
set_disk_ro(disk, 0);
__md_stop_writes(mddev);
+ /*flush data*/
+ bdev = bdget_disk(disk, 0);
+ sync_blockdev(bdev);
+ bdput(bdev);
+
md_stop(mddev);
mddev->queue->merge_bvec_fn = NULL;
mddev->queue->backing_dev_info.congested_fn = NULL;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 04348d7..922e26e 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -1682,6 +1682,7 @@ static void shrink_stripes(struct r5conf *conf)
while (drop_one_stripe(conf))
;
+ BUG_ON(atomic_read(&conf->active_stripes));
if (conf->slab_cache)
kmem_cache_destroy(conf->slab_cache);
conf->slab_cache = NULL;
--
1.7.5.4
next reply other threads:[~2012-07-13 5:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-13 5:58 majianpeng [this message]
2012-07-16 8:20 ` [PATCH] raid5: Flush data when do_md_stop in order to avoid stripe_cache leaking NeilBrown
2012-07-17 1:04 ` NeilBrown
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=201207131357572035860@gmail.com \
--to=majianpeng@gmail.com \
--cc=linux-raid@vger.kernel.org \
--cc=neilb@suse.de \
/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).