Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Dec 2013 21:15:18 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r259200 - head/sys/kern
Message-ID:  <201312102115.rBALFIDx024383@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@gmx.ch>
  Tested by:	pho, Stefan Hegnauer <stefan.hegnauer@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)



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