Commit d459b164 authored by Jens Axboe's avatar Jens Axboe
Browse files

Merge tag 'nvme-6.17-2025-07-31' of git://git.infradead.org/nvme into block-6.17

Pull NVMe changes from Christoph:

"- add support for getting the FDP featuee in fabrics passthru path
   (Nitesh Shetty)
 - add capability to connect to an administrative controller
   (Kamaljit Singh)
 - fix a leak on sgl setup error (Keith Busch)
 - initialize discovery subsys after debugfs is initialized
   (Mohamed Khalfella)
 - fix various comment typos (Bjorn Helgaas)
 - remove unneeded semicolons (Jiapeng Chong)"

* tag 'nvme-6.17-2025-07-31' of git://git.infradead.org/nvme:
  nvme: fix various comment typos
  nvme-auth: remove unneeded semicolon
  nvme-pci: fix leak on sgl setup error
  nvmet: initialize discovery subsys after debugfs is initialized
  nvme: add capability to connect to an administrative controller
  nvmet: add support for FDP in fabrics passthru path
parents 04225d13 367c240b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -742,7 +742,7 @@ static int nvme_auth_secure_concat(struct nvme_ctrl *ctrl,
			 "%s: qid %d failed to generate digest, error %d\n",
			 __func__, chap->qid, ret);
		goto out_free_psk;
	};
	}
	dev_dbg(ctrl->device, "%s: generated digest %s\n",
		 __func__, digest);
	ret = nvme_auth_derive_tls_psk(chap->hash_id, psk, psk_len,
@@ -752,7 +752,7 @@ static int nvme_auth_secure_concat(struct nvme_ctrl *ctrl,
			 "%s: qid %d failed to derive TLS psk, error %d\n",
			 __func__, chap->qid, ret);
		goto out_free_digest;
	};
	}

	tls_key = nvme_tls_psk_refresh(ctrl->opts->keyring,
				       ctrl->opts->host->nqn,
+16 −0
Original line number Diff line number Diff line
@@ -3158,6 +3158,11 @@ static inline bool nvme_discovery_ctrl(struct nvme_ctrl *ctrl)
	return ctrl->opts && ctrl->opts->discovery_nqn;
}

static inline bool nvme_admin_ctrl(struct nvme_ctrl *ctrl)
{
	return ctrl->cntrltype == NVME_CTRL_ADMIN;
}

static bool nvme_validate_cntlid(struct nvme_subsystem *subsys,
		struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
{
@@ -3670,6 +3675,17 @@ int nvme_init_ctrl_finish(struct nvme_ctrl *ctrl, bool was_suspended)
	if (ret)
		return ret;

	if (nvme_admin_ctrl(ctrl)) {
		/*
		 * An admin controller has one admin queue, but no I/O queues.
		 * Override queue_count so it only creates an admin queue.
		 */
		dev_dbg(ctrl->device,
			"Subsystem %s is an administrative controller",
			ctrl->subsys->subnqn);
		ctrl->queue_count = 1;
	}

	ret = nvme_configure_apst(ctrl);
	if (ret < 0)
		return ret;
+2 −2
Original line number Diff line number Diff line
@@ -1363,7 +1363,7 @@ nvme_fc_disconnect_assoc_done(struct nvmefc_ls_req *lsreq, int status)
 * down, and the related FC-NVME Association ID and Connection IDs
 * become invalid.
 *
 * The behavior of the fc-nvme initiator is such that it's
 * The behavior of the fc-nvme initiator is such that its
 * understanding of the association and connections will implicitly
 * be torn down. The action is implicit as it may be due to a loss of
 * connectivity with the fc-nvme target, so you may never get a
@@ -2777,7 +2777,7 @@ nvme_fc_queue_rq(struct blk_mq_hw_ctx *hctx,
	 * as WRITE ZEROES will return a non-zero rq payload_bytes yet
	 * there is no actual payload to be transferred.
	 * To get it right, key data transmission on there being 1 or
	 * more physical segments in the sg list. If there is no
	 * more physical segments in the sg list. If there are no
	 * physical segments, there is no payload.
	 */
	if (blk_rq_nr_phys_segments(rq)) {
+1 −1
Original line number Diff line number Diff line
@@ -935,7 +935,7 @@ static blk_status_t nvme_pci_setup_data_sgl(struct request *req,

	nvme_pci_sgl_set_seg(&iod->cmd.common.dptr.sgl, sgl_dma, mapped);
	if (unlikely(iter->status))
		nvme_free_sgls(req);
		nvme_unmap_data(req);
	return iter->status;
}

+1 −1
Original line number Diff line number Diff line
@@ -2179,7 +2179,7 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new)

	/*
	 * Only start IO queues for which we have allocated the tagset
	 * and limitted it to the available queues. On reconnects, the
	 * and limited it to the available queues. On reconnects, the
	 * queue number might have changed.
	 */
	nr_queues = min(ctrl->tagset->nr_hw_queues + 1, ctrl->queue_count);
Loading