Date: Thu, 16 Sep 93 01:35:10 +1000
Julian writes:
>In fact DEVIDLE and FINDWORK ended up being basically equivalent.
>the bit I wonder about, is the returning of 0.. What (other than
>another request from somewhere else in the kernel) is going to start
>work on the next item on the queue?
I think removing FINDWORK would make things clearer.
Nothing much is going to start work on the next item. However, it is
pointless to continue processing the queue for the same unready drive.
Aborting all reads and trying harder to perform all writes would be
better.
Julian writes.
> no, actually it should be:
> fdt = fd_data[FDUNIT(minor(dev))].ft;
Fixed.
From: bde@kralizec.zeta.org.au (Bruce Evans)
Date: Thu, 16 Sep 93 22:56:01 +1000
The fd driver reported the wrong cylinder/head/sector numbers after an
error (ST3 is only valid after a sense-drive command), and didn't report
fs block numbers (diskerr was not used).
There was an old problem with writes to block fd devices. Try this:
1. write protect floppy in fd0.
2. tar cf /dev/fd0a /dev/null. Repeat a few times. Later writes tend to
terminate earlier.
3. un-write protect floppy.
4. repeat step 2. The writes tend to return 0, 2048, 4096, ... and then
succeed.
This was caused by a bug in vfs__bios.c. (The bug is fixed in NetBSD's
vfs_bio.c.) fd.c sets bp->b_resid to nonzero after an error. vfs__bios.c
was not initializing bp->b_resid. This causes some writes to terminate
early (e.g., writes to block devices; see spec_write()).
Related funnies:
1. Nothing tries to write the residual bytes.
2. The wd driver sets bp->b_resid to 0 after an error, so there's no
way anything else could write the residual bytes.
3. I use the block fd device for tar because the raw device seemed to
have more bugs long ago, and because it ought to be able to handle
buffering more transparently (I don't want to have to know the
device size). But spec_write() always uses the size BLKDEV_IOSIZE
== 2048 which is too small. For disks it should use the size of
one track (rounded down to meet the next track boundary or the i/o
size). Here it would help if the DIOCGPART ioctl worked. But
DIOCGPART is not implemented for floppies, and the disk size is
ignored except for partitions of type FS_BSDFFS.
Bruce
files from a MS-DOS partition.
Minor cleanup:
fixed spelling error in inst1.install
capitalized sentences in kc.profile
reworded initial load_fd options
partition of the boot disk. So we have yet another medium via
which to load the FreeBSD distribution files. load_fd() has
options for listing and (if reading from the C: drive) changing
directories.
load_fd's notation assumes that the first Primary partition on
disk is the DOS drive C: (since this and only this one is mounted
by install). Otherwise, the notation may be a bit confusing.
We'll know the assumption is bad if people complain about
not finding files on their "C:" drive...
Added a device file existence check to kc.profile.
>Date: Sat, 11 Sep 93 12:59:39 +0800
1/ fix bug where cd0a was unusable because it was compared against
the number of 2k blocks not the number of 512byte blocks.. gave
an error for all reads past 1/4 way through the disk (cd0d was ok).
2/ fix open code so that it now notices if a disk has been changed
and updates the disklabel.
3/ use the new error handling code from st.c
4/ start adding stuff to get ready for using cd_scsi_cmd from
cd_start (like is done in st and sd)
5/ more general cleanups including making dmesg report
sector size of disk.. (believe it or not SUN drives use 512 byte)
first) Primary (un-Extended) DOS partition, providing /dev/xx0h
is available. It is mounted on /dos by default. The /etc/fstab
entry omits the dump and fsck fields, i.e.:
/dev/xx0h /dos pcfs rw
The Secondary DOS partition is not used (System ID 0xF2), because I don't
know what that is.
2) Fixed default sizes so that if someone attempts to install BSD on a 24 Mb
partition by accepting defaults, they don't end up with a 1 Mb /usr
partition (up to USRMIN Mb's). In this case, all space is split between
swap and root.
TODO:
1) Extend load_fd() to support loading distribution files directly from
the DOS partition of the hard disk.
2) Provide translated parameters to the install program (maybe
add an option to fdisk). Currently, the true geometry is used as
default, which is inappropriate for coexistence with DOS.
3) Support installing on multiple or secondary disks.
>Date: Thu, 16 Sep 1993 23:35:48 -0700 (PDT)
There is a typo in disktab in the NetBSD-0.9 distribution. This may be
already fixed in NetBSD-current, but it's not in any of the source that I've
sup'ed.
line 9 reads:
# sc #sectors/cylinder, nc*nt default
should read:
# sc #sectors/cylinder, ns*nt default
Before starting, it is important to know your hard disk's geometry
(i.e., number of cylinders, heads and sectors/track). If installing
FreeBSD on the same disk as another operating system, then the
two systems should use the same geometry. In particular, FreeBSD's
default geometry is inappropriate for MS-DOS. So in this case, the
DOS geometry should be used instead.
[This seems to be true for SCSI disks. What about IDE? With the new
boot blocks, can we ignore the disks true geometry??]
quite and works correctly. This is derived from notes in Bruce Evans
lattest patches to fd.c:
>From: bde@kralizec.zeta.org.au (Bruce Evans)
>Subject: fixes for fd driver
6. I picked up some code posted the other day to implement label ioctls.
Now `disklabel fd0' works. See a comment for how to modify conf.c.
message for Bruces changes:
>From: bde@kralizec.zeta.org.au (Bruce Evans)
>Subject: fixes for fd driver
I think I've fixed some bugs in the 0.2.4 fd driver.
1. The main cause of hangs was that there was no timeout for seeks. So
attempting i/o with no floppy in the drive hung iff a seek was required.
2. Opens of unattached drives were allowed. The kernel usually paniced
soon after due to a bad pointer.
3. Some timeout functions ran at splclock() instead of splbio(). This
may not have mattered.
4. The state machine was left in a funny state after a timeout.
5. Some function headers were new-style.
6. I picked up some code posted the other day to implement label ioctls.
Now `disklabel fd0' works. See a comment for how to modify conf.c.
>Subject: Bad bug in kbdtables.h [FreeBSD]
I found a bug in /sys/i386/isa/kbdtables.h which contain the
different keyboard layouts for syscons. This regards all tables exept
the Danish and US. When compiling the kernel with any other keymapping
than Danish or none at all (US), you get an error that 'key_map' is undefined.
This is because there is a typo in the name of the struct containing
the tables, keymap intead of key_map.
offsets and sizes in units of cylinders. This will help
those who want to install FreeBSD between two existing
partitions.
Faked notes on installing via Kermit