From: "Aneesh Kumar K.V" Subject: Re: [PATCH] ext4: When reading from fallocated blocks make sure we return zero. Date: Mon, 18 Feb 2008 13:15:12 +0530 Message-ID: <20080218074512.GA16067@skywalker> References: <1203099414-8815-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> <1203104584.3598.4.camel@localhost.localdomain> <20080216032334.GA6501@skywalker> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: tytso@mit.edu, linux-ext4@vger.kernel.org To: Mingming Cao Return-path: Received: from E23SMTP03.au.ibm.com ([202.81.18.172]:52016 "EHLO e23smtp03.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754138AbYBRHpb (ORCPT ); Mon, 18 Feb 2008 02:45:31 -0500 Received: from d23relay03.au.ibm.com (d23relay03.au.ibm.com [202.81.18.234]) by e23smtp03.au.ibm.com (8.13.1/8.13.1) with ESMTP id m1I7iq9e005869 for ; Mon, 18 Feb 2008 18:44:52 +1100 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m1I7jPSo2756690 for ; Mon, 18 Feb 2008 18:45:25 +1100 Received: from d23av04.au.ibm.com (loopback [127.0.0.1]) by d23av04.au.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m1I7jP0s031537 for ; Mon, 18 Feb 2008 18:45:25 +1100 Content-Disposition: inline In-Reply-To: <20080216032334.GA6501@skywalker> Sender: linux-ext4-owner@vger.kernel.org List-ID: On Sat, Feb 16, 2008 at 08:53:34AM +0530, Aneesh Kumar K.V wrote: > On Fri, Feb 15, 2008 at 11:43:04AM -0800, Mingming Cao wrote: > > On Fri, 2008-02-15 at 23:46 +0530, Aneesh Kumar K.V wrote: > > > fallocate blocks are considered as sparse area and read from them should > > > return zero. ext4_ext_get_blocks should return zero for read request. > > > > > > > The patch itself looks harmless, but I still don't see how this could > > fix the problem you described at irc: a write hit a BUG_ON() in > > fs/buffer.c saying the buffer is not mapped. Could you add more details > > here? > > Write will take the below call chain > > ext4_write_begin > block_write_begin > __block_prepare_write > ext4_getblock > ext4_get_blocks_wrap > (1) ext4_ext_get_blocks with create = 0 return allocated > ll_rw_block if buffer not uptodate. > submit_bh > BUG_ON(!buffer_mapped(bh)) > > > ext4_ext_get_blocks at (1) should have returned 0. That would cause > ext4_get_blocks_wrap to again call ext4_ext_get_blocks with create = 1 > and that would have returned us the buffer head which is mapped. This > would also result in splitting the extent to initialized and > uninitialized one. > The change is also needed to get mmap on fallocate space to work. ------------[ cut here ]------------ WARNING: at fs/buffer.c:1680 __block_write_full_page+0x101/0x2f1() Modules linked in: Pid: 2478, comm: mmaptest Not tainted 2.6.25-rc1 #12 [] warn_on_slowpath+0x41/0x51 [] ? native_sched_clock+0x2d/0x9f [] ? __lock_acquire+0xacb/0xb13 [] ? __lock_acquire+0xacb/0xb13 [] __block_write_full_page+0x101/0x2f1 [] ? ext4_get_block+0x0/0xc0 [] block_write_full_page+0xc8/0xd1 [] ? ext4_get_block+0x0/0xc0 [] ext4_ordered_writepage+0xad/0x146 [] ? bget_one+0x0/0xb [] __writepage+0xb/0x25 [] write_cache_pages+0x180/0x287 [] ? __writepage+0x0/0x25 [] ? __do_fault+0x2e2/0x324 [] ? unlock_page+0x25/0x28 [] generic_writepages+0x1d/0x27 [] do_writepages+0x2c/0x34 [] __filemap_fdatawrite_range+0x5b/0x67 [] filemap_fdatawrite+0x15/0x17 [] do_fsync+0x2c/0x9a [] __do_fsync+0x20/0x2f [] sys_fsync+0xd/0xf [] sysenter_past_esp+0x5f/0xa5 ======================= ---[ end trace 5ba60b430e0af601 ]--- -aneesh