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.hegna...@gmx.ch>
  Tested by:    pho, Stefan Hegnauer <stefan.hegna...@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)
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to