Date: Wed, 21 Jun 1995 17:49:29 -0500 (CDT) From: Mike Pritchard <mpp@legarto.minn.net> To: deischen@iworks.InterWorks.org (Daniel M. Eischen) Cc: gibbs@freebsd.org, mikebo@TELLABS.COM, questions@freebsd.org Subject: Re: FBSD 2.xR: AIC7xxx driver vs. st() driver vs. tape drives Message-ID: <199506212249.RAA00258@mpp.com> In-Reply-To: <9506212000.AA13314@iworks.InterWorks.org> from "Daniel M. Eischen" at Jun 21, 95 03:00:56 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> >DEBUG: Notify: Attempting to extract from SCSI tape drive...
> >DEBUG: Executing command 'cpio -iBduVm -H tar -I /dev/rst0' (Magic 0)
> >st0(ahc1:2:0): ILLEGAL REQUEST
> >st0: Cannot set selected mode
> >st0: bad request, must be between 0 and 0
> >cpio: read error: Input/output error
> >DEBUG: Command 'cpio -iBduVm -H tar -I /dev/rst0' returns status of 1
Are you booting with a tape in the drive? I just tracked down
the "bad request, must be between 0 and 0" problem that
I've seen before. If a tape is in the drive at boot time,
st_mode_sense is called and sets the MEDIA_LOADED flag.
When st_mount_tape is called and then calls st_rd_blk_lim,
st_rd_blk_lim sees the MEDIA_LOADED flag and returns without doing
anything, thus causing the above error.
I fixed it by changing st_mode_sense to not set the MEDIA_LOADED
flag, since st_mount_tape sets it when the mount is complete, and
other code in the driver causes the MEDIA_LOADED flag to track
the mount status, so changing the mode_sense routine to not fiddle
with the MEDIA_LOADED flag seemed like the thing to do. I also
removed the MEDIA_LOADED check from st_rd_blk_lim, since it is
only called by st_mount_tape, and it makes sense to always read
this information when mounting a new tape, just in cause
the MEDIA_LOADED flag got confused somewhere along the way.
Here is a patch to fix the problem (it also fixes a typo). It may also
fix/or help the problem described in PR misc/531.
*** orig/st.c Wed Jun 21 17:09:04 1995
--- st.c Wed Jun 21 17:21:42 1995
***************
*** 1017,1023 ****
st->buf_queue = bp->b_actf;
/*
! * if the device has been unmounted byt the user
* then throw away all requests until done
*/
if ((!(st->flags & ST_MOUNTED))
--- 1017,1023 ----
st->buf_queue = bp->b_actf;
/*
! * if the device has been unmounted by the user
* then throw away all requests until done
*/
if ((!(st->flags & ST_MOUNTED))
***************
*** 1359,1370 ****
errval errno;
/*
- * First check if we have it all loaded
- */
- if ((sc_link->flags & SDEV_MEDIA_LOADED))
- return 0;
-
- /*
* do a 'Read Block Limits'
*/
bzero(&scsi_cmd, sizeof(scsi_cmd));
--- 1359,1364 ----
***************
*** 1481,1487 ****
if (page) {
bcopy(&dat.page, page, pagelen);
}
- sc_link->flags |= SDEV_MEDIA_LOADED;
return 0;
}
--- 1475,1480 ----
--
Mike Pritchard
mpp@legarto.minn.net
"Go that way. Really fast. If something gets in your way, turn"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199506212249.RAA00258>
