Return to BSD News archive
Path: sserve!manuel!munnari.oz.au!samsung!uakari.primate.wisc.edu!ames!haven.umd.edu!mimsy!jds
From: jds@cs.umd.edu (James da Silva)
Newsgroups: comp.unix.bsd
Subject: SCSI tape: summary of known problems/solutions
Message-ID: <59550@mimsy.umd.edu>
Date: 8 Aug 92 20:20:20 GMT
Sender: news@mimsy.umd.edu
Organization: University of Maryland, Department of Computer Science
Lines: 91
Here is a summary of the bugs and fixes that have appeared here related to
the SCSI tape handling in as.c, including a new one (lack of filemarks)
that I haven't seen posted before.
Problem: Can't get the tape at SCSI target 4 to work.
Solution: The devices for ras4[ad] in the distribution are wrong. The major
numbers should be 13, not 11. Try:
# rm /dev/ras4[ad]
# mknod /dev/ras4a c 13 32
# mknod /dev/ras4d c 13 35
(but you don't really need the d partition for tapes)
Due-to: Bill Jolitz
Problem: Can't read multi-file tapes; no no-rewind devices.
Solution: The as.c code supports no-rewind devices, but there's some code
in asopen that disables this capability. Apply the patch below.
The no-rewind devices have a minor number one greater than the
base number for the target (eg same as partition b for disks).
Here's what I did with a tape at target 2:
# ln /dev/ras2a /dev/rst2
# mknod /dev/nrst2 c 13 17
Now I refer to the tape as "/dev/rst2" and "/dev/nrst2".
Problem: Can't read back multi-file tapes that were written with 386BSD; it's
as if only one file was written on tape.
Solution: as.c doesn't write any file marks!! There is code for it, but
it is essentially commented out behind an "if(0 && ....)". Apply
the patch below. The driver still doesn't write two filemarks
for end-of-medium, but that is less important.
Problem: Can't get a variable-block-size tape drive to work with 386BSD.
Solution: as.c assumes fixed-block-size tape drives. Apply the patch below.
Due-to: Scott Burris (and yes, Scott, your fix works with fixed-block drives
too).
Here is the patch to /sys/i386/isa/as.c:
*** /tmp/,RCSt1020837 Sat Aug 8 16:41:49 1992
--- as.c Sun Aug 9 16:06:48 1992
***************
*** 429,439 ****
}
}
- if (as->tape && dev_part(dev)) {
- error = EIO;
- goto done;
- }
-
as->scsi_cdb_len = 10;
bzero(cdb, 10);
cdb[0] = 0x25; /* SCSI_READCAPACITY */
--- 429,434 ----
***************
*** 554,560 ****
bp = geteblk (DEV_BSIZE);
! if (0 && (flag & FWRITE) != 0) {
/* presume user will use tape again */
as->scsi_cdb_len = 6;
cdb = as->scsi_cdb;
--- 549,555 ----
bp = geteblk (DEV_BSIZE);
! if ((flag & FWRITE) != 0) {
/* presume user will use tape again */
as->scsi_cdb_len = 6;
cdb = as->scsi_cdb;
***************
*** 889,894 ****
--- 884,891 ----
n = 0;
sp = as->scatter_list;
nscatter = 0;
+ if (as->tape && as->bs == 1)
+ total = bp->b_bcount;
while (n < total && nscatter < NSCATTER) {
thistime = page_size - ((vm_offset_t)p - trunc_page (p));
Someone please alert me to any errors in the above.
Enjoy,
Jaime
.............................................................................
: Stand on my shoulders, : jds@cs.umd.edu : James da Silva
: not on my toes. : uunet!mimsy!jds : Systems Design & Analysis Group