summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/i386/isa/wd.c2
-rw-r--r--sys/kern/subr_diskslice.c10
-rw-r--r--sys/pc98/pc98/wd.c2
-rw-r--r--sys/sys/diskslice.h1
4 files changed, 12 insertions, 3 deletions
diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c
index 93a031e30c7b..9c054170d535 100644
--- a/sys/i386/isa/wd.c
+++ b/sys/i386/isa/wd.c
@@ -1210,7 +1210,7 @@ wdopen(dev_t dev, int flags, int fmt, struct proc *p)
label.d_ncylinders = du->dk_dd.d_ncylinders;
label.d_secpercyl = du->dk_dd.d_secpercyl;
label.d_secperunit = du->dk_dd.d_secperunit;
- error = dsopen(dev, fmt, 0, &du->dk_slices, &label);
+ error = dsopen(dev, fmt, DSO_BAD144, &du->dk_slices, &label);
}
du->dk_flags &= ~DKFL_LABELLING;
wdsleep(du->dk_ctrlr, "wdopn2");
diff --git a/sys/kern/subr_diskslice.c b/sys/kern/subr_diskslice.c
index 439496c0e38b..34225b86399d 100644
--- a/sys/kern/subr_diskslice.c
+++ b/sys/kern/subr_diskslice.c
@@ -429,6 +429,8 @@ dsioctl(dev, cmd, data, flags, sspp)
return (0);
case DIOCSBAD:
+ if ((ssp->dss_oflags & DSO_BAD144) == 0)
+ return (ENODEV);
if (slice == WHOLE_DISK_SLICE)
return (ENODEV);
if (!(flags & FWRITE))
@@ -829,11 +831,17 @@ dsopen(dev, mode, flags, sspp, lp)
continue;
}
if (lp1->d_flags & D_BADSECT) {
+ if ((flags & DSO_BAD144) == 0) {
+ log(LOG_ERR,
+ "%s: bad sector table no supported\n",
+ sname);
+ continue;
+ }
btp = malloc(sizeof *btp, M_DEVBUF, M_WAITOK);
TRACE(("readbad144\n"));
msg = readbad144(dev1, lp1, btp);
if (msg != NULL) {
- log(LOG_WARNING,
+ log(LOG_ERR,
"%s: cannot find bad sector table (%s)\n",
sname, msg);
free(btp, M_DEVBUF);
diff --git a/sys/pc98/pc98/wd.c b/sys/pc98/pc98/wd.c
index 6383b347bad9..4cfc1041e9c6 100644
--- a/sys/pc98/pc98/wd.c
+++ b/sys/pc98/pc98/wd.c
@@ -1336,7 +1336,7 @@ wdopen(dev_t dev, int flags, int fmt, struct proc *p)
label.d_ncylinders = du->dk_dd.d_ncylinders;
label.d_secpercyl = du->dk_dd.d_secpercyl;
label.d_secperunit = du->dk_dd.d_secperunit;
- error = dsopen(dev, fmt, 0, &du->dk_slices, &label);
+ error = dsopen(dev, fmt, DSO_BAD144, &du->dk_slices, &label);
}
du->dk_flags &= ~DKFL_LABELLING;
wdsleep(du->dk_ctrlr, "wdopn2");
diff --git a/sys/sys/diskslice.h b/sys/sys/diskslice.h
index ab2253d82ee9..79e3cbd2ea86 100644
--- a/sys/sys/diskslice.h
+++ b/sys/sys/diskslice.h
@@ -85,6 +85,7 @@ struct diskslices {
/* Flags for dsopen(). */
#define DSO_NOLABELS 1
#define DSO_ONESLICE 2
+#define DSO_BAD144 4
#define dsgetbad(dev, ssp) (ssp->dss_slices[dkslice(dev)].ds_bad)
#define dsgetlabel(dev, ssp) (ssp->dss_slices[dkslice(dev)].ds_label)