summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1994-08-08 13:53:55 +0000
committerdg <dg@FreeBSD.org>1994-08-08 13:53:55 +0000
commit90aed30c20ad6e31d1ee6762d2f2e262bd246e89 (patch)
tree14785effb485a0ece2109b154b3c2548894d1a21 /sys
parentf85fe1cefdfe8c691cdb767ab2def452c4f0530a (diff)
downloadFreeBSD-src-90aed30c20ad6e31d1ee6762d2f2e262bd246e89.zip
FreeBSD-src-90aed30c20ad6e31d1ee6762d2f2e262bd246e89.tar.gz
Detect the "EOF" condition. Specifically, end of partition.
Submitted by: Bruce Evans
Diffstat (limited to 'sys')
-rw-r--r--sys/i386/isa/wd.c14
-rw-r--r--sys/kern/kern_physio.c5
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;
OpenPOWER on IntegriCloud