Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 May 1996 22:19:02 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        freebsd-scsi@freebsd.org, wilko@yedi.iaf.nl
Subject:   Re: removing 32 kbyte limit from dump
Message-ID:  <199605301219.WAA19690@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>But I'm not really satisfied by this. I'd rather see that the st.c
>driver returns EINVAL or something like that when an attempt is made
>to write an impossible block size (and of course dump should act 
>accordingly when it receives the error value).

96K is not impossible.  It just gets mutilated to 64K+32K by physio(),
and the error isn't detected because both 64K and 32K are possible.
physio() needs to have a do-not-split flag.

Similar problems probably affect cd and worm devices.  An i/o of
100 * 2352 byte blocks would be mutilated at 64K boundaries.  This
can be fixed using the current physio() interface: don't use rawread()/
rawwrite(), and provided a minphys() function that returns
(MAXPHYS / 2352) * 2352 (it must be <= MAXPHYS because physio()
uses min(MAXPHYS, minphys()).

>--- 167,177 ----
>  		case 'b':		/* blocks per tape write */
>  			ntrec = numarg('b', "number of blocks per write",
>  			    1L, 1000L, &argc, &argv);
>! 			/* XXX physio() is currently unable > 64 kByte I/Os */
>! 			/* so lets tell the user now and not wait for him/her 
>! 			/* to see the console message */
>! 			if ( ntrec > 64 ) {
>! 				msg("Please choose a blocksize <= 64 \n");
>  				exit(X_ABORT);

64 should be MAXPHYS/1024.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199605301219.WAA19690>