kern/116538: [fdc] [patch] reintroduce FD_NO_CHLINE flag for fdc(4)
Eugene Grosbein
eugen at grosbein.pp.ru
Fri Sep 21 22:50:02 PDT 2007
>Number: 116538
>Category: kern
>Synopsis: [fdc] [patch] reintroduce FD_NO_CHLINE flag for fdc(4)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Sep 22 05:50:01 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator: Eugene Grosbein
>Release: FreeBSD 6.2-STABLE i386
>Organization:
Svyaz-Service JSC
>Environment:
System: FreeBSD grosbein.pp.ru 6.2-STABLE FreeBSD 6.2-STABLE #2: Sun Sep 16 16:54:23 KRAST 2007 eu at grosbein.pp.ru:/home/obj/usr/local/src/sys/DADV i386
>Description:
Workaround for floppy disk drives missing media change indication
support (FD_NO_CHLINE flag for fdc(4)) was removed in 2001 after
media change detection was fixed in fdc(4) and believed to work
reliably.
This is no longer true these days when new motherboards
have FDD controlles that miss Configuration Control Register,
so fdc(4) cannot detect media change. We need FD_NO_CHLINE flag
again until fdc(4) fixed. See commit log message for
sys/dev/fdc/fdc.c,v.1.307.2.4 for additional details.
>How-To-Repeat:
Take motherboard which FDD controller does not have CCR.
Modern Intel desktop motherboards fit, also you may get
more examples from
http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/103841
Boot kernel with fdc(4) compiled in or kldload fdc.ko
when there is write-protected floppy in the drive.
Then do:
echo -n > /dev/fd0
You'll get 'Read-only file system' error.
Remove disk from the drive, uprotect it, insert back
and repeat 'echo -n > /dev/fd0'. You'll get the same error
because media change detection does not work.
For real example replace 'echo -n' with 'fdformat' that also
opens device for writing. So it's impossible to format floppy drive
until reboot if there was write-protected disk in the drive
and the boot time.
Note that fdc(4) man page still mentions 0x10 flag that
was ever used as valuse for FD_NO_CHLINE flag it does not exist
in the code many years. More, the value 0x10 is now used by fdc(4)
internally for other means and we need to choose another value.
>Fix:
--- share/man/man4/fdc.4.orig 2007-09-16 16:23:27.000000000 +0800
+++ share/man/man4/fdc.4 2007-09-16 16:23:34.000000000 +0800
@@ -101,7 +101,7 @@
the driver.
To indicate a drive that does not have the changeline support,
this can be overridden using the per-drive device flags value of
-.Ar 0x10
+.Ar 0x40
(causing each call to
.Xr open 2
to perform the autodetection).
@@ -98,6 +98,8 @@
* and fd1 */
#define FD_NO_PROBE 0x20 /* don't probe drive (seek test), just
* assume it is there */
+#define FD_NO_CHLINE 0x40 /* drive does not support changeline
+ * aka. unit attention */
/*
* Things that could conceiveably considered parameters or tweakables
@@ -827,7 +829,8 @@
if (bp->bio_cmd & BIO_PROBE) {
- if (!(fdin_rd(fdc) & FDI_DCHG) && !(fd->flags & FD_EMPTY))
+ if (!(fd->flags & FD_NO_CHLINE) &&
+ !(fdin_rd(fdc) & FDI_DCHG) && !(fd->flags & FD_EMPTY))
return (fdc_biodone(fdc, 0));
/*
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list