svn commit: r342375 - head/sys/dev/md
Yoshihiro Ota
ota at j.email.ne.jp
Mon Dec 24 02:53:51 UTC 2018
Thanks.
I noticed when this was broken upon a new release long time ago but couldn't get any clue nor when this was broken (since I hadn't started following trunk/stable back then.)
Was that 7.0-RELEASE or 8.0-RELEASE....?
Anyway, good news and I will try to bring this to local 12.0-RELEASE.
Regards,
Hiro
On Sat, 22 Dec 2018 22:59:11 +0000 (UTC)
Bruce Evans <bde at FreeBSD.org> wrote:
> Author: bde
> Date: Sat Dec 22 22:59:11 2018
> New Revision: 342375
> URL: https://svnweb.freebsd.org/changeset/base/342375
>
> Log:
> Fix devstat on md devices, second attempt. r341765 depends on
> g_io_deliver() finishing initialization of the bio, but g_io_deliver()
> actually destroys the bio. INVARIANTS makes the bug obvious by
> overwriting the bio with garbage.
>
> Restore the old order for calling devstat (except don't restore not calling
> it for the error case), and translate to the devstat KPI so that this order
> works.
>
> Reviewed by: kib
>
> Modified:
> head/sys/dev/md/md.c
>
> Modified: head/sys/dev/md/md.c
> ==============================================================================
> --- head/sys/dev/md/md.c Sat Dec 22 21:49:25 2018 (r342374)
> +++ head/sys/dev/md/md.c Sat Dec 22 22:59:11 2018 (r342375)
> @@ -1241,12 +1241,22 @@ md_kthread(void *arg)
> error = sc->start(sc, bp);
> }
>
> + if (bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE) {
> + /*
> + * Devstat uses (bio_bcount, bio_resid) for
> + * determining the length of the completed part of
> + * the i/o. g_io_deliver() will translate from
> + * bio_completed to that, but it also destroys the
> + * bio so we must do our own translation.
> + */
> + bp->bio_bcount = bp->bio_length;
> + bp->bio_resid = (error == -1 ? bp->bio_bcount : 0);
> + devstat_end_transaction_bio(sc->devstat, bp);
> + }
> if (error != -1) {
> bp->bio_completed = bp->bio_length;
> g_io_deliver(bp, error);
> }
> - if (bp->bio_cmd == BIO_READ || bp->bio_cmd == BIO_WRITE)
> - devstat_end_transaction_bio(sc->devstat, bp);
> }
> }
>
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the svn-src-all
mailing list