svn commit: r259200 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Tue Dec 10 21:15:18 UTC 2013


Author: kib
Date: Tue Dec 10 21:15:18 2013
New Revision: 259200
URL: http://svnweb.freebsd.org/changeset/base/259200

Log:
  Fix detection of EOF in kern_physio().  If bio_length was clipped by
  the excess code in g_io_check(), bio_resid is also truncated by
  g_io_deliver().  As result, bufdonebio() assigns truncated value to
  the buffer b_resid field.
  
  Use the residual bio_completed to calculate buffer b_resid from
  b_bcount in bufdonebio(), instead of bio_resid, calculated from
  bio_length in g_io_deliver().
  
  The issue is seemingly caused by the code rearrange into g_io_check(),
  which is not present in stable/10.  The change still looks as the
  useful change to have in 10 nevertheless.
  
  Reported by:	Stefan Hegnauer <stefan.hegnauer at gmx.ch>
  Tested by:	pho, Stefan Hegnauer <stefan.hegnauer at gmx.ch>
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c	Tue Dec 10 21:01:28 2013	(r259199)
+++ head/sys/kern/vfs_bio.c	Tue Dec 10 21:15:18 2013	(r259200)
@@ -3679,7 +3679,6 @@ bufdonebio(struct bio *bip)
 
 	bp = bip->bio_caller2;
 	bp->b_resid = bp->b_bcount - bip->bio_completed;
-	bp->b_resid = bip->bio_resid;	/* XXX: remove */
 	bp->b_ioflags = bip->bio_flags;
 	bp->b_error = bip->bio_error;
 	if (bp->b_error)


More information about the svn-src-head mailing list