From: Forrest Liu Subject: Re: [PATCH] ext4: fix extent tree corruption that incurred by hole punch Date: Sun, 9 Dec 2012 03:01:08 +0800 Message-ID: References: <1354623069-8124-1-git-send-email-forrestl@synology.com> <50C0BDA2.4090203@redhat.com> <50C0BE40.5060003@redhat.com> <50C26AE6.9080902@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Cc: Ashish Sangwan , "Theodore Ts'o" , ext4 development To: Eric Sandeen Return-path: Received: from mail-ie0-f172.google.com ([209.85.223.172]:62281 "EHLO mail-ie0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965498Ab2LHTBJ (ORCPT ); Sat, 8 Dec 2012 14:01:09 -0500 Received: by mail-ie0-f172.google.com with SMTP id c13so5155806ieb.31 for ; Sat, 08 Dec 2012 11:01:09 -0800 (PST) In-Reply-To: <50C26AE6.9080902@redhat.com> Sender: linux-ext4-owner@vger.kernel.org List-ID: 2012/12/8 Eric Sandeen : > On 12/7/12 6:26 AM, Forrest Liu wrote: >> 2012/12/7 Ashish Sangwan : >>> On Thu, Dec 6, 2012 at 9:18 PM, Eric Sandeen wrote: >>>> On 12/6/12 9:45 AM, Eric Sandeen wrote: >>>>> On 12/4/12 6:11 AM, Forrest Liu wrote: >>>>>> Extent indexes didn't update correctly in ext4_ext_rm_idx, when depth >>>>>> of extent tree is greater than 1. >>>>> >>>>> This is interesting; we had 2 reports of similar corruption on the >>>>> list, I wonder if the application in question was doing hole punching. >>>>> I didn't expect that they were, so TBH I was pretty much ignoring >>>>> the hole-punch cases for parent index updates. Hm. I'll have >>>>> to look into that. >>>>> Could you turn your testcase into an xfstest regression test? >> >> Hi Eric, >> I will check how to do that. >>>> >>>> Also, please note that I sent an e2fsck patch to try to fix this >>>> problem after the fact; it'd be great if in your testing, you could >>>> also confirm that e2fsck w/ my patch fixes it correctly. >>>> >>> I checked you patch. >>> This was the extent tree situation after removing 1st extent index: >>> debugfs: ex abc >>> Level Entries Logical Physical Length Flags >>> 0/ 2 1/ 1 0 - 8399 32857 8400 >>> 1/ 2 1/ 4 2048 - 4081 4138 2034 >>> 2/ 2 1/339 2048 - 2053 69632 - 69637 6 >>> 2/ 2 2/339 2054 - 2059 69656 - 69661 6 >>> >>> E2fsck's output with your patch=> >>> Linux#> /dtv/usb/sdb1/e2fsck /dev/sda1 -f >>> e2fsck 1.42.6.1 (06-DEC-2012) >>> Pass 1: Checking inodes, blocks, and sizes >>> Interior extent node level 0 of inode 31: >>> Logical start 0 does not match logical start 2048 at next level. Fix? yes >>> Inode 31, i_blocks is 50856, should be 16280. Fix? yes >> >> I got similar result, pb->num_blocks is incorrect if >> ext2fs_extent_fix_parents called. > > Maybe I should ask what it looks like without my patch? I didn't > think my patch would change anything at all about block count > or use. > > -Eric > When i choose not to repair problem of logical start value, there have no message like Inode 31, i_blocks is 50856, should be 16280. Fix? -Forrest