|
@@ -38,24 +38,30 @@ int gfs2_lm_withdraw(struct gfs2_sbd *sdp, char *fmt, ...)
|
|
|
const struct lm_lockops *lm = ls->ls_ops;
|
|
|
va_list args;
|
|
|
|
|
|
- if (test_and_set_bit(SDF_SHUTDOWN, &sdp->sd_flags))
|
|
|
+ if (sdp->sd_args.ar_errors == GFS2_ERRORS_WITHDRAW &&
|
|
|
+ test_and_set_bit(SDF_SHUTDOWN, &sdp->sd_flags))
|
|
|
return 0;
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
vprintk(fmt, args);
|
|
|
va_end(args);
|
|
|
|
|
|
- fs_err(sdp, "about to withdraw this file system\n");
|
|
|
- BUG_ON(sdp->sd_args.ar_debug);
|
|
|
+ if (sdp->sd_args.ar_errors == GFS2_ERRORS_WITHDRAW) {
|
|
|
+ fs_err(sdp, "about to withdraw this file system\n");
|
|
|
+ BUG_ON(sdp->sd_args.ar_debug);
|
|
|
|
|
|
- kobject_uevent(&sdp->sd_kobj, KOBJ_OFFLINE);
|
|
|
+ kobject_uevent(&sdp->sd_kobj, KOBJ_OFFLINE);
|
|
|
|
|
|
- if (lm->lm_unmount) {
|
|
|
- fs_err(sdp, "telling LM to unmount\n");
|
|
|
- lm->lm_unmount(sdp);
|
|
|
+ if (lm->lm_unmount) {
|
|
|
+ fs_err(sdp, "telling LM to unmount\n");
|
|
|
+ lm->lm_unmount(sdp);
|
|
|
+ }
|
|
|
+ fs_err(sdp, "withdrawn\n");
|
|
|
+ dump_stack();
|
|
|
}
|
|
|
- fs_err(sdp, "withdrawn\n");
|
|
|
- dump_stack();
|
|
|
+
|
|
|
+ if (sdp->sd_args.ar_errors == GFS2_ERRORS_PANIC)
|
|
|
+ panic("GFS2: fsid=%s: panic requested.\n", sdp->sd_fsname);
|
|
|
|
|
|
return -1;
|
|
|
}
|
|
@@ -93,17 +99,24 @@ int gfs2_assert_warn_i(struct gfs2_sbd *sdp, char *assertion,
|
|
|
gfs2_tune_get(sdp, gt_complain_secs) * HZ))
|
|
|
return -2;
|
|
|
|
|
|
- printk(KERN_WARNING
|
|
|
- "GFS2: fsid=%s: warning: assertion \"%s\" failed\n"
|
|
|
- "GFS2: fsid=%s: function = %s, file = %s, line = %u\n",
|
|
|
- sdp->sd_fsname, assertion,
|
|
|
- sdp->sd_fsname, function, file, line);
|
|
|
+ if (sdp->sd_args.ar_errors == GFS2_ERRORS_WITHDRAW)
|
|
|
+ printk(KERN_WARNING
|
|
|
+ "GFS2: fsid=%s: warning: assertion \"%s\" failed\n"
|
|
|
+ "GFS2: fsid=%s: function = %s, file = %s, line = %u\n",
|
|
|
+ sdp->sd_fsname, assertion,
|
|
|
+ sdp->sd_fsname, function, file, line);
|
|
|
|
|
|
if (sdp->sd_args.ar_debug)
|
|
|
BUG();
|
|
|
else
|
|
|
dump_stack();
|
|
|
|
|
|
+ if (sdp->sd_args.ar_errors == GFS2_ERRORS_PANIC)
|
|
|
+ panic("GFS2: fsid=%s: warning: assertion \"%s\" failed\n"
|
|
|
+ "GFS2: fsid=%s: function = %s, file = %s, line = %u\n",
|
|
|
+ sdp->sd_fsname, assertion,
|
|
|
+ sdp->sd_fsname, function, file, line);
|
|
|
+
|
|
|
sdp->sd_last_warning = jiffies;
|
|
|
|
|
|
return -1;
|