floppy disk controller broken
John Baldwin
jhb at freebsd.org
Wed Feb 11 14:16:13 PST 2009
On Thursday 18 September 2008 3:53:06 am Michel Talon wrote:
> On Wed, Sep 17, 2008 at 05:13:39PM -0400, John Baldwin wrote:
> > On Wednesday 17 September 2008 11:04:33 am Michel Talon wrote:
> > > Hello,
> > >
> > > when testing FreeBSD-7.1-BETA i discovered that the floppy disk
> > > controller doesn't work correctly. Trying to format a floppy (perhaps
> > > with bad blocks) i get:
> > > Processing fdformat: ioctl(FD_FORM): Device not configured
> > > instead of the normal E letter. I then checked the same problem is
> > > present on FreeBSD-6.3 and it has been reported by Beech Rintoul (*) in
> > > 2006! Of course the floppy disk driver is particularly messy, but
> > > this is not pretty.
> > >
> > > (*) i386/103862: Error with fdformat
> >
> > It looks like the ioctl to format a track used to never report failures
from
> > the controller. The newer driver does. What I've done with fdformat is
to
> > make it just ignore the errors in userland instead. Try this:
> >
> > Index: fdformat.c
> > ===================================================================
> > --- fdformat.c (revision 183112)
> > +++ fdformat.c (working copy)
> > @@ -75,8 +75,7 @@
> > f.fd_formb_secno(i) = il[i+1];
> > f.fd_formb_secsize(i) = secsize;
> > }
> > - if(ioctl(fd, FD_FORM, (caddr_t)&f) < 0)
> > - err(EX_OSERR, "ioctl(FD_FORM)");
> > + (void)ioctl(fd, FD_FORM, (caddr_t)&f);
> > }
> >
> > static int
> >
> >
> > --
> > John Baldwin
>
> This doesn't work any more. This time i get
> niobe# fdformat fd0
> Format 1440K floppy `/dev/fd0'? (y/n): y
> Processing EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE done.
>
> where only the first E takes some time to be printed, and all subsequent
> ones are printed instantaneously, that is all other formatting is not
> tried. In principle the formatting process must try each of the
> "sectors" in turn, and can come up with a series of V and F.
>
> Moreover, trying to write to the floppy:
> niobe# dd if=/dev/zero of=/dev/fd0 conv=noerror
> dd: /dev/fd0: Input/output error
> 5+0 records in
> 4+0 records out
> 2048 bytes transferred in 4.054404 secs (505 bytes/sec)
>
> I don't expect such result. Traditionnally writing works, while reading
> may fail. Here reading fails with incoherent messages:
> dd: /dev/fd0: Device not configured
> 3+0 records in
> 3+0 records out
> 1536 bytes transferred in 2.595216 secs (592 bytes/sec)
> repeated a large number of times. But nothing in dmesg, contrary to the
> tradition which showed the defective sectors.
>
> In conclusion i am under the impression that the in kernel driver is
> severely botched. Of course nobody uses floppies any more, but this is
> quite ugly.
There are actually changes to the floppy driver in HEAD that I think address
this. I don't recall if they were MFC'd to 7.
--
John Baldwin
More information about the freebsd-stable
mailing list