From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751100AbWCLW3l (ORCPT ); Sun, 12 Mar 2006 17:29:41 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751105AbWCLW3l (ORCPT ); Sun, 12 Mar 2006 17:29:41 -0500 Received: from smtp.osdl.org ([65.172.181.4]:8918 "EHLO smtp.osdl.org") by vger.kernel.org with ESMTP id S1751100AbWCLW3k convert rfc822-to-8bit (ORCPT ); Sun, 12 Mar 2006 17:29:40 -0500 Date: Sun, 12 Mar 2006 14:26:54 -0800 From: Andrew Morton To: "Rafael J. Wysocki" Cc: linux-kernel@vger.kernel.org, ak@suse.de, Mingming Cao , Badari Pulavarty Subject: Re: [discuss] Re: 2.6.16-rc5-mm3: spinlock bad magic on CPU#0 on AMD64 Message-Id: <20060312142654.650b90fb.akpm@osdl.org> In-Reply-To: <200603121349.32374.rjw@sisk.pl> References: <200603120024.04938.rjw@sisk.pl> <20060311153618.2e4b113d.akpm@osdl.org> <200603121127.28657.rjw@sisk.pl> <200603121349.32374.rjw@sisk.pl> X-Mailer: Sylpheed version 1.0.4 (GTK+ 1.2.10; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7BIT Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org "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) _