On Tue, Aug 23, 2016 at 11:54:48AM -0500, Eric Sandeen wrote: > > > On 8/23/16 11:40 AM, Bill O'Donnell wrote: > > Further changes to allow xfs_quota to be used on foreign filesystem(s) > > (e.g. ext4) for project quota testing in xfstests. > > > > Add CMD_SKIP_CHECK to enable "generic" xfs_quota commands (help and > > quit) when xfs_quota is run on foreign filesystems. > > Use CMD_FLAG_FOREIGN_OK on commands suitable for foreign filesystems. > > Refactor init_check_command in quota/init.c for clarity. > > > > Signed-off-by: Bill O'Donnell <billodo@xxxxxxxxxx> > > --- > > libxcmd/help.c | 4 +++- > > libxcmd/quit.c | 4 +++- > > quota/init.c | 29 ++++++++++++++++++++--------- > > quota/init.h | 2 ++ > > 4 files changed, 28 insertions(+), 11 deletions(-) > > > > diff --git a/libxcmd/help.c b/libxcmd/help.c > > index fad0ab9..d2e72a0 100644 > > --- a/libxcmd/help.c > > +++ b/libxcmd/help.c > > @@ -18,6 +18,7 @@ > > > > #include "platform_defs.h" > > #include "command.h" > > +#include "../quota/init.h" > > > > static cmdinfo_t help_cmd; > > static void help_onecmd(const char *cmd, const cmdinfo_t *ct); > > @@ -88,7 +89,8 @@ help_init(void) > > help_cmd.cfunc = help_f; > > help_cmd.argmin = 0; > > help_cmd.argmax = 1; > > - help_cmd.flags = CMD_FLAG_GLOBAL; > > + help_cmd.flags = CMD_FLAG_GLOBAL | CMD_FLAG_FOREIGN_OK | > > + CMD_SKIP_CHECK; > > Nitpick, but no need to set both FOREIGN_OK and SKIP_CHECK, right? > If the first is set, the 2nd is never tested (below), I think? Yes. Good catch. > > > help_cmd.args = _("[command]"); > > help_cmd.oneline = _("help for one or all commands"); > > > > diff --git a/libxcmd/quit.c b/libxcmd/quit.c > > index 0183b8f..9dbd29a 100644 > > --- a/libxcmd/quit.c > > +++ b/libxcmd/quit.c > > @@ -18,6 +18,7 @@ > > > > #include "platform_defs.h" > > #include "command.h" > > +#include "../quota/init.h" > > > > static cmdinfo_t quit_cmd; > > > > @@ -38,7 +39,8 @@ quit_init(void) > > quit_cmd.cfunc = quit_f; > > quit_cmd.argmin = -1; > > quit_cmd.argmax = -1; > > - quit_cmd.flags = CMD_FLAG_GLOBAL; > > + quit_cmd.flags = CMD_FLAG_GLOBAL | CMD_FLAG_FOREIGN_OK | > > + CMD_SKIP_CHECK; > > quit_cmd.oneline = _("exit the program"); > > > > add_command(&quit_cmd); > > diff --git a/quota/init.c b/quota/init.c > > index 137cd68..b487dd5 100644 > > --- a/quota/init.c > > +++ b/quota/init.c > > @@ -109,15 +109,26 @@ static int > > init_check_command( > > const cmdinfo_t *ct) > > { > > - if (fs_path && > > - !(ct->flags & CMD_FLAG_FOREIGN_OK) && > > - (fs_path->fs_flags & FS_FOREIGN)) { > > - fprintf(stderr, > > - _("foreign mount active, %s command is for XFS filesystems only\n"), > > - ct->name); > > - return 0; > > - } > > - return 1; > > + if (!fs_path) > > + return 1; > > + > > + /* Always run commands that we are told to skip here */ > > + if (ct->flags & CMD_SKIP_CHECK) > > + return 1; > > + > > + /* if it's an XFS filesystem, always run the command */ > > + if (!(fs_path->fs_flags & FS_FOREIGN)) > > + return 1; > > + > > + /* If the user specified foreign filesysetms are ok, run it */ > > + if (foreign_allowed && > > + (ct->flags & CMD_FLAG_FOREIGN_OK)) > > + return 1; > > + > > + /* foreign filesystem and it's no a valid command! */ > > s/no/not/ while you're at it :) > Yep. > > + fprintf(stderr, _("%s command is for XFS filesystems only\n"), > > + ct->name); > > + return 0; > > } > > > > static void > > diff --git a/quota/init.h b/quota/init.h > > index 6879855..aa1cc51 100644 > > --- a/quota/init.h > > +++ b/quota/init.h > > @@ -31,3 +31,5 @@ extern void report_init(void); > > extern void state_init(void); > > > > extern void init_cvtnum(unsigned int *, unsigned int *); > > + > > +#define CMD_SKIP_CHECK (1<<0) /* command is always run */ > > how about "always available" - it's not run unless it's invoked. ;) Agreed. Thanks for the review- Bill > > -Eric > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs