diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/i386/isa/wd.c | 14 | ||||
-rw-r--r-- | sys/kern/kern_physio.c | 5 |
2 files changed, 14 insertions, 5 deletions
diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c index 2794ecd..b088890 100644 --- a/sys/i386/isa/wd.c +++ b/sys/i386/isa/wd.c @@ -37,7 +37,7 @@ static int wdtest = 0; * SUCH DAMAGE. * * from: @(#)wd.c 7.2 (Berkeley) 5/9/91 - * $Id: wd.c,v 1.37 1994/04/10 11:17:13 csgr Exp $ + * $Id: wd.c,v 1.39 1994/05/25 09:00:19 rgrimes Exp $ */ /* TODO: @@ -86,7 +86,9 @@ static int wdtest = 0; #define TIMEOUT 10000 #define RETRIES 5 /* number of retries before giving up */ #define RECOVERYTIME 500000 /* usec for controller to recover after err */ -#define MAXTRANSFER 256 /* max size of transfer in sectors */ +#define MAXTRANSFER 255 /* max size of transfer in sectors */ + /* correct max is 256 but some controllers */ + /* can't handle that in all cases */ #define BAD144_NO_CYL 0xffff /* XXX should be in dkbad.h; bad144.c uses -1 */ #ifdef notyet @@ -515,9 +517,13 @@ loop: if (du->dk_skip == 0) { du->dk_bc = bp->b_bcount; - if (bp->b_flags & B_BAD) { + if (bp->b_flags & B_BAD + /* + * XXX handle large transfers inefficiently instead + * of crashing on them. + */ + || howmany(du->dk_bc, DEV_BSIZE) > MAXTRANSFER) du->dk_flags |= DKFL_SINGLE; - } } if ((du->dk_flags & (DKFL_SINGLE|DKFL_BADSECT)) /* 19 Aug 92*/ diff --git a/sys/kern/kern_physio.c b/sys/kern/kern_physio.c index 0fcb0bf..007d37f 100644 --- a/sys/kern/kern_physio.c +++ b/sys/kern/kern_physio.c @@ -16,7 +16,7 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: kern_physio.c,v 1.4 1994/08/06 09:15:28 davidg Exp $ + * $Id: kern_physio.c,v 1.5 1994/08/07 13:10:31 davidg Exp $ */ #include <sys/param.h> @@ -120,6 +120,9 @@ physio(strategy, bp, dev, rw, minp, uio) */ { int iolen = bp->b_bcount - bp->b_resid; + + if (iolen == 0 && !(bp->b_flags & B_ERROR)) + goto doerror; /* EOF */ uio->uio_iov[i].iov_len -= iolen; uio->uio_iov[i].iov_base += iolen; uio->uio_resid -= iolen; |