From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751552AbWCMLfA (ORCPT ); Mon, 13 Mar 2006 06:35:00 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751736AbWCMLfA (ORCPT ); Mon, 13 Mar 2006 06:35:00 -0500 Received: from ogre.sisk.pl ([217.79.144.158]:27823 "EHLO ogre.sisk.pl") by vger.kernel.org with ESMTP id S1751552AbWCMLe7 (ORCPT ); Mon, 13 Mar 2006 06:34:59 -0500 From: "Rafael J. Wysocki" To: Andrew Morton Subject: Re: [discuss] Re: 2.6.16-rc5-mm3: spinlock bad magic on CPU#0 on AMD64 Date: Mon, 13 Mar 2006 12:34:08 +0100 User-Agent: KMail/1.9.1 Cc: linux-kernel@vger.kernel.org, ak@suse.de, Mingming Cao , Badari Pulavarty References: <200603120024.04938.rjw@sisk.pl> <200603121349.32374.rjw@sisk.pl> <20060312142654.650b90fb.akpm@osdl.org> In-Reply-To: <20060312142654.650b90fb.akpm@osdl.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200603131234.08804.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Sunday 12 March 2006 23:26, Andrew Morton wrote: > "Rafael J. Wysocki" wrote: > > > > Done, and now it looks like this: > > Helps a lot, thanks. > > > BUG: spinlock bad magic on CPU#0, soffice.bin/5192 > > lock: ffff81005f79ae28, .magic: 000001ff, .owner: 1..1..|1. |1.|1..|1.___1..|1..1. 1./-1, > > .owner_cpu: -2141838208 > > > > Call Trace: {__alloc_pages+99} {spin_bug+195} > > {_raw_spin_lock+44} {_spin_lock+30} > > {journal_extend+77} {ext3_get_block+165} > > {do_mpage_readpage+425} {_write_unlock_irq+20} > > {add_to_page_cache+162} {mpage_readpages+254} > > {ext3_get_block+0} {ext3_get_block+0} > > {get_cnode+95} {get_page_from_freelist+619} > > {__alloc_pages+99} {ext3_readpages+26} > > {__do_page_cache_readahead+416} {poison_obj+66} > > {wake_up_bit+40} {unlock_buffer+18} > > {reiserfs_prepare_for_journal+104} > > {do_page_cache_readahead+100} {filemap_nopage+322} > > {__handle_mm_fault+1004} {_spin_unlock_irqrestore+29} > > {do_page_fault+1257} {error_exit+0} > > {reiserfs_copy_from_user_to_file_region+80} > > {reiserfs_file_write+6102} {reiserfs_add_entry+1054} > > {journal_cancel_revoke+351} {poison_obj+66} > > {cache_free_debugcheck+711} {journal_stop+772} > > {_spin_unlock+16} {vfs_write+226} > > {sys_write+80} {cstar_do_call+27} > > BUG: spinlock lockup on CPU#0, soffice.bin/5192, ffff81005f79ae28 > > It's a pretty vile backtrace. I supposed you have CONFIG_FRAME_POINTER=n. > > Still. It seems that what's happened is that we took a pagefault while > reiserfs had a transaction open. The fault is against a mmapped ext3 file > and we ended up in the recently-reworked ext3_get_block() which tests > journal_current_handle() to work out whether we're in a write or a read. > oops. The presence of reiserfs journal_info makes it decide it's a write, > not a read so it starts treating a reiserfs journal_info as an ext3 one. > > The code used to work OK because it was only for direct-IO, which doesn't > get recurred into like this. But it got used for regular I/O in -mm. > > This should fix: > > --- devel/fs/ext3/inode.c~ext3-get-blocks-maping-multiple-blocks-at-a-once-journal-reentry-fix 2006-03-12 14:25:04.000000000 -0800 > +++ devel-akpm/fs/ext3/inode.c 2006-03-12 14:25:04.000000000 -0800 > @@ -830,7 +830,7 @@ ext3_direct_io_get_blocks(struct inode * > handle_t *handle = journal_current_handle(); > int ret = 0; > > - if (!handle) > + if (!create) > goto get_block; /* A read */ > > if (max_blocks == 1) Er, it doesn't apply to either 2.6.16-rc5-mm3 or 2.6.16-rc6-mm1. There's no function ext3_direct_io_get_blocks() there in fs/ext3/inode.c, AFAICT.