Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jan 2020 00:55:37 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r356589 - stable/11/sys/geom
Message-ID:  <202001100055.00A0tbxv023631@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Fri Jan 10 00:55:37 2020
New Revision: 356589
URL: https://svnweb.freebsd.org/changeset/base/356589

Log:
  MFC r356214: Avoid few memory accesses in g_disk_done().

Modified:
  stable/11/sys/geom/geom_disk.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/geom/geom_disk.c
==============================================================================
--- stable/11/sys/geom/geom_disk.c	Fri Jan 10 00:53:20 2020	(r356588)
+++ stable/11/sys/geom/geom_disk.c	Fri Jan 10 00:55:37 2020	(r356589)
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
 struct g_disk_softc {
 	struct mtx		 done_mtx;
 	struct disk		*dp;
+	struct devstat		*d_devstat;
 	struct sysctl_ctx_list	sysctl_ctx;
 	struct sysctl_oid	*sysctl_tree;
 	char			led[64];
@@ -228,15 +229,13 @@ g_disk_done(struct bio *bp)
 	struct g_disk_softc *sc;
 
 	/* See "notes" for why we need a mutex here */
-	/* XXX: will witness accept a mix of Giant/unGiant drivers here ? */
+	sc = bp->bio_caller1;
 	bp2 = bp->bio_parent;
-	sc = bp2->bio_to->private;
-	bp->bio_completed = bp->bio_length - bp->bio_resid;
 	binuptime(&now);
 	mtx_lock(&sc->done_mtx);
 	if (bp2->bio_error == 0)
 		bp2->bio_error = bp->bio_error;
-	bp2->bio_completed += bp->bio_completed;
+	bp2->bio_completed += bp->bio_length - bp->bio_resid;
 
 	switch (bp->bio_cmd) {
 	case BIO_ZONE:
@@ -246,7 +245,7 @@ g_disk_done(struct bio *bp)
 	case BIO_WRITE:
 	case BIO_DELETE:
 	case BIO_FLUSH:
-		devstat_end_transaction_bio_bt(sc->dp->d_devstat, bp, &now);
+		devstat_end_transaction_bio_bt(sc->d_devstat, bp, &now);
 		break;
 	default:
 		break;
@@ -463,6 +462,7 @@ g_disk_start(struct bio *bp)
 					bp->bio_error = ENOMEM;
 			}
 			bp2->bio_done = g_disk_done;
+			bp2->bio_caller1 = sc;
 			bp2->bio_pblkno = bp2->bio_offset / dp->d_sectorsize;
 			bp2->bio_bcount = bp2->bio_length;
 			bp2->bio_disk = dp;
@@ -548,6 +548,7 @@ g_disk_start(struct bio *bp)
 			return;
 		}
 		bp2->bio_done = g_disk_done;
+		bp2->bio_caller1 = sc;
 		bp2->bio_disk = dp;
 		mtx_lock(&sc->start_mtx);
 		devstat_start_transaction_bio(dp->d_devstat, bp2);
@@ -702,6 +703,7 @@ g_disk_create(void *arg, int flag)
 	mtx_init(&sc->start_mtx, "g_disk_start", NULL, MTX_DEF);
 	mtx_init(&sc->done_mtx, "g_disk_done", NULL, MTX_DEF);
 	sc->dp = dp;
+	sc->d_devstat = dp->d_devstat;
 	gp = g_new_geomf(&g_disk_class, "%s%d", dp->d_name, dp->d_unit);
 	gp->softc = sc;
 	pp = g_new_providerf(gp, "%s", gp->name);



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