From patchwork Fri Nov 7 02:07:41 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gui Hecheng X-Patchwork-Id: 5249241 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id A87139F2F1 for ; Fri, 7 Nov 2014 02:09:22 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1798F20138 for ; Fri, 7 Nov 2014 02:09:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 217AD2012E for ; Fri, 7 Nov 2014 02:09:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751256AbaKGCJQ (ORCPT ); Thu, 6 Nov 2014 21:09:16 -0500 Received: from cn.fujitsu.com ([59.151.112.132]:59987 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751051AbaKGCJP (ORCPT ); Thu, 6 Nov 2014 21:09:15 -0500 X-IronPort-AV: E=Sophos;i="5.04,848,1406563200"; d="scan'208";a="42997199" Received: from unknown (HELO edo.cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 07 Nov 2014 10:06:03 +0800 Received: from G08CNEXCHPEKD01.g08.fujitsu.local (localhost.localdomain [127.0.0.1]) by edo.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id sA7292Lb011247 for ; Fri, 7 Nov 2014 10:09:02 +0800 Received: from localhost.localdomain (10.167.226.111) by G08CNEXCHPEKD01.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.181.6; Fri, 7 Nov 2014 10:09:12 +0800 From: Gui Hecheng To: CC: Gui Hecheng Subject: [PATCH] btrfs-progs: skip fs with no seed when build seed/sprout mapping for fi show Date: Fri, 7 Nov 2014 10:07:41 +0800 Message-ID: <1415326063-8838-1-git-send-email-guihc.fnst@cn.fujitsu.com> X-Mailer: git-send-email 1.8.1.4 MIME-Version: 1.0 X-Originating-IP: [10.167.226.111] Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no need to try to build seed/sprout mapping for those btrfs without seed devices, so just skip such fs. We could get the total number of devices from the disk super block, if it equals the number of items in list @fs_devices->devices, then there shouldn't be any seed devices. Signed-off-by: Gui Hecheng --- cmds-filesystem.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/cmds-filesystem.c b/cmds-filesystem.c index 67fe52b..0d49cd1 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -795,6 +795,22 @@ out: return ret; } +static int no_seed_devices(struct btrfs_fs_devices *fs_devices) +{ + struct btrfs_device *device; + int dev_cnt_total, dev_cnt = 0; + + device = list_first_entry(&fs_devices->devices, struct btrfs_device, + dev_list); + + dev_cnt_total = device->total_devs; + + list_for_each_entry(device, &fs_devices->devices, dev_list) + dev_cnt++; + + return dev_cnt_total == dev_cnt; +} + static int map_seed_devices(struct list_head *all_uuids) { struct btrfs_fs_devices *cur_fs, *cur_seed; @@ -812,6 +828,11 @@ static int map_seed_devices(struct list_head *all_uuids) struct btrfs_device, dev_list); if (!device) continue; + + /* skip fs without seeds */ + if (no_seed_devices(cur_fs)) + continue; + /* * open_ctree_* detects seed/sprout mapping */ @@ -976,8 +997,8 @@ devs_only: } /* - * scan_for_btrfs() don't build seed/sprout mapping, - * do mapping build for each scanned fs here + * The seed/sprout mapping are not detected yet, + * do mapping build for all umounted fs */ ret = map_seed_devices(&all_uuids); if (ret) {