From nobody Fri Feb 11 01:10:41 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id B937B19A6331; Fri, 11 Feb 2022 01:10:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JvwXf1rhcz57W2; Fri, 11 Feb 2022 01:10:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644541842; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=O42K6PD+GDRgh1vFKxeDf+SiRxBbvf739hH391h7Db0=; b=xQ6KkJy9NXMKvxW0sKeaGPfFM4T7eb0lZpZ5aSL0TA8XpqIzJtXsmIOQEsF3Y2VIhSm5uF +L2nMJc++YsiMjb8M5JIjWhR0gkuXdKWLDx+Es5KlWWw0CSumTfg0LPQ3rDHNC7soZ/8Iy cB5pQjx7N0N66u76J50l7fOED9kNSt8FZ9QlTtmDw5Obky85UZSsMkyJbmIOqcHX1MsvZr CB1GjAjFW1vQJghWTMgKtLQYP+YV06dglNVso/pCW6kBP2Ir+g/7d0pLBOiA7dpAwkkKhc 71Apj7NuOWu7r2OlAYGZ2XwT3wjYecDfyMRJZHImbcvMG2aLVfpYlaZsQZnU2A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B0762949; Fri, 11 Feb 2022 01:10:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21B1AfrV073613; Fri, 11 Feb 2022 01:10:41 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21B1AfVV073606; Fri, 11 Feb 2022 01:10:41 GMT (envelope-from git) Date: Fri, 11 Feb 2022 01:10:41 GMT Message-Id: <202202110110.21B1AfVV073606@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: 5438c482cd6b - stable/13 - GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 5438c482cd6bc7145ba66202c4bf19e4ceddfdef Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644541842; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=O42K6PD+GDRgh1vFKxeDf+SiRxBbvf739hH391h7Db0=; b=hzWkQn1WrlcNWnC2Qdc9ZxBCTY+p1ZKwYzVBUbT6mV8Kf3z1VHCMY2LzoMA6wJKY6QNsv6 V9wVHxwuLeKyTBs2IeEvS66BSytlcWlaPpsb9IpK62IxM5cZu0/Ql2TqCTFy4UfvLtFiFI sFc/OSjqqdrylmKOqk1F+7mD3BBmBqCK4B6BX/huamfQvDFvBt9Xmc2Po1OzSceDTI7K6A SX03oL033q3eCttluoRAZPimexrr4xKtyPPSJCvijJCgnxt89kuAbc3joHqCyeaPMefLnc nf/GaEumTepiXYW35BzK8d26OrwiAavXEOHSCkw2SDvRfUiYL37MKeryuDT3Cg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644541842; a=rsa-sha256; cv=none; b=TH1w1MV5mLBszW+gP5tSup4tLiq44ec+d6xv71SWx+S1qpCL1wfhp4ppbdzoTXGtsZYoa+ S7OoPVTshmUmlT6Nc25vzfOX43O7KHFGBrXJm3OMO6YcAHMpVlOAKTo0QDml8YcnYvC41p 9m3Cwnf1vAjlhjJWZKLumm3/df1NodRQKeHJyNEleiwi2zZEZi/toKrcl2KbchFY4T+5ej obG4TwcxMQoTKOlCgPdvFWz6bTS3ewymq2PCGpZXChv9tnKRiIBBXq7iWqiQAbFBNWzzU+ p8A0H6mXqKAVZsihv4XYNoob49N0OcQ4auW+L3KBvLcn1P49ngrBKM65xSDZmQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=5438c482cd6bc7145ba66202c4bf19e4ceddfdef commit 5438c482cd6bc7145ba66202c4bf19e4ceddfdef Author: Alexander Motin AuthorDate: 2022-01-30 02:59:03 +0000 Commit: Alexander Motin CommitDate: 2022-02-11 00:50:46 +0000 GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. All I/O requests through the taste consumers are synchronous, done with g_read_data() and without any locks held. It makes no sense to delegate the I/O to g_down/g_up threads. This removes many of context switches during disk retaste. MFC after: 2 weeks (cherry picked from commit 10ae42ccbde4fe7c8c9de3d54f3c0d63457a1a68) --- sys/geom/cache/g_cache.c | 1 + sys/geom/concat/g_concat.c | 1 + sys/geom/journal/g_journal.c | 1 + sys/geom/linux_lvm/g_linux_lvm.c | 1 + sys/geom/mirror/g_mirror.c | 1 + sys/geom/multipath/g_multipath.c | 1 + sys/geom/raid3/g_raid3.c | 1 + sys/geom/shsec/g_shsec.c | 1 + sys/geom/stripe/g_stripe.c | 1 + sys/geom/vinum/geom_vinum.c | 1 + sys/geom/virstor/g_virstor.c | 1 + 11 files changed, 11 insertions(+) diff --git a/sys/geom/cache/g_cache.c b/sys/geom/cache/g_cache.c index 2caae5ede0f4..86c2a9bb36a2 100644 --- a/sys/geom/cache/g_cache.c +++ b/sys/geom/cache/g_cache.c @@ -673,6 +673,7 @@ g_cache_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->orphan = g_cache_orphan; gp->access = g_cache_access; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_cache_read_metadata(cp, &md); diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c index dfa7b97a1806..6db293b07146 100644 --- a/sys/geom/concat/g_concat.c +++ b/sys/geom/concat/g_concat.c @@ -718,6 +718,7 @@ g_concat_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->access = g_concat_access; gp->orphan = g_concat_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_concat_read_metadata(cp, &md); diff --git a/sys/geom/journal/g_journal.c b/sys/geom/journal/g_journal.c index e57d58d6f7ca..eba0f0dcab34 100644 --- a/sys/geom/journal/g_journal.c +++ b/sys/geom/journal/g_journal.c @@ -2483,6 +2483,7 @@ g_journal_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) /* This orphan function should be never called. */ gp->orphan = g_journal_taste_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_journal_metadata_read(cp, &md); diff --git a/sys/geom/linux_lvm/g_linux_lvm.c b/sys/geom/linux_lvm/g_linux_lvm.c index b835baecc93d..f17827757139 100644 --- a/sys/geom/linux_lvm/g_linux_lvm.c +++ b/sys/geom/linux_lvm/g_linux_lvm.c @@ -543,6 +543,7 @@ g_llvm_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) /* This orphan function should be never called. */ gp->orphan = g_llvm_taste_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_llvm_read_label(cp, &ll); diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c index c0641d15673e..455aae4bebf8 100644 --- a/sys/geom/mirror/g_mirror.c +++ b/sys/geom/mirror/g_mirror.c @@ -3259,6 +3259,7 @@ g_mirror_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) */ gp->orphan = g_mirror_taste_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_mirror_read_metadata(cp, &md); diff --git a/sys/geom/multipath/g_multipath.c b/sys/geom/multipath/g_multipath.c index 120fced0a8f1..a721b0bc4459 100644 --- a/sys/geom/multipath/g_multipath.c +++ b/sys/geom/multipath/g_multipath.c @@ -829,6 +829,7 @@ g_multipath_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->access = g_multipath_access; gp->orphan = g_multipath_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_multipath_read_metadata(cp, &md); diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c index 159eff990892..27925b5e49f3 100644 --- a/sys/geom/raid3/g_raid3.c +++ b/sys/geom/raid3/g_raid3.c @@ -3310,6 +3310,7 @@ g_raid3_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) /* This orphan function should be never called. */ gp->orphan = g_raid3_taste_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_raid3_read_metadata(cp, &md); diff --git a/sys/geom/shsec/g_shsec.c b/sys/geom/shsec/g_shsec.c index 2b9e127ce350..5ca00b64219d 100644 --- a/sys/geom/shsec/g_shsec.c +++ b/sys/geom/shsec/g_shsec.c @@ -653,6 +653,7 @@ g_shsec_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->access = g_shsec_access; gp->orphan = g_shsec_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_shsec_read_metadata(cp, &md); diff --git a/sys/geom/stripe/g_stripe.c b/sys/geom/stripe/g_stripe.c index 9b4df1b8dba6..3ae6a0e3f871 100644 --- a/sys/geom/stripe/g_stripe.c +++ b/sys/geom/stripe/g_stripe.c @@ -954,6 +954,7 @@ g_stripe_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->access = g_stripe_access; gp->orphan = g_stripe_orphan; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = g_stripe_read_metadata(cp, &md); diff --git a/sys/geom/vinum/geom_vinum.c b/sys/geom/vinum/geom_vinum.c index 0c60a051619f..86f5c9f08e1f 100644 --- a/sys/geom/vinum/geom_vinum.c +++ b/sys/geom/vinum/geom_vinum.c @@ -599,6 +599,7 @@ gv_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) sc = gp->softc; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; if (g_attach(cp, pp) != 0) { g_destroy_consumer(cp); return (NULL); diff --git a/sys/geom/virstor/g_virstor.c b/sys/geom/virstor/g_virstor.c index e27d92b509d4..8e4725997ab2 100644 --- a/sys/geom/virstor/g_virstor.c +++ b/sys/geom/virstor/g_virstor.c @@ -780,6 +780,7 @@ g_virstor_taste(struct g_class *mp, struct g_provider *pp, int flags) gp->orphan = (void *)invalid_call; /* I really want these to fail. */ cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error == 0) { error = read_metadata(cp, &md);