From patchwork Fri Aug 26 00:00:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 9300687 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 52A3B607D8 for ; Fri, 26 Aug 2016 00:01:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4214829298 for ; Fri, 26 Aug 2016 00:01:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 34DB5292AB; Fri, 26 Aug 2016 00:01:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from oss.sgi.com (oss.sgi.com [192.48.182.195]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DDAF429298 for ; Fri, 26 Aug 2016 00:01:07 +0000 (UTC) Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id BDDB98466; Thu, 25 Aug 2016 19:00:53 -0500 (CDT) X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8C5448457 for ; Thu, 25 Aug 2016 19:00:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5C440304039 for ; Thu, 25 Aug 2016 17:00:51 -0700 (PDT) X-ASG-Debug-ID: 1472169648-0bf57b5311209f80001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 48JRZZ5bTLui7fJ7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Thu, 25 Aug 2016 17:00:48 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Effective-Source-IP: userp1040.oracle.com[156.151.31.81] X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u7Q00iIE006744 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 26 Aug 2016 00:00:44 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u7Q00iZL011800 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 26 Aug 2016 00:00:44 GMT Received: from abhmp0012.oracle.com (abhmp0012.oracle.com [141.146.116.18]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u7Q00cOH023163; Fri, 26 Aug 2016 00:00:43 GMT Received: from localhost (/10.145.178.207) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 25 Aug 2016 17:00:37 -0700 Subject: [PATCH 19/29] xfs_db: make fsmap query the realtime reverse mapping tree From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 19/29] xfs_db: make fsmap query the realtime reverse mapping tree To: david@fromorbit.com, darrick.wong@oracle.com Date: Thu, 25 Aug 2016 17:00:36 -0700 Message-ID: <147216963661.7022.10313609648459852221.stgit@birch.djwong.org> In-Reply-To: <147216950911.7022.438115723996286926.stgit@birch.djwong.org> References: <147216950911.7022.438115723996286926.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1472169648 X-Barracuda-Encrypted: ECDHE-RSA-AES256-GCM-SHA384 X-Barracuda-URL: https://192.48.176.25:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 3504 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.32328 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Cc: linux-xfs@vger.kernel.org, xfs@oss.sgi.com X-BeenThere: xfs@oss.sgi.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP Extend the 'fsmap' debugger command to support querying the realtime rmap btree via a new -r argument. Signed-off-by: Darrick J. Wong --- db/fsmap.c | 70 +++++++++++++++++++++++++++++++++++++++++++--- libxfs/libxfs_api_defs.h | 1 + 2 files changed, 67 insertions(+), 4 deletions(-) diff --git a/db/fsmap.c b/db/fsmap.c index a25461e..bb08421 100644 --- a/db/fsmap.c +++ b/db/fsmap.c @@ -36,8 +36,8 @@ fsmap_fn( { struct fsmap_info *info = priv; - dbprintf(_("%llu: %u/%u len %u owner %lld offset %llu bmbt %d attrfork %d extflag %d\n"), - info->nr, info->agno, rec->rm_startblock, + dbprintf(_("%llu: %d/%llu len %llu owner %lld offset %llu bmbt %d attrfork %d extflag %d\n"), + info->nr, (signed)info->agno, rec->rm_startblock, rec->rm_blockcount, rec->rm_owner, rec->rm_offset, !!(rec->rm_flags & XFS_RMAP_BMBT_BLOCK), !!(rec->rm_flags & XFS_RMAP_ATTR_FORK), @@ -113,6 +113,61 @@ fsmap( } } +static void +fsmap_rt( + xfs_fsblock_t start_fsb, + xfs_fsblock_t end_fsb) +{ + struct fsmap_info info; + xfs_daddr_t eofs; + struct xfs_rmap_irec low; + struct xfs_rmap_irec high; + struct xfs_btree_cur *bt_cur; + struct xfs_inode *ip; + int error; + + if (mp->m_sb.sb_rblocks == 0) + return; + + eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rblocks); + if (XFS_FSB_TO_DADDR(mp, end_fsb) >= eofs) + end_fsb = XFS_DADDR_TO_FSB(mp, eofs - 1); + + low.rm_startblock = start_fsb; + low.rm_owner = 0; + low.rm_offset = 0; + low.rm_flags = 0; + high.rm_startblock = end_fsb; + high.rm_owner = ULLONG_MAX; + high.rm_offset = ULLONG_MAX; + high.rm_flags = XFS_RMAP_ATTR_FORK | XFS_RMAP_BMBT_BLOCK | + XFS_RMAP_UNWRITTEN; + + info.nr = 0; + + error = -libxfs_iget(mp, NULL, mp->m_sb.sb_rrmapino, 0, &ip, 0); + if (error) { + dbprintf(_("%d - couldn't iget rtrmap inode.\n"), + error); + return; + } + + bt_cur = libxfs_rtrmapbt_init_cursor(mp, NULL, ip); + if (!bt_cur) + goto out_ino; + + info.agno = NULLAGNUMBER; + error = -libxfs_rmap_query_range(bt_cur, &low, &high, + fsmap_fn, &info); + if (error) + dbprintf(_("Error %d while querying fsmap btree.\n"), + error); + + libxfs_btree_del_cursor(bt_cur, XFS_BTREE_NOERROR); +out_ino: + IRELE(ip); +} + int fsmap_f( int argc, @@ -122,14 +177,18 @@ fsmap_f( int c; xfs_fsblock_t start_fsb = 0; xfs_fsblock_t end_fsb = NULLFSBLOCK; + bool is_rt = false; if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) { dbprintf(_("Filesystem does not support reverse mapping btree.\n")); return 0; } - while ((c = getopt(argc, argv, "")) != EOF) { + while ((c = getopt(argc, argv, "r")) != EOF) { switch (c) { + case 'r': + is_rt = true; + break; default: dbprintf(_("Bad option for fsmap command.\n")); return 0; @@ -152,7 +211,10 @@ fsmap_f( } } - fsmap(start_fsb, end_fsb); + if (is_rt) + fsmap_rt(start_fsb, end_fsb); + else + fsmap(start_fsb, end_fsb); return 0; } diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h index c66e31b..a6ea865 100644 --- a/libxfs/libxfs_api_defs.h +++ b/libxfs/libxfs_api_defs.h @@ -143,5 +143,6 @@ #define xfs_rmap_lookup_le_range libxfs_rmap_lookup_le_range #define xfs_refc_block libxfs_refc_block #define xfs_rtrmapbt_maxrecs libxfs_rtrmapbt_maxrecs +#define xfs_rtrmapbt_init_cursor libxfs_rtrmapbt_init_cursor #endif /* __LIBXFS_API_DEFS_H__ */