From: Maneesh Soni <maneesh@in.ibm.com>
To: Andrew Morton <akpm@digeo.com>
Cc: "Martin J. Bligh" <mbligh@aracnet.com>,
Dipankar Sarma <dipankar@in.ibm.com>,
trond.myklebust@fys.uio.no, LKML <linux-kernel@vger.kernel.org>
Subject: Re: Oops in rpc_depopulate with 2.5.62
Date: Mon, 24 Feb 2003 17:44:42 +0530 [thread overview]
Message-ID: <20030224121442.GA1103@in.ibm.com> (raw)
In-Reply-To: <20030222004930.0240738b.akpm@digeo.com>
On Sat, Feb 22, 2003 at 12:49:30AM -0800, Andrew Morton wrote:
>
> Maneesh and Dipankar may be able to plug this one. I've looked,
> and apart from a seemingly-unneeded test for !d_unhashed I can't
> see the problem.
>
> Perhaps the problem lies with a different part of the code.
>
> I cannot reproduce the crash.
Same with me also. Surprisingly I am getting same oops on 2.5.61.
Can send .config and ksymoops output if required.
rpc_rmdir does lookup_hash(), which may return a negative dentry.
If a negative dentry is possible at this point then testing for d_inode
in rpc_rmdir() fixes this problem. Like we have in rpc_unlink().
Probably Trond knows better.
Following patch fixes the oops I am seeing in 2.5.61 and should fix
the oops seen on 2.5.62 also.
diff -urN linux-2.5.62-bk6/net/sunrpc/rpc_pipe.c linux-2.5.62-bk6-rpc_depopulate/net/sunrpc/rpc_pipe.c
--- linux-2.5.62-bk6/net/sunrpc/rpc_pipe.c 2003-02-24 16:06:46.000000000 +0530
+++ linux-2.5.62-bk6-rpc_depopulate/net/sunrpc/rpc_pipe.c 2003-02-24 16:57:14.000000000 +0530
@@ -665,8 +665,10 @@
error = PTR_ERR(dentry);
goto out_release;
}
- rpc_depopulate(dentry);
- error = __rpc_rmdir(dir, dentry);
+ if (dentry->d_inode) {
+ rpc_depopulate(dentry);
+ error = __rpc_rmdir(dir, dentry);
+ }
dput(dentry);
out_release:
up(&dir->i_sem);
Regards
Maneesh
> "Martin J. Bligh" <mbligh@aracnet.com> wrote:
> >
> > Getting rpc/nfs bugs on at least two different machines I've seen
> > and reports of a third from Zwane - all look similar. Anyone got
> > any bright ideas?
> >
> > M.
> >
> > Unable to handle kernel NULL pointer dereference at virtual address 0000006c
> > printing eip:
> > c03415e2
> > *pde = 358d2001
> > *pte = 00000000
> > Oops: 0002
> > CPU: 1
> > EIP: 0060:[<c03415e2>] Not tainted
> > EFLAGS: 00010206
> > EIP is at rpc_depopulate+0x22/0xf0
> > eax: 00000000 ebx: f5133680 ecx: 0000006c edx: f50afc1c
> > esi: f50afbf4 edi: f50afbf4 ebp: f50afc08 esp: f50afbec
> > ds: 007b es: 007b ss: 0068
> > Process mount (pid: 1166, threadinfo=f50ae000 task=f5766d80)
> > Stack: c01562f0 00000000 f50afbf4 f50afbf4 f5133680 f5133680 f51c1e00 f50afc40
> > c0341af5 f5133680 f5117880 f7ff9800 f50afcec 00000000 f50afc34 00000010
> > 00000001 00000000 f5982680 f50afcec 00000000 f50afc50 c0333066 f5982714
> > Call Trace:
> > [<c01562f0>] lookup_hash+0x70/0xa0
> > [<c0341af5>] rpc_rmdir+0x55/0x90
> > [<c0333066>] rpc_destroy_client+0x46/0x70
> > [<c03330db>] rpc_release_client+0x4b/0x60
> > [<c0337bc7>] rpc_release_task+0x1a7/0x1d0
> > [<c033754b>] __rpc_execute+0x35b/0x370
> > [<c011a980>] default_wake_function+0x0/0x20
> > [<c0333274>] rpc_call_sync+0x64/0xa0
> > [<c0333287>] rpc_call_sync+0x77/0xa0
> > [<c03366b0>] rpc_run_timer+0x0/0xa0
> > [<c033e5fb>] rpc_register+0xcb/0x100
> > [<c0110000>] mask_and_ack_8259A+0x10/0xf0
> > [<c0339d24>] svc_register+0x94/0x100
> > [<c0339944>] svc_create+0xd4/0xe0
> > [<c01c1fb8>] lockd_up+0x58/0x110
> > [<c01a63f4>] nfs_fill_super+0x374/0x3a0
> > [<c01a7e90>] nfs_get_sb+0x1f0/0x230
> > [<c0150052>] do_kern_mount+0x42/0xa0
> > [<c01631e6>] do_add_mount+0x76/0x150
> > [<c0133596>] __alloc_pages+0x76/0x2c0
> > [<c01634d7>] do_mount+0x147/0x160
> > [<c0163908>] sys_mount+0xa8/0x110
> > [<c010ae7b>] syscall_call+0x7/0xb
> >
> > Code: f0 ff 48 6c 0f 88 70 09 00 00 f0 fe 0d 00 d2 44 c0 0f 88 6d
> >
> > Seems to be crashing on the deference of:
> >
> > down(&dir->i_sem);
> >
> > in rpc_depopulate. But there's a big comment just above saying:
> >
> > -----------------------
> > /*
> > * FIXME: This probably has races.
> > */
> > static void
> > rpc_depopulate(struct dentry *parent)
> > {
> > struct inode *dir = parent->d_inode;
> > LIST_HEAD(head);
> > struct list_head *pos, *next;
> > struct dentry *dentry;
> >
> > down(&dir->i_sem);
> >
> > ------------------
> >
> > Looks like dir is NULL here ... might be dcache_rcu (a recent dcache_rcu
> > patch fixed the same file) or a race brought out by the changes.
> >
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
--
Maneesh Soni
IBM Linux Technology Center,
IBM India Software Lab, Bangalore.
Phone: +91-80-5044999 email: maneesh@in.ibm.com
http://lse.sourceforge.net/
next prev parent reply other threads:[~2003-02-24 11:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-22 8:09 Oops in rpc_depopulate with 2.5.62 Martin J. Bligh
[not found] ` <20030222004930.0240738b.akpm@digeo.com>
2003-02-24 12:14 ` Maneesh Soni [this message]
2003-02-26 16:36 ` Martin J. Bligh
2003-02-26 22:54 ` Bill Davidsen
2003-02-28 5:07 ` Maneesh Soni
2003-02-28 5:33 ` Martin J. Bligh
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=20030224121442.GA1103@in.ibm.com \
--to=maneesh@in.ibm.com \
--cc=akpm@digeo.com \
--cc=dipankar@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mbligh@aracnet.com \
--cc=trond.myklebust@fys.uio.no \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.