From patchwork Sun Sep 2 09:45:09 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongqiang Yang X-Patchwork-Id: 181174 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D803A2C0093 for ; Sun, 2 Sep 2012 20:21:00 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755940Ab2IBKU7 (ORCPT ); Sun, 2 Sep 2012 06:20:59 -0400 Received: from mail-pz0-f46.google.com ([209.85.210.46]:49383 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755938Ab2IBKUg (ORCPT ); Sun, 2 Sep 2012 06:20:36 -0400 Received: by mail-pz0-f46.google.com with SMTP id y13so3013380dad.19 for ; Sun, 02 Sep 2012 03:20:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=8XfNTQL+sTJLLJTrd/yKI6X2Q8OouYgMxvL2jPj8xEA=; b=sMkLyEwZJlnpkRfpfXZRqtjmPUnH9OlQhXVhJwAjcwZffJMGrZDnvgoZxyeTgKy6ah bPqmDrEsfmA9TOw3+dxn2jmuEEe7f8nFPI4FRE867L5mZA5QfcIu09rT2tRzFYWog6T9 Gw3IeAuqbC9/6sMXSP29BoCBB6wqn8zc+2LeV9Qn/svhHddT8RZmDNoW3BEzXyF08W/J hLIvHJzGXM/8B+aNt0XWVuf+VBFSxbOK3A9/7dAxvSlZgLTw6e7VDg6jWFtcKeabUTIm MGBeQPjXjnkq5H8Qru4obgjNtfa1CIMtgEEazwWFB0YfEY+VgtvxEIcSRTbKqHfQya4J Fzlg== Received: by 10.68.231.168 with SMTP id th8mr30333240pbc.14.1346581236577; Sun, 02 Sep 2012 03:20:36 -0700 (PDT) Received: from localhost.localdomain ([106.3.102.60]) by mx.google.com with ESMTPS id to6sm7490193pbc.12.2012.09.02.03.20.33 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 02 Sep 2012 03:20:35 -0700 (PDT) From: Yongqiang Yang To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, Yongqiang Yang Subject: [PATCH 2/2] ext4: check free inode count before allocaing an inode Date: Sun, 2 Sep 2012 17:45:09 +0800 Message-Id: <1346579109-25016-2-git-send-email-xiaoqiangnk@gmail.com> X-Mailer: git-send-email 1.7.5.1 In-Reply-To: <1346579109-25016-1-git-send-email-xiaoqiangnk@gmail.com> References: <1346579109-25016-1-git-send-email-xiaoqiangnk@gmail.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Recnetly, I ecountered some corrupted filesystems in which some groups' free inode counts were negative, it seemed that free inode count was overflow. This patch teaches ext4 to check free inode count before allocaing an inode. Signed-off-by: Yongqiang Yang --- fs/ext4/ialloc.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 26154b8..fa36372 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -697,6 +697,15 @@ got_group: if (!gdp) goto fail; + /* + * Check free inodes count before loading bitmap. + */ + if (ext4_free_inodes_count(sb, gdp) == 0) { + if (++group == ngroups) + group = 0; + continue; + } + brelse(inode_bitmap_bh); inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); if (!inode_bitmap_bh)