From nobody Thu Apr 2 23:54:50 2026 Received: from mail-dl1-f44.google.com (mail-dl1-f44.google.com [74.125.82.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EC442BEC4E for ; Sat, 14 Feb 2026 04:28:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771043308; cv=none; b=nc7kgyYb7yZmYDL0e3tGSkvFv91LaSMVc6owhNRYaTLegsiALbko5jsY4j6RJcc2nEfjVhBofY3j4tTXOyeeWFVRKu9GGXjlfRglrRg3pchb9TQCI5SV8n+S+ci6sxCSP5HxsMXmm7gys0JkyU3GAZlFaGvcKOrZo0uZR2Aw2Ss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771043308; c=relaxed/simple; bh=3qwkRFUlIv7SMQ+hbI7qAkH9qXXcpPjMaV1P9bpYGjw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mStnxRn6pgKIVt60gBQIg5yn+ZQK/Y8vrDrGUnaz8zILSve7DEfxawlnggxQfcD7sO8asc2jOwGumi0PLmGFQPN3l1k+v+MwtXwYLVrnkQ1a302R7/lNY7LsP6rGh0kB6PjhQqCoxmM6qHXiFBDlk0p9vgmB71fS9xTAjzJGsbo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=b4R/x/1/; arc=none smtp.client-ip=74.125.82.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="b4R/x/1/" Received: by mail-dl1-f44.google.com with SMTP id a92af1059eb24-124afd03fd1so2559664c88.0 for ; Fri, 13 Feb 2026 20:28:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771043305; x=1771648105; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aUvJMxt7knmUTeOZs2dmIkt23G0xfZRWuCisOpX3yO8=; b=b4R/x/1/A7WZnrf1WULBBa0wXuQAFQEFuHWVUVHpysoP15y0zJBq4VT7BWNFyXrFLz nkA+dw19KcQVwQD5bf6oNAkzwlfx4KAKnnnkEriab8P8F/FJwPp3HLcCftSjg6kCLmKw VL4lJO5yDn/ijDES/U1+swXGgOjWPZ9rvZkgXaEa+ADLpsySlhfv68tvjT01RzJ7ddkl jyLUto5hgV2lXbjqcNHhTC6/cvKKA2JQdENV0ZR99G7pKB86ZOrSkDRYNMhstb5ren5e Cyz6t4hEPaiJun7L81nmzdCDqtzo6Rj6JcVTUeWyzOsip4BB/MwP8DdXOU+9jdRQh5bb OP2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771043305; x=1771648105; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=aUvJMxt7knmUTeOZs2dmIkt23G0xfZRWuCisOpX3yO8=; b=KJO/0ME7/U6t3rhtqJeuz74uwHzcjDDlkz+iU/7ip4mKwGF8fuc50/TgrBOEZ5e7yQ 3FPEJZ+jA22C2InHv4difEc5T1TKKil6DzQi5haY9rvYH3TMpFA2lUuZt7typt4czyMZ M4ifRAFCabft1DsefcVTjsJPOJU6EaWyv9JgSGrsl85efFW54iwQ/nhRbpLEgUrDOHUs U1dCeO7KpyUU/nq0BrHTbWOyTuuTVJDi1+i4nno+pax9/AeqvBF6t++L1rzhpyjShAv7 126duJUp4dj+l06U7AiB6OezQvWsQtukUIy3h6nR6A04B8iGpENfXOcA9ZG6LkQoLNu2 sIJg== X-Forwarded-Encrypted: i=1; AJvYcCWQwoSorg0GEUeoyjH1sK7/Y9zjhmOs7tt9r6TaVx+AjjFYJyOEYLpjW/oeNjETS0pUCcHAC2TpC3bk1tw=@vger.kernel.org X-Gm-Message-State: AOJu0YzERG618EdYPRl4BKF4wa44kHb7j5UwPd5yRUg3Vgqapfxo7VZP 7ugBi7ZdW5zl3dk0Mprx6CeRLZ+6XswAHi/TJ79VlwQTr1G1u95tZ6AP3WCq9N34uJw= X-Gm-Gg: AZuq6aIJV0InVBO957JgoPvF8PPgEqAjmg0vXPDkaCa0rMSrQ8GMQY8UHb6dnuX0sKL eCv0c9spQ17k86wOcreDlq9c0m265MkEmahpC6sy7o7TLAcC0o94C6InhJPWaRLWBD2slhp+K11 bU/e2X2EdBP12o1Xlx3lie9fx5SdPlR6a32Qpz25qA/7jTT4WIbrJUQ0q+cYTpdoFUpMD+oXWqa OdTY/5mRoeT/eP49xjeUYOuLkndPaaAFM3WvlhbVTFPXxfD1yN0z7BV0ht13fQWcCxvnjnefcyB ReKimMUBJM7tiFdeeCvsD5ZFCJCSTcBZtdS/mdRke7ZkUi6a/bgACPWfVtGEpYb5z4jFGciU90G 06DKfxGgvATVayS3PFd6JD8SR0blmyC6JUZeIuo77As2e/7l4rRFe95//ySzQhc8N6YcMrpRRV1 eAgeuFXp/qqXTCOgxNe5AgCptvQg7b6c1VlOEwMt2kyz0Fqw== X-Received: by 2002:a05:7022:6897:b0:123:35a4:e8be with SMTP id a92af1059eb24-12741b6dae9mr681320c88.13.1771043305340; Fri, 13 Feb 2026 20:28:25 -0800 (PST) Received: from apollo.purestorage.com ([208.88.152.253]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-12742cbc900sm1021042c88.14.2026.02.13.20.28.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Feb 2026 20:28:25 -0800 (PST) From: Mohamed Khalfella To: Justin Tee , Naresh Gottumukkala , Paul Ely , Chaitanya Kulkarni , Christoph Hellwig , Jens Axboe , Keith Busch , Sagi Grimberg , James Smart , Hannes Reinecke Cc: Aaron Dailey , Randy Jennings , Dhaval Giani , linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Mohamed Khalfella Subject: [PATCH v3 05/21] nvmet: Send an AEN on CCR completion Date: Fri, 13 Feb 2026 20:25:06 -0800 Message-ID: <20260214042753.4073668-6-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260214042753.4073668-1-mkhalfella@purestorage.com> References: <20260214042753.4073668-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Send an AEN to initiator when impacted controller exists. The notification points to CCR log page that initiator can read to check which CCR operation completed. Signed-off-by: Mohamed Khalfella Reviewed-by: Hannes Reinecke Reviewed-by: Sagi Grimberg --- drivers/nvme/target/core.c | 25 ++++++++++++++++++++++--- drivers/nvme/target/nvmet.h | 3 ++- include/linux/nvme.h | 3 +++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 38f71e1a1b8e..a9f8a2242703 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -203,7 +203,7 @@ static void nvmet_async_event_work(struct work_struct *= work) nvmet_async_events_process(ctrl); } =20 -void nvmet_add_async_event(struct nvmet_ctrl *ctrl, u8 event_type, +static void nvmet_add_async_event_locked(struct nvmet_ctrl *ctrl, u8 event= _type, u8 event_info, u8 log_page) { struct nvmet_async_event *aen; @@ -216,13 +216,19 @@ void nvmet_add_async_event(struct nvmet_ctrl *ctrl, u= 8 event_type, aen->event_info =3D event_info; aen->log_page =3D log_page; =20 - mutex_lock(&ctrl->lock); list_add_tail(&aen->entry, &ctrl->async_events); - mutex_unlock(&ctrl->lock); =20 queue_work(nvmet_wq, &ctrl->async_event_work); } =20 +void nvmet_add_async_event(struct nvmet_ctrl *ctrl, u8 event_type, + u8 event_info, u8 log_page) +{ + mutex_lock(&ctrl->lock); + nvmet_add_async_event_locked(ctrl, event_type, event_info, log_page); + mutex_unlock(&ctrl->lock); +} + static void nvmet_add_to_changed_ns_log(struct nvmet_ctrl *ctrl, __le32 ns= id) { u32 i; @@ -1785,6 +1791,18 @@ struct nvmet_ctrl *nvmet_alloc_ctrl(struct nvmet_all= oc_ctrl_args *args) } EXPORT_SYMBOL_GPL(nvmet_alloc_ctrl); =20 +static void nvmet_ctrl_notify_ccr(struct nvmet_ctrl *ctrl) +{ + lockdep_assert_held(&ctrl->lock); + + if (nvmet_aen_bit_disabled(ctrl, NVME_AEN_BIT_CCR_COMPLETE)) + return; + + nvmet_add_async_event_locked(ctrl, NVME_AER_NOTICE, + NVME_AER_NOTICE_CCR_COMPLETED, + NVME_LOG_CCR); +} + static void nvmet_ctrl_complete_pending_ccr(struct nvmet_ctrl *ctrl) { struct nvmet_subsys *subsys =3D ctrl->subsys; @@ -1808,6 +1826,7 @@ static void nvmet_ctrl_complete_pending_ccr(struct nv= met_ctrl *ctrl) list_for_each_entry(ccr, &sctrl->ccr_list, entry) { if (ccr->ctrl =3D=3D ctrl) { ccr->ctrl =3D NULL; + nvmet_ctrl_notify_ccr(sctrl); break; } } diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index b06d905c08c8..0ed41a3d0562 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -44,7 +44,8 @@ * Supported optional AENs: */ #define NVMET_AEN_CFG_OPTIONAL \ - (NVME_AEN_CFG_NS_ATTR | NVME_AEN_CFG_ANA_CHANGE) + (NVME_AEN_CFG_NS_ATTR | NVME_AEN_CFG_ANA_CHANGE | \ + NVME_AEN_CFG_CCR_COMPLETE) #define NVMET_DISC_AEN_CFG_OPTIONAL \ (NVME_AEN_CFG_DISC_CHANGE) =20 diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 9b6d93270c59..fc33ae48d149 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -860,12 +860,14 @@ enum { NVME_AER_NOTICE_FW_ACT_STARTING =3D 0x01, NVME_AER_NOTICE_ANA =3D 0x03, NVME_AER_NOTICE_DISC_CHANGED =3D 0xf0, + NVME_AER_NOTICE_CCR_COMPLETED =3D 0xf4, }; =20 enum { NVME_AEN_BIT_NS_ATTR =3D 8, NVME_AEN_BIT_FW_ACT =3D 9, NVME_AEN_BIT_ANA_CHANGE =3D 11, + NVME_AEN_BIT_CCR_COMPLETE =3D 20, NVME_AEN_BIT_DISC_CHANGE =3D 31, }; =20 @@ -873,6 +875,7 @@ enum { NVME_AEN_CFG_NS_ATTR =3D 1 << NVME_AEN_BIT_NS_ATTR, NVME_AEN_CFG_FW_ACT =3D 1 << NVME_AEN_BIT_FW_ACT, NVME_AEN_CFG_ANA_CHANGE =3D 1 << NVME_AEN_BIT_ANA_CHANGE, + NVME_AEN_CFG_CCR_COMPLETE =3D 1 << NVME_AEN_BIT_CCR_COMPLETE, NVME_AEN_CFG_DISC_CHANGE =3D 1 << NVME_AEN_BIT_DISC_CHANGE, }; =20 --=20 2.52.0