- if ((sc->sc_erreg&(TMER_SELR|TMER_TUR)) != (TMER_SELR|TMER_TUR) ||
- (sc->sc_erreg&TMER_BOT) == 0 && (flag&FWRITE) &&
- dens != sc->sc_dens ||
- (flag&(FREAD|FWRITE)) == FWRITE && sc->sc_erreg&TMER_WRL) {
- /*
- * Not online or density switch in mid-tape or write locked.
- */
+ sc->sc_dens = dens;
+get:
+ tmcommand(dev, TM_SENSE, 1);
+ if (sc->sc_erreg&TMER_SDWN) {
+ sleep((caddr_t)&lbolt, PZERO+1);
+ goto get;
+ }
+ sc->sc_dens = olddens;
+ if ((sc->sc_erreg&(TMER_SELR|TMER_TUR)) != (TMER_SELR|TMER_TUR)) {
+ uprintf("te%d: not online\n", teunit);
+ u.u_error = EIO;
+ return;
+ }
+ if ((flag&FWRITE) && (sc->sc_erreg&TMER_WRL)) {
+ uprintf("te%d: no write ring\n", teunit);
+ u.u_error = EIO;
+ return;
+ }
+ if ((sc->sc_erreg&TMER_BOT) == 0 && (flag&FWRITE) &&
+ dens != sc->sc_dens) {
+ uprintf("te%d: can't change density in mid-tape\n", teunit);