From nobody Mon May 18 19:51:14 2026 X-Original-To: dev-commits-src-main@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 4gK7hy3bk6z6cgXQ for ; Mon, 18 May 2026 19:51:14 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gK7hy1XVtz3Txq for ; Mon, 18 May 2026 19:51:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779133874; 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=4//sCDbG2Ps8e3VbRAQRLa+1lUEDvKziEf+O7XacwYw=; b=Y4js2is/HbELAH7zmOVs3r8bbSukg4jNaP4Q24iEgTv+he1Kmp5g7SwwAjNiTLeIvicu70 cXmlDoPTccJtgkopMs47OlHl56gMrkQ/WN2ZAc/7Yd6t532XABJO0EhbMtJM3g81JXh08A kPbz5lfYYTba3zgTmb+hlJGLj+OqvHcR09DINO/d9TObMT2D0xdbhM91wgKynFiAMN6DpM gFXZheTIznoQrv25biYY1d19FaYfFR+hfPLPM/ICNlZSaXYvthlheYgRm/Qw/MfqzH8lG8 2e2RNIi0dU6+JKr7VDM2fVCBY/vaCxXK2PCxnC3afyyyAs3dqBOQ5GWtQ8hetw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1779133874; a=rsa-sha256; cv=none; b=bXax4/x01yAU1w5Ewu6JxDbpktoXz28H3yUYP4KGh/T83IFo+HMHi7dLhyT3mu62hSwsqz B9FCcJZuZ6X38PGNc48fNuWERz6EuaiWTn10LWJX0fnUbq6/ezu7IvD7O9KPR+7FIM7V5h WCS52i0hvgTHN+NMt5d2pLgQUxJq46W3QkkkNZwDzHTaAsdcxMwZXbOsbVY9vbccBMQ1QH aQUp60OvkbvibKvKuu00BkvX2z8t/QXLLUWGMfkR5Y0hdLv6U7gbH4XpHcCrkKy6ktt0/y av6chsqhStuwVTkChF4qRp64fuMTCfPfot5TJK6HicD38+ts3LcV+lxeo1+IVQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779133874; 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=4//sCDbG2Ps8e3VbRAQRLa+1lUEDvKziEf+O7XacwYw=; b=S3ksG3nS5M1hFVj4hnq0509vfxBMtHjiBC1MAMASIZnKThmcW2ZMr1YsBl50PJCxbdObB5 ac1pQIQqbEmSGUO+nXuSsTPyELWmJeW8aa2HcyHdwnhIRE4wNk2wGj0G0y4es3sPfdO06p +gS17v30aZECjREzd8H8TE+WahhRRL1PksKRexY18loeseMNFUcjea1N3jeD7k8/3Ph21T RWePIasm51So2tTvGAJjLVsbhlwEtQGq9Cf2y9xo0gnKvMWR9d95uyv6qyi+fVOY6V43IF UXLaSEGFUz/Cmi9gSQgGINnmZ+aoNnZ9haoDtgMKGSKfMhyl8bRgEkE4C+usQw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gK7hy17TJzjbf for ; Mon, 18 May 2026 19:51:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 388f1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 18 May 2026 19:51:14 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: f1c5de5fab9d - main - ctld: Add a dedicated conf method for shutting down List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f1c5de5fab9d5cada11935418db11e19ebff7e34 Auto-Submitted: auto-generated Date: Mon, 18 May 2026 19:51:14 +0000 Message-Id: <6a0b6db2.388f1.53ec07f6@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=f1c5de5fab9d5cada11935418db11e19ebff7e34 commit f1c5de5fab9d5cada11935418db11e19ebff7e34 Author: John Baldwin AuthorDate: 2026-05-18 19:48:09 +0000 Commit: John Baldwin CommitDate: 2026-05-18 19:49:35 +0000 ctld: Add a dedicated conf method for shutting down Currently the main loop creates an empty config and applies it to force a shutdown of all of the existing configuration. While this is functional and does avoid duplicating some code, it is also a bit clunky and requires a special hack in the pidfile path handling in the conf::apply method. Instead, use a dedicated conf::shutdown method which tears down the CTL ports and LUNs and closes the sockets. Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D56532 --- usr.sbin/ctld/ctld.cc | 56 ++++++++++++++++++++++++++++++++++++--------------- usr.sbin/ctld/ctld.hh | 1 + 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/usr.sbin/ctld/ctld.cc b/usr.sbin/ctld/ctld.cc index 627ecf8bba93..24b02a936670 100644 --- a/usr.sbin/ctld/ctld.cc +++ b/usr.sbin/ctld/ctld.cc @@ -1976,11 +1976,9 @@ conf::apply(struct conf *oldconf) /* * Rename the pidfile if the pathname changes. On startup, * oldconf created via conf_new_from_kernel will not contain a - * valid pidfile_path. On shutdown, the temporary newconf - * will not contain a valid pidfile_path. + * valid pidfile_path. */ - if (!oldconf->conf_pidfile_path.empty() && - !conf_pidfile_path.empty()) { + if (!oldconf->conf_pidfile_path.empty()) { if (oldconf->conf_pidfile_path != conf_pidfile_path) { /* pidfile has changed. rename it */ log_debugx("moving pidfile to %s", @@ -2210,6 +2208,41 @@ conf::apply(struct conf *oldconf) return (cumulated_error); } +void +conf::shutdown() +{ + /* Deregister from iSNS servers. */ + for (auto &kv : conf_isns) + isns_deregister_targets(&kv.second); + + /* Remove all ports. */ + for (const auto &kv : conf_ports) { + const std::string &name = kv.first; + port *port = kv.second.get(); + + if (port->is_dummy()) + continue; + log_debugx("removing port \"%s\"", name.c_str()); + if (!port->kernel_remove()) + log_warnx("failed to remove port %s", name.c_str()); + } + + /* Remove all LUNs. */ + for (const auto &kv : conf_luns) { + struct lun *lun = kv.second.get(); + + if (!lun->kernel_remove()) + log_warnx("failed to remove lun \"%s\", CTL lun %d", + lun->name(), lun->ctl_lun()); + } + + /* Close sockets on all portal groups. */ + for (auto &kv : conf_portal_groups) + kv.second->close_sockets(); + for (auto &kv : conf_transport_groups) + kv.second->close_sockets(); +} + bool timed_out(void) { @@ -2767,21 +2800,12 @@ main(int argc, char **argv) oldconf.reset(); } } else if (sigterm_received) { - log_debugx("exiting on signal; " - "reloading empty configuration"); + log_debugx("exiting on signal"); - log_debugx("removing CTL iSCSI ports " + log_debugx("removing CTL iSCSI and NVMeoF ports " "and terminating all connections"); - oldconf = std::move(newconf); - newconf = std::make_unique(); - if (debug > 0) - newconf->set_debug(debug); - error = newconf->apply(oldconf.get()); - if (error != 0) - log_warnx("failed to apply configuration"); - oldconf.reset(); - + newconf->shutdown(); log_warnx("exiting on signal"); return (0); } else { diff --git a/usr.sbin/ctld/ctld.hh b/usr.sbin/ctld/ctld.hh index d3b08dc12603..7ae033804157 100644 --- a/usr.sbin/ctld/ctld.hh +++ b/usr.sbin/ctld/ctld.hh @@ -513,6 +513,7 @@ struct conf { int apply(struct conf *oldconf); void delete_target_luns(struct lun *lun); bool reuse_portal_group_socket(struct portal &newp); + void shutdown(); bool verify(); private: