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