From patchwork Thu Sep 15 15:29:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bill O'Donnell X-Patchwork-Id: 9334069 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 B2EAA60839 for ; Thu, 15 Sep 2016 15:30:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A57472998D for ; Thu, 15 Sep 2016 15:30:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9A68F29991; Thu, 15 Sep 2016 15:30:26 +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 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 215792998D for ; Thu, 15 Sep 2016 15:30:26 +0000 (UTC) Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id E27327CB4; Thu, 15 Sep 2016 10:30:03 -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 D03C47CAF for ; Thu, 15 Sep 2016 10:30:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9134F304043 for ; Thu, 15 Sep 2016 08:29:58 -0700 (PDT) X-ASG-Debug-ID: 1473953396-0bf57b0f52308f20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PcFiIH7uQcVyQl4Y (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Thu, 15 Sep 2016 08:29:57 -0700 (PDT) X-Barracuda-Envelope-From: billodo@redhat.com X-Barracuda-Effective-Source-IP: mx1.redhat.com[209.132.183.28] X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id ADB0A9E630; Thu, 15 Sep 2016 15:29:56 +0000 (UTC) Received: from localhost.localdomain.com (vpn-49-118.rdu2.redhat.com [10.10.49.118]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u8FFTt1m027483; Thu, 15 Sep 2016 11:29:56 -0400 From: "Bill O'Donnell" To: linux-xfs@vger.kernel.org Subject: [PATCH v2 1/3] xfsprogs: populate fs table with xfs entries first, foreign entries last Date: Thu, 15 Sep 2016 10:29:44 -0500 X-ASG-Orig-Subj: [PATCH v2 1/3] xfsprogs: populate fs table with xfs entries first, foreign entries last Message-Id: <1473953386-10242-2-git-send-email-billodo@redhat.com> In-Reply-To: <1473953386-10242-1-git-send-email-billodo@redhat.com> References: <1473866381-28975-1-git-send-email-billodo@redhat.com> <1473953386-10242-1-git-send-email-billodo@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 15 Sep 2016 15:29:56 +0000 (UTC) X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1473953397 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: 3682 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Cc: 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: , MIME-Version: 1.0 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP Commits b20b6c2 and 29647c8 modified xfs_quota for use on non-XFS filesystems. Modifications to fs_initialise_mounts (paths.c) resulted in an xfstest fail (xfs/261), due to foreign fs paths being picked up first from the fs table. The xfs_quota print command then complained about not being able to print the foreign paths, instead of previous behavior (quiet). This patch restores correct behavior, sorting the table so that xfs entries are first, followed by foreign fs entries. The patch maintains the order of xfs entries and foreign entries in the same order as mtab entries. Then, in functions which print all paths we can simply break at the first foreign path if the -f switch is not specified. Signed-off-by: Bill O'Donnell Reviewed-by: Eric Sandeen --- include/path.h | 1 + libxcmd/paths.c | 12 +++++++++++- quota/path.c | 24 ++++++++++++++++++------ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/include/path.h b/include/path.h index 39c1a95..d077bac 100644 --- a/include/path.h +++ b/include/path.h @@ -44,6 +44,7 @@ typedef struct fs_path { } fs_path_t; extern int fs_count; /* number of entries in fs table */ +extern int xfs_fs_count; /* number of xfs entries in fs table */ extern fs_path_t *fs_table; /* array of entries in fs table */ extern fs_path_t *fs_path; /* current entry in the fs table */ extern char *mtab_file; diff --git a/libxcmd/paths.c b/libxcmd/paths.c index 4158688..3455217 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -32,6 +32,7 @@ extern char *progname; int fs_count; +int xfs_fs_count; struct fs_path *fs_table; struct fs_path *fs_path; @@ -138,7 +139,16 @@ fs_table_insert( goto out_norealloc; fs_table = tmp_fs_table; - fs_path = &fs_table[fs_count]; + /* Put foreign filesystems at the end, xfs filesystems at the front */ + if (flags & FS_FOREIGN || fs_count == 0) { + fs_path = &fs_table[fs_count]; + } else { + /* move foreign fs entries down, insert new one just before */ + memmove(&fs_table[xfs_fs_count + 1], &fs_table[xfs_fs_count], + sizeof(fs_path_t)*(fs_count - xfs_fs_count)); + fs_path = &fs_table[xfs_fs_count]; + xfs_fs_count++; + } fs_path->fs_dir = dir; fs_path->fs_prid = prid; fs_path->fs_flags = flags; diff --git a/quota/path.c b/quota/path.c index a623d25..01ccab4 100644 --- a/quota/path.c +++ b/quota/path.c @@ -75,9 +75,15 @@ static int pathlist_f(void) { int i; + struct fs_path *path; - for (i = 0; i < fs_count; i++) - printpath(&fs_table[i], i, 1, &fs_table[i] == fs_path); + for (i = 0; i < fs_count; i++) { + path = &fs_table[i]; + /* Table is ordered xfs first, then foreign */ + if (path->fs_flags & FS_FOREIGN && !foreign_allowed) + break; + printpath(path, i, 1, path == fs_path); + } return 0; } @@ -87,9 +93,14 @@ print_f( char **argv) { int i; + struct fs_path *path; - for (i = 0; i < fs_count; i++) - printpath(&fs_table[i], i, 0, 0); + for (i = 0; i < fs_count; i++) { + path = &fs_table[i]; + if (path->fs_flags & FS_FOREIGN && !foreign_allowed) + break; + printpath(path, i, 0, 0); + } return 0; } @@ -99,6 +110,7 @@ path_f( char **argv) { int i; + int max = foreign_allowed ? fs_count : xfs_fs_count; if (fs_count == 0) { printf(_("No paths are available\n")); @@ -109,9 +121,9 @@ path_f( return pathlist_f(); i = atoi(argv[1]); - if (i < 0 || i >= fs_count) { + if (i < 0 || i >= max) { printf(_("value %d is out of range (0-%d)\n"), - i, fs_count-1); + i, max - 1); } else { fs_path = &fs_table[i]; pathlist_f();