Commit 1e978c87 authored by Marcin Pytel's avatar Marcin Pytel Committed by Tomasz Zawadzki
Browse files

bdev: split functions to commit nvme/aio/scsi to setting status and completing functions



Change-Id: I0909385d4617d221755f5ddc55a813139595fe45
Signed-off-by: default avatarMarcin Pytel <marcin.pytel@solidigm.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26486


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent 32c96c17
Loading
Loading
Loading
Loading
+50 −3
Original line number Diff line number Diff line
@@ -400,6 +400,9 @@ enum spdk_bdev_io_status {
	SPDK_MIN_BDEV_IO_STATUS = SPDK_BDEV_IO_STATUS_AIO_ERROR,
};

/* We have to use the typedef in the function declaration to appease astyle. */
typedef enum spdk_bdev_io_status spdk_bdev_io_status_t;

struct spdk_bdev_name {
	char *name;
	struct spdk_bdev *bdev;
@@ -1349,7 +1352,19 @@ void spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io,
			   enum spdk_bdev_io_status status);

/**
 * Complete a bdev_io with an NVMe status code and DW0 completion queue entry
 * Set a bdev_io with an NVMe status code and DW0 completion queue entry
 *
 * \param bdev_io I/O to set status.
 * \param cdw0 NVMe Completion Queue DW0 value (set to 0 if not applicable)
 * \param sct NVMe Status Code Type.
 * \param sc NVMe Status Code.
 * \return IO status corresponding to the NVMe status
 */
enum spdk_bdev_io_status spdk_bdev_io_set_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0,
		int sct, int sc);

/**
 * Set and complete a bdev_io with an NVMe status code and DW0 completion queue entry
 *
 * \param bdev_io I/O to complete.
 * \param cdw0 NVMe Completion Queue DW0 value (set to 0 if not applicable)
@@ -1360,7 +1375,20 @@ void spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cd
				       int sc);

/**
 * Complete a bdev_io with a SCSI status code.
 * Set a bdev_io with a SCSI status code.
 *
 * \param bdev_io I/O to set status.
 * \param sc SCSI Status Code.
 * \param sk SCSI Sense Key.
 * \param asc SCSI Additional Sense Code.
 * \param ascq SCSI Additional Sense Code Qualifier.
 * \return IO status corresponding to the SCSI status
 */
enum spdk_bdev_io_status spdk_bdev_io_set_scsi_status(struct spdk_bdev_io *bdev_io,
		enum spdk_scsi_status sc, enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq);

/**
 * Set and complete a bdev_io with a SCSI status code.
 *
 * \param bdev_io I/O to complete.
 * \param sc SCSI Status Code.
@@ -1372,13 +1400,32 @@ void spdk_bdev_io_complete_scsi_status(struct spdk_bdev_io *bdev_io, enum spdk_s
				       enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq);

/**
 * Complete a bdev_io with AIO errno.
 * Set a bdev_io with AIO errno.
 *
 * \param bdev_io I/O to set status.
 * \param aio_result Negative errno returned from AIO.
 * \return IO status corresponding to the AIO result
 */
enum spdk_bdev_io_status spdk_bdev_io_set_aio_status(struct spdk_bdev_io *bdev_io, int aio_result);

/**
 * Set and complete a bdev_io with AIO errno.
 *
 * \param bdev_io I/O to complete.
 * \param aio_result Negative errno returned from AIO.
 */
void spdk_bdev_io_complete_aio_status(struct spdk_bdev_io *bdev_io, int aio_result);

/**
 * Copy a bdev_io status from another bdev_io.
 *
 * \param bdev_io I/O to set status.
 * \param base_io I/O from which to copy the status.
 * \return IO status corresponding to the base_io status
 */
enum spdk_bdev_io_status spdk_bdev_io_set_base_io_status(struct spdk_bdev_io *bdev_io,
		const struct spdk_bdev_io *base_io);

/**
 * Complete a bdev_io copying a status from another bdev_io.
 *
+59 −21
Original line number Diff line number Diff line
@@ -7883,8 +7883,8 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta
	bdev_io_complete(bdev_io);
}

void
spdk_bdev_io_complete_scsi_status(struct spdk_bdev_io *bdev_io, enum spdk_scsi_status sc,
spdk_bdev_io_status_t
spdk_bdev_io_set_scsi_status(struct spdk_bdev_io *bdev_io, enum spdk_scsi_status sc,
			     enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq)
{
	enum spdk_bdev_io_status status;
@@ -7899,6 +7899,15 @@ spdk_bdev_io_complete_scsi_status(struct spdk_bdev_io *bdev_io, enum spdk_scsi_s
		bdev_io->internal.error.scsi.ascq = ascq;
	}

	return status;
}

void
spdk_bdev_io_complete_scsi_status(struct spdk_bdev_io *bdev_io, enum spdk_scsi_status sc,
				  enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq)
{
	enum spdk_bdev_io_status status = spdk_bdev_io_set_scsi_status(bdev_io, sc, sk, asc, ascq);

	spdk_bdev_io_complete(bdev_io, status);
}

@@ -7942,8 +7951,8 @@ spdk_bdev_io_get_scsi_status(const struct spdk_bdev_io *bdev_io,
	}
}

void
spdk_bdev_io_complete_aio_status(struct spdk_bdev_io *bdev_io, int aio_result)
spdk_bdev_io_status_t
spdk_bdev_io_set_aio_status(struct spdk_bdev_io *bdev_io, int aio_result)
{
	enum spdk_bdev_io_status status;

@@ -7955,6 +7964,14 @@ spdk_bdev_io_complete_aio_status(struct spdk_bdev_io *bdev_io, int aio_result)

	bdev_io->internal.error.aio_result = aio_result;

	return status;
}

void
spdk_bdev_io_complete_aio_status(struct spdk_bdev_io *bdev_io, int aio_result)
{
	enum spdk_bdev_io_status status = spdk_bdev_io_set_aio_status(bdev_io, aio_result);

	spdk_bdev_io_complete(bdev_io, status);
}

@@ -7972,8 +7989,8 @@ spdk_bdev_io_get_aio_status(const struct spdk_bdev_io *bdev_io, int *aio_result)
	}
}

void
spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, int sct, int sc)
spdk_bdev_io_status_t
spdk_bdev_io_set_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, int sct, int sc)
{
	enum spdk_bdev_io_status status;

@@ -7989,6 +8006,14 @@ spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, i
	bdev_io->internal.error.nvme.sct = sct;
	bdev_io->internal.error.nvme.sc = sc;

	return status;
}

void
spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, int sct, int sc)
{
	enum spdk_bdev_io_status status = spdk_bdev_io_set_nvme_status(bdev_io, cdw0, sct, sc);

	spdk_bdev_io_complete(bdev_io, status);
}

@@ -8080,31 +8105,44 @@ spdk_bdev_io_get_nvme_fused_status(const struct spdk_bdev_io *bdev_io, uint32_t
	*cdw0 = bdev_io->internal.error.nvme.cdw0;
}

void
spdk_bdev_io_complete_base_io_status(struct spdk_bdev_io *bdev_io,
spdk_bdev_io_status_t
spdk_bdev_io_set_base_io_status(struct spdk_bdev_io *bdev_io,
				const struct spdk_bdev_io *base_io)
{
	enum spdk_bdev_io_status status;

	switch (base_io->internal.status) {
	case SPDK_BDEV_IO_STATUS_NVME_ERROR:
		spdk_bdev_io_complete_nvme_status(bdev_io,
		status = spdk_bdev_io_set_nvme_status(bdev_io,
						      base_io->internal.error.nvme.cdw0,
						      base_io->internal.error.nvme.sct,
						      base_io->internal.error.nvme.sc);
		break;
	case SPDK_BDEV_IO_STATUS_SCSI_ERROR:
		spdk_bdev_io_complete_scsi_status(bdev_io,
		status = spdk_bdev_io_set_scsi_status(bdev_io,
						      base_io->internal.error.scsi.sc,
						      base_io->internal.error.scsi.sk,
						      base_io->internal.error.scsi.asc,
						      base_io->internal.error.scsi.ascq);
		break;
	case SPDK_BDEV_IO_STATUS_AIO_ERROR:
		spdk_bdev_io_complete_aio_status(bdev_io, base_io->internal.error.aio_result);
		status = spdk_bdev_io_set_aio_status(bdev_io, base_io->internal.error.aio_result);
		break;
	default:
		spdk_bdev_io_complete(bdev_io, base_io->internal.status);
		status = base_io->internal.status;
		break;
	}

	return status;
}

void
spdk_bdev_io_complete_base_io_status(struct spdk_bdev_io *bdev_io,
				     const struct spdk_bdev_io *base_io)
{
	enum spdk_bdev_io_status status = spdk_bdev_io_set_base_io_status(bdev_io, base_io);

	spdk_bdev_io_complete(bdev_io, status);
}

struct spdk_thread *
+4 −0
Original line number Diff line number Diff line
@@ -153,9 +153,13 @@
	spdk_bdev_io_set_buf;
	spdk_bdev_io_set_md_buf;
	spdk_bdev_io_complete;
	spdk_bdev_io_set_nvme_status;
	spdk_bdev_io_complete_nvme_status;
	spdk_bdev_io_set_scsi_status;
	spdk_bdev_io_complete_scsi_status;
	spdk_bdev_io_set_aio_status;
	spdk_bdev_io_complete_aio_status;
	spdk_bdev_io_set_base_io_status;
	spdk_bdev_io_complete_base_io_status;
	spdk_bdev_io_get_thread;
	spdk_bdev_io_get_io_channel;