GFS2: Add "-o errors=panic|withdraw" mount options
This patch adds "-o errors=panic" and "-o errors=withdraw" to the gfs2 mount options. The "errors=withdraw" option is today's current behaviour, meaning to withdraw from the file system if a non-serious gfs2 error occurs. The new "errors=panic" option tells gfs2 to force a kernel panic if a non-serious gfs2 file system error occurs. This may be useful, for example, where fabric-level fencing is used that has no way to reboot (such as fence_scsi). Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
committed by
Steven Whitehouse
parent
cd0120751d
commit
d34843d0c4
@ -68,6 +68,8 @@ enum {
|
||||
Opt_discard,
|
||||
Opt_nodiscard,
|
||||
Opt_commit,
|
||||
Opt_err_withdraw,
|
||||
Opt_err_panic,
|
||||
Opt_error,
|
||||
};
|
||||
|
||||
@ -97,6 +99,8 @@ static const match_table_t tokens = {
|
||||
{Opt_discard, "discard"},
|
||||
{Opt_nodiscard, "nodiscard"},
|
||||
{Opt_commit, "commit=%d"},
|
||||
{Opt_err_withdraw, "errors=withdraw"},
|
||||
{Opt_err_panic, "errors=panic"},
|
||||
{Opt_error, NULL}
|
||||
};
|
||||
|
||||
@ -152,6 +156,11 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options)
|
||||
args->ar_localcaching = 1;
|
||||
break;
|
||||
case Opt_debug:
|
||||
if (args->ar_errors == GFS2_ERRORS_PANIC) {
|
||||
fs_info(sdp, "-o debug and -o errors=panic "
|
||||
"are mutually exclusive.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
args->ar_debug = 1;
|
||||
break;
|
||||
case Opt_nodebug:
|
||||
@ -205,6 +214,17 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options)
|
||||
return rv ? rv : -EINVAL;
|
||||
}
|
||||
break;
|
||||
case Opt_err_withdraw:
|
||||
args->ar_errors = GFS2_ERRORS_WITHDRAW;
|
||||
break;
|
||||
case Opt_err_panic:
|
||||
if (args->ar_debug) {
|
||||
fs_info(sdp, "-o debug and -o errors=panic "
|
||||
"are mutually exclusive.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
args->ar_errors = GFS2_ERRORS_PANIC;
|
||||
break;
|
||||
case Opt_error:
|
||||
default:
|
||||
fs_info(sdp, "invalid mount option: %s\n", o);
|
||||
@ -1226,6 +1246,22 @@ static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
|
||||
lfsecs = sdp->sd_tune.gt_log_flush_secs;
|
||||
if (lfsecs != 60)
|
||||
seq_printf(s, ",commit=%d", lfsecs);
|
||||
if (args->ar_errors != GFS2_ERRORS_DEFAULT) {
|
||||
const char *state;
|
||||
|
||||
switch (args->ar_errors) {
|
||||
case GFS2_ERRORS_WITHDRAW:
|
||||
state = "withdraw";
|
||||
break;
|
||||
case GFS2_ERRORS_PANIC:
|
||||
state = "panic";
|
||||
break;
|
||||
default:
|
||||
state = "unknown";
|
||||
break;
|
||||
}
|
||||
seq_printf(s, ",errors=%s", state);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user