From: Willy Tarreau <willy@w.ods.org>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>,
trond.myklebust@fys.uio.no, jgarzik@pobox.com
Subject: Re: Linux v2.6.8 - Oops on NFSv3
Date: Sat, 14 Aug 2004 12:19:16 +0200 [thread overview]
Message-ID: <20040814101916.GA27328@alpha.home.local> (raw)
In-Reply-To: <20040814101039.GA27163@alpha.home.local>
Hi Again,
sorry for the noise, I've just found a similar report that Jeff sent
yesterday with a patch. I've applied it and it now runs reliably. It's
a bit of a shame that it didn't get into mainline just in time.
Cheers,
Willy
On Sat, Aug 14, 2004 at 12:10:39PM +0200, Willy Tarreau wrote:
> Hi Linus & All,
>
> I've just compiled and booted 2.6.8 on my dual athlon. Everything went
> OK before I logged in as a non-root user whose home is mounted from
> another linux box over NFSv3/UDP.
>
> I got this oops :
>
> <-----------
> Unable to handle kernel NULL pointer dereference at virtual address 00000014
> printing eip:
> c01f1e76
> *pde = 00000000
> Oops: 0002 [#1]
> PREEMPT SMP
> Modules linked in: usbmouse ohci_hcd usbcore e1000 snd_seq_midi snd_emu10k1_synth snd_emux_synth snd_seq_virmidi snd_seq_midi_emul snd_emu10k1 snd_rawmidi snd_ac97_codec snd_util_mem snd_hwdep snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_pcm snd_page_alloc snd_timer snd_mixer_oss snd soundcore
> w83781d i2c_sensor i2c_amd756 i2c_core bsd_comp ppp_generic slhc
> CPU: 1
> EIP: 0060:[<c01f1e76>] Not tainted
> EFLAGS: 00010296 (2.6.8)
> EIP is at nfs3_request_init+0x16/0x20
> eax: 00000000 ebx: d5496620 ecx: 00000000 edx: df614880
> esi: dc262000 edi: dbb4bd68 ebp: 00000000 esp: dc263c44
> ds: 007b es: 007b ss: 0068
> Process bash (pid: 460, threadinfo=dc262000 task=dfc3d730)
> Stack: dff96e00 c01ea7e8 d5496620 df614880 00000174 dbb4bd68 c12bd3c0 dc263cb0
> d5496620 c01ed162 df614880 dbb4bd68 c12bd3c0 00000000 00000174 c12bd3d8
> c12bd3c0 dc263dd0 dc263cb0 c014170c dc263d20 c12bd3c0 dc263d28 dc263d28
> Call Trace:
> [<c01ea7e8>] nfs_create_request+0xd8/0xf0
> [<c01ed162>] readpage_async_filler+0x52/0x100
> [<c014170c>] read_cache_pages+0xac/0x160
> [<c011e6b0>] autoremove_wake_function+0x0/0x40
> [<c012985e>] recalc_sigpending+0xe/0x10
> [<c03e3923>] rpc_call_sync+0x93/0xb0
> [<c01ed29c>] nfs_readpages+0x8c/0xc0
> [<c01ed110>] readpage_async_filler+0x0/0x100
> [<c01417f5>] read_pages+0x35/0x130
> [<c013eac4>] __alloc_pages+0xc4/0x320
> [<c013ed0f>] __alloc_pages+0x30f/0x320
> [<c0141cf2>] do_page_cache_readahead+0x1b2/0x1e0
> [<c0141e5b>] page_cache_readahead+0x13b/0x1c0
> [<c013ae88>] do_generic_mapping_read+0xb8/0x410
> [<c013b488>] __generic_file_aio_read+0x1d8/0x200
> [<c013b1e0>] file_read_actor+0x0/0xd0
> [<c013b4f5>] generic_file_aio_read+0x45/0x50
> [<c01e6128>] nfs_file_read+0xb8/0xd0
> [<c0157e6a>] do_sync_read+0x7a/0xb0
> [<c0157f55>] vfs_read+0xb5/0xf0
> [<c0158170>] sys_read+0x40/0x70
> [<c01059e3>] syscall_call+0x7/0xb
> Code: f0 ff 40 14 89 43 18 5b c3 90 8b 4c 24 04 8b 51 0c 3b 54 24
>
> >>EIP; c01f1e76 <nfs3_request_init+16/20> <=====
> Code; c01f1e76 <nfs3_request_init+16/20>
> 00000000 <_EIP>:
> Code; c01f1e76 <nfs3_request_init+16/20> <=====
> 0: f0 ff 40 14 lock incl 0x14(%eax) <=====
> Code; c01f1e7a <nfs3_request_init+1a/20>
> 4: 89 43 18 mov %eax,0x18(%ebx)
> Code; c01f1e7d <nfs3_request_init+1d/20>
> 7: 5b pop %ebx
> Code; c01f1e7e <nfs3_request_init+1e/20>
> 8: c3 ret
> Code; c01f1e7f <nfs3_request_init+1f/20>
> 9: 90 nop
> Code; c01f1e80 <nfs3_request_compatible+0/60>
> a: 8b 4c 24 04 mov 0x4(%esp,1),%ecx
> Code; c01f1e84 <nfs3_request_compatible+4/60>
> e: 8b 51 0c mov 0xc(%ecx),%edx
> Code; c01f1e87 <nfs3_request_compatible+7/60>
> 11: 3b 54 24 00 cmp 0x0(%esp,1),%edx
> ----------->
>
> Extracts from the functions where the oops occured :
>
> void
> nfs3_request_init(struct nfs_page *req, struct file *filp)
> {
> req->wb_cred = get_rpccred(nfs_cred(req->wb_inode, filp));
> }
>
> static inline
> struct rpc_cred * get_rpccred(struct rpc_cred *cred)
> {
> atomic_inc(&cred->cr_count);
> return cred;
> }
>
> static struct rpc_cred *
> nfs_cred(struct inode *inode, struct file *filp)
> {
> struct rpc_cred *cred = NULL;
>
> if (filp)
> cred = (struct rpc_cred *)filp->private_data;
> if (!cred)
> cred = NFS_I(inode)->mm_cred;
> return cred;
> }
>
> static inline struct nfs_inode *NFS_I(struct inode *inode)
> {
> return container_of(inode, struct nfs_inode, vfs_inode);
> }
>
> So it seems to me that both (filp or filp->private_data) and
> NFS_I(req->wb_inode)->mm_cred were NULL. I don't know if this
> is a permitted situation, but directly calling get_rpccred()
> from this leads to this oops.
>
> Last 2.6 kernel I tried on this machine was 2.6.7, and I did
> not notice this oops. Unfortunately, I don't have enough time
> to dig through the large patch (19MB uncompressed), nor to try
> different configurations. But this seems reproducible anytime
> I try to access a file over NFSv3. Directory listings seem OK
> at the moment. I've not tested other combinations of NFS/config
> either (I'm typing this mail from the machine, so I don't want
> to risk retyping everything). Since it's reproducible on a
> single request, I don't think that PREEMPT/SMP has anything to
> do with this.
>
> I can send other informations if needed. If anyone wants to
> suggest a patch, I can give it a try, but I won't have much
> time to help debugging this, unfortunately.
>
> Cheers,
> Willy
next prev parent reply other threads:[~2004-08-14 10:34 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-14 6:05 Linux v2.6.8 Linus Torvalds
2004-08-14 10:10 ` Linux v2.6.8 - Oops on NFSv3 Willy Tarreau
2004-08-14 10:19 ` Willy Tarreau [this message]
2004-08-14 10:34 ` Jeff Garzik
2004-08-14 10:41 ` Linus Torvalds
2004-08-14 10:35 ` Willy Tarreau
2004-08-14 10:49 ` Linus Torvalds
2004-08-14 10:55 ` Christoph Hellwig
2004-08-14 11:05 ` Linus Torvalds
2004-08-14 11:18 ` Arjan van de Ven
2004-08-14 11:27 ` Jeff Garzik
2004-08-14 11:31 ` viro
2004-08-14 12:48 ` Nur Hussein
2004-08-14 20:57 ` Greg Norris
2004-08-18 20:57 ` [PATCH] scripts/patch-kernel: use EXTRAVERSION Randy.Dunlap
2004-08-22 20:40 ` Sam Ravnborg
2005-03-15 16:15 ` [BUG] " David Greaves
2005-03-15 16:25 ` Greg KH
2005-03-15 17:44 ` Greg KH
2005-03-15 17:54 ` Matt Mackall
2005-03-15 19:55 ` Sam Ravnborg
2005-03-15 18:02 ` David Greaves
2005-03-15 18:37 ` Sam Ravnborg
2005-04-12 0:07 ` [PATCH] scripts/patch-kernel: EXTRAVERSION patches are not incremental Randy.Dunlap
2004-08-17 3:13 ` Linux v2.6.8 - Oops on NFSv3 Patrick McFarland
2004-08-14 17:20 ` Matt Mackall
2004-08-15 20:10 ` Marcelo Tosatti
2004-08-16 3:37 ` Han Boetes
2004-08-16 14:06 ` Daniel Jacobowitz
2004-08-16 22:39 ` Bill Davidsen
2004-08-18 8:29 ` Robert Schwebel
2004-08-14 15:33 ` Norman Zhang
2004-08-14 10:19 ` [patch 2.6.8-rc4-mm1] via-velocity: wrong module name in Kconfig documentation Francois Romieu
2004-09-20 18:44 ` Jeff Garzik
2004-08-14 10:30 ` Linux v2.6.8 Jeff Garzik
2004-08-14 11:19 ` Stephan von Krawczynski
2004-08-14 11:38 ` Francois Romieu
2004-08-14 11:16 ` William Lee Irwin III
2004-08-16 17:56 ` Linux v2.6.8 (compile stats) John Cherry
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=20040814101916.GA27328@alpha.home.local \
--to=willy@w.ods.org \
--cc=jgarzik@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
--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.