@@ -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,7 @@ 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_SKIP_CHECK;
help_cmd.args = _("[command]");
help_cmd.oneline = _("help for one or all commands");
@@ -18,6 +18,7 @@
#include "platform_defs.h"
#include "command.h"
+#include "../quota/init.h"
static cmdinfo_t quit_cmd;
@@ -38,7 +39,7 @@ 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_SKIP_CHECK;
quit_cmd.oneline = _("exit the program");
add_command(&quit_cmd);
@@ -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 not a valid command! */
+ fprintf(stderr, _("%s command is for XFS filesystems only\n"),
+ ct->name);
+ return 0;
}
static void
@@ -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 available */
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@redhat.com> --- libxcmd/help.c | 3 ++- libxcmd/quit.c | 3 ++- quota/init.c | 29 ++++++++++++++++++++--------- quota/init.h | 2 ++ 4 files changed, 26 insertions(+), 11 deletions(-)