Date: Wed, 4 Feb 1998 03:27:58 -0500 (EST) From: "Christopher T. Johnson" <cjohnson@neunacht.netgsi.com> To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/5643: NCR 810/815 do not handle rewind correctly Message-ID: <199802040827.DAA00475@neunacht.netgsi.com>
next in thread | raw e-mail | index | archive | help
>Number: 5643 >Category: kern >Synopsis: NCR 810/815 do not handle rewind correctly >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Feb 4 00:30:01 PST 1998 >Last-Modified: >Originator: Christopher T. Johnson >Organization: NetGSI, INC >Release: FreeBSD 3.0-CURRENT i386 >Environment: Problem presents itself with both an 810 and 815 SCSI card. In both a 486 (AMD X6/133 40MB) and a P166 Dual processor system. The dual processor system shows the problem in both uni and multi processor mode. Problem has been present in CURRENT since atleast Nov 1st 1997. >Description: When the following sequence is executed with an NCR810/815 SCSI control card, the second rewind generates an I/O error with no message logged. open("/dev/nrst0", O_RDONLY); rewind via ioctl(); read(fd, buffer, 32k); close(fd); open("/dev/nrst0", O_RDWR); rewind via ioctl(); The type drive is an older EXABYTE 8200 and it is more than a little slow in doing any tape motion. >How-To-Repeat: #include <stdio.h> #include "tapeio.h" main() { int fd; char buffer[32768]; char bout[32768]; int flag; strcpy(bout,"AMANDA: TAPESTART DATE X TAPE NET004\n"); fd = tape_open("/dev/nrst0", 0); /* O_RDONLY */ if (fd < 0) { perror("Tape open"); exit(1); } flag = tapefd_rewind(fd); if (flag < 0 ) { perror("rewind 1"); exit(2); } flag = read(fd, buffer, 32768); if (flag != 32768) { perror("read"); } flag = close(fd); if (flag != 0) { perror("tape close"); exit(4); } fd = tape_open("/dev/nrst0", 2); /* O_RDWR */ if (fd < 0) { perror("open rdwr"); exit(4); } flag = tapefd_rewind(fd); if (flag < 0) { perror("rewind 2"); fprintf(stderr,"Trying to rewind a second time\n"); sleep(5); flag = tapefd_rewind(fd); if (flag < 0) { perror("rewind 3"); } } flag = write(fd, bout, 32768); if (flag != 32768) { perror("write"); exit(6); } flag = close(fd); if (flag != 0) { perror("close 2"); exit(7); } exit(0); } #include <sys/mtio.h> int tapefd_rewind(tapefd) int tapefd; { struct mtop mt; mt.mt_op = MTREW; mt.mt_count = 1; return ioctl(tapefd, MTIOCTOP, &mt); } int tape_open(filename, mode) char *filename; int mode; { return open(filename, mode); } >Fix: Because of the fact that the work around shows that there is a timing need I suspect that the ncr code is not waiting for something to settle. This problem does NOT happen with the same equipment but with an Adaptec 1542cp >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802040827.DAA00475>