@BABOLO modify 2005-04-26 Original http://www.ambrisko.com/doug/ata/ --- sys/kern/subr_disk.c +++ sys/kern/subr_disk.c @@ -195,8 +195,9 @@ error = dsopen(dev, devtype, dp->d_dsflags, &dp->d_slice, &dp->d_label); - if (!dsisopen(dp->d_slice)) - dp->d_devsw->d_close(pdev, oflags, devtype, p); + if (!dsisopen(dp->d_slice)) + if(dp->d_devsw) + dp->d_devsw->d_close(pdev, oflags, devtype, p); out: dp->d_flags &= ~DISKFLAG_LOCK; if (dp->d_flags & DISKFLAG_WANTED) { --- sys/kern/subr_diskslice.c +++ sys/kern/subr_diskslice.c @@ -321,7 +321,7 @@ struct diskslice *sp; struct diskslices *ssp; - for (slice = 0, ssp = *sspp; slice < ssp->dss_nslices; slice++) { + for (slice = 0, ssp = *sspp; ssp && slice < ssp->dss_nslices; slice++) { sp = &ssp->dss_slices[slice]; free_ds_label(ssp, slice); }