diff options
author | Bob Peterson <rpeterso@redhat.com> | 2009-08-24 05:44:18 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2009-08-24 05:44:18 -0400 |
commit | d34843d0c4a20872f3f3bfb510328bd043b939ff (patch) | |
tree | f10ab461e0a7e3923856b56eeba75383dffafac7 /fs/gfs2/super.c | |
parent | cd0120751d631bc4b99f180c1c22de2caca98207 (diff) |
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>
Diffstat (limited to 'fs/gfs2/super.c')
-rw-r--r-- | fs/gfs2/super.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 85bd2bc8c1de..7a5c128e8776 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -68,6 +68,8 @@ enum { | |||
68 | Opt_discard, | 68 | Opt_discard, |
69 | Opt_nodiscard, | 69 | Opt_nodiscard, |
70 | Opt_commit, | 70 | Opt_commit, |
71 | Opt_err_withdraw, | ||
72 | Opt_err_panic, | ||
71 | Opt_error, | 73 | Opt_error, |
72 | }; | 74 | }; |
73 | 75 | ||
@@ -97,6 +99,8 @@ static const match_table_t tokens = { | |||
97 | {Opt_discard, "discard"}, | 99 | {Opt_discard, "discard"}, |
98 | {Opt_nodiscard, "nodiscard"}, | 100 | {Opt_nodiscard, "nodiscard"}, |
99 | {Opt_commit, "commit=%d"}, | 101 | {Opt_commit, "commit=%d"}, |
102 | {Opt_err_withdraw, "errors=withdraw"}, | ||
103 | {Opt_err_panic, "errors=panic"}, | ||
100 | {Opt_error, NULL} | 104 | {Opt_error, NULL} |
101 | }; | 105 | }; |
102 | 106 | ||
@@ -152,6 +156,11 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options) | |||
152 | args->ar_localcaching = 1; | 156 | args->ar_localcaching = 1; |
153 | break; | 157 | break; |
154 | case Opt_debug: | 158 | case Opt_debug: |
159 | if (args->ar_errors == GFS2_ERRORS_PANIC) { | ||
160 | fs_info(sdp, "-o debug and -o errors=panic " | ||
161 | "are mutually exclusive.\n"); | ||
162 | return -EINVAL; | ||
163 | } | ||
155 | args->ar_debug = 1; | 164 | args->ar_debug = 1; |
156 | break; | 165 | break; |
157 | case Opt_nodebug: | 166 | case Opt_nodebug: |
@@ -205,6 +214,17 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options) | |||
205 | return rv ? rv : -EINVAL; | 214 | return rv ? rv : -EINVAL; |
206 | } | 215 | } |
207 | break; | 216 | break; |
217 | case Opt_err_withdraw: | ||
218 | args->ar_errors = GFS2_ERRORS_WITHDRAW; | ||
219 | break; | ||
220 | case Opt_err_panic: | ||
221 | if (args->ar_debug) { | ||
222 | fs_info(sdp, "-o debug and -o errors=panic " | ||
223 | "are mutually exclusive.\n"); | ||
224 | return -EINVAL; | ||
225 | } | ||
226 | args->ar_errors = GFS2_ERRORS_PANIC; | ||
227 | break; | ||
208 | case Opt_error: | 228 | case Opt_error: |
209 | default: | 229 | default: |
210 | fs_info(sdp, "invalid mount option: %s\n", o); | 230 | 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) | |||
1226 | lfsecs = sdp->sd_tune.gt_log_flush_secs; | 1246 | lfsecs = sdp->sd_tune.gt_log_flush_secs; |
1227 | if (lfsecs != 60) | 1247 | if (lfsecs != 60) |
1228 | seq_printf(s, ",commit=%d", lfsecs); | 1248 | seq_printf(s, ",commit=%d", lfsecs); |
1249 | if (args->ar_errors != GFS2_ERRORS_DEFAULT) { | ||
1250 | const char *state; | ||
1251 | |||
1252 | switch (args->ar_errors) { | ||
1253 | case GFS2_ERRORS_WITHDRAW: | ||
1254 | state = "withdraw"; | ||
1255 | break; | ||
1256 | case GFS2_ERRORS_PANIC: | ||
1257 | state = "panic"; | ||
1258 | break; | ||
1259 | default: | ||
1260 | state = "unknown"; | ||
1261 | break; | ||
1262 | } | ||
1263 | seq_printf(s, ",errors=%s", state); | ||
1264 | } | ||
1229 | return 0; | 1265 | return 0; |
1230 | } | 1266 | } |
1231 | 1267 | ||