linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "majianpeng" <majianpeng@gmail.com>
To: Neil Brown <neilb@suse.de>
Cc: linux-raid <linux-raid@vger.kernel.org>
Subject: md:When opened /proc/mdstat, increase the refcount of
Date: Sun, 26 Feb 2012 12:55:03 +0800	[thread overview]
Message-ID: <201202261255005786849@gmail.com> (raw)

From 07a0eeb62a7bedec3f3312aff24ef62fbb36d820 Mon Sep 17 00:00:00 2001
From: majianpeng <majianpeng@gmail.com>
Date: Sun, 26 Feb 2012 20:43:05 +0800
Subject: [PATCH] md:When opened /proc/mdstat, increase the refcount of
 md-mod.ko

    If md configured module, polled /proc/mdstat and removed the md-mod
    can incur oops problem.

    Reproduce this bug by following step:
    1:configure md is module and insmod
    2:poll(/proc/mdstat,timeout)
    3:remove md-mod.ko
    4:oops occur

[  343.764057] BUG: unable to handle kernel paging request at
ffffffffa007f9e0
[  343.764101] IP: [<ffffffff8155578c>] _raw_spin_lock_irqsave+0xc/0x30
[  343.764133] PGD 1807067 PUD 180b063 PMD b7b72067 PTE 0
[  343.764167] Oops: 0002 [#1] SMP
[  343.764190] CPU 3
[  343.764205] Modules linked in: ext4 jbd2 crc16 async_pq async_xor xor
async_memcpy async_raid6_recov raid6_pq async_tx sata_sil e1000e mvsas
libsas scsi_transport_sas [last unloaded: md_mod]
[  343.764304]
[  343.764312] Pid: 5454, comm: udisks-daemon Not tainted 3.3.0-rc4+ #13
To Be Filled By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M.
[  343.764366] RIP: 0010:[<ffffffff8155578c>]  [<ffffffff8155578c>]
_raw_spin_lock_irqsave+0xc/0x30
[  343.764403] RSP: 0018:ffff8800a514bab8  EFLAGS: 00010082
[  343.764423] RAX: 0000000000000282 RBX: ffffffffa007f9e0 RCX:
ffff8800ba0051a8
[  343.764448] RDX: 0000000000000100 RSI: ffff8800a514bc48 RDI:
ffffffffa007f9e0
[  343.764473] RBP: ffff8800a514bab8 R08: ffff8800a9bdb630 R09:
0000000000000001
[  343.764499] R10: 0000000000000000 R11: 0000000000000000 R12:
ffff8800a514bc48
[  343.764524] R13: ffff8800a514bb88 R14: ffff8800a514be2c R15:
0000000000000000
[  343.764551] FS:  00007fec6a4567c0(0000) GS:ffff8800bdb80000(0000)
knlGS:0000000000000000
[  343.764582] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  343.764603] CR2: ffffffffa007f9e0 CR3: 00000000a50f5000 CR4:
00000000000406e0
[  343.764628] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
0000000000000000
[  343.764653] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7:
0000000000000400
[  343.764679] Process udisks-daemon (pid: 5454, threadinfo
ffff8800a514a000, task ffff8800b7c41d80)
[  343.764710] Stack:
[  343.764719]  ffff8800a514bad8 ffffffff81054ceb 0000000000000003
ffff8800a514bc38
[  343.764756]  ffff8800a514bb28 ffffffff8112e216 ffff8800a514baf8
0000000000000000
[  343.764794]  ffff8800a514bb28 000000000128ed20 ffff8800a514bef8
0000000000000001
[  343.764830] Call Trace:
[  343.764842]  [<ffffffff81054ceb>] remove_wait_queue+0x1b/0x60
[  343.764864]  [<ffffffff8112e216>] poll_freewait+0x46/0xd0
[  343.764884]  [<ffffffff8112f6e6>] do_sys_poll+0x416/0x500
[  343.764905]  [<ffffffff8112e2a0>] ? poll_freewait+0xd0/0xd0
[  343.764926]  [<ffffffff8112e390>] ? __pollwait+0xf0/0xf0
[  343.764953]  [<ffffffff8112e390>] ? __pollwait+0xf0/0xf0
[  343.764979]  [<ffffffff8112e390>] ? __pollwait+0xf0/0xf0
[  343.765002]  [<ffffffff8112e390>] ? __pollwait+0xf0/0xf0
[  343.765002]  [<ffffffff8112e390>] ? __pollwait+0xf0/0xf0
[  343.765002]  [<ffffffff8143aec6>] ? verify_iovec+0x56/0xd0
[  343.765002]  [<ffffffff8142eb76>] ? __sys_sendmsg+0x376/0x380
[  343.765156]  [<ffffffff810f7459>] ? handle_mm_fault+0x139/0x240
[  343.765156]  [<ffffffff81156b0a>] ? fsnotify+0x1ca/0x2b0
[  343.765156]  [<ffffffff811d0388>] ?
selinux_file_permission+0xe8/0x130
[  343.765156]  [<ffffffff81077408>] ? ktime_get_ts+0xa8/0xe0
[  343.765156]  [<ffffffff8112e58a>] ? poll_select_set_timeout+0x7a/0x90
[  343.765156]  [<ffffffff8112f896>] sys_poll+0x66/0x100
[  343.765156]  [<ffffffff8155d162>] system_call_fastpath+0x16/0x1b
[  343.765156] Code: 8a 00 01 00 00 89 d0 f0 66 0f b1 0f 66 39 d0 0f 94
c0 0f b6 c0 5d c3 0f 1f 84 00 00 00 00 00 55 48 89 e5 9c 58 fa ba 00 01
00 00 <f0> 66 0f c1 17 0f b6 ce 38 d1 74 11 0f 1f 84 00 00 00 00 00 f3
[  343.765156] RIP  [<ffffffff8155578c>] _raw_spin_lock_irqsave+0xc/0x30
[  343.765156]  RSP <ffff8800a514bab8>
[  343.765156] CR2: ffffffffa007f9e0
[  343.791890] ---[ end trace 10ed0211ce0a5736 ]---

Signed-off-by: majianpeng <majianpeng@gmail.com>
---
 drivers/md/md.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index ce88755..105c7f9 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6859,9 +6859,15 @@ static int md_seq_open(struct inode *inode, struct file *file)
 
 	seq = file->private_data;
 	seq->poll_event = atomic_read(&md_event_count);
+	__module_get(THIS_MODULE);
 	return error;
 }
 
+static int md_seq_release(struct inode *inode, struct file *file)
+{
+	module_put(THIS_MODULE);
+	return seq_release_private(inode, file);
+}
 static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
 {
 	struct seq_file *seq = filp->private_data;
@@ -6882,7 +6888,7 @@ static const struct file_operations md_seq_fops = {
 	.open           = md_seq_open,
 	.read           = seq_read,
 	.llseek         = seq_lseek,
-	.release	= seq_release_private,
+	.release	= md_seq_release,
 	.poll		= mdstat_poll,
 };
 
-- 
1.7.5.4

 				
--------------
majianpeng
2012-02-26


             reply	other threads:[~2012-02-26  4:55 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-26  4:55 majianpeng [this message]
2012-02-26  5:26 ` md:When opened /proc/mdstat, increase the refcount of NeilBrown
2012-02-26  5:39   ` majianpeng
2012-02-26  8:36     ` NeilBrown
2012-02-26  8:33 ` majianpeng
2012-02-26 11:01   ` NeilBrown
2012-02-27  1:21     ` majianpeng

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=201202261255005786849@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).