diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index 86addff3d..2f5642108 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -367,8 +367,6 @@ int spdk_bdev_free_io(struct spdk_bdev_io *bdev_io); int spdk_bdev_reset(struct spdk_bdev *bdev, enum spdk_bdev_reset_type, spdk_bdev_io_completion_cb cb, void *cb_arg); struct spdk_io_channel *spdk_bdev_get_io_channel(struct spdk_bdev *bdev, uint32_t priority); -void spdk_bdev_io_set_scsi_error(struct spdk_bdev_io *bdev_io, enum spdk_scsi_status sc, - enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq); /** * Get the status of bdev_io as an NVMe status code. diff --git a/include/spdk_internal/bdev.h b/include/spdk_internal/bdev.h index 5b242c0d2..180c7d50a 100644 --- a/include/spdk_internal/bdev.h +++ b/include/spdk_internal/bdev.h @@ -169,6 +169,19 @@ void spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, */ void spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, int sct, int sc); +/** + * Complete a bdev_io with a SCSI status code. + * + * \param bdev_io I/O to complete. + * \param sc SCSI Status Code. + * \param sk SCSI Sense Key. + * \param asc SCSI Additional Sense Code. + * \param ascq SCSI Additional Sense Code Qualifier. + */ +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); + + void spdk_scsi_nvme_translate(const struct spdk_bdev_io *bdev_io, int *sc, int *sk, int *asc, int *ascq); diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index d7f45cf28..e1d21dd63 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -916,14 +916,20 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta } void -spdk_bdev_io_set_scsi_error(struct spdk_bdev_io *bdev_io, enum spdk_scsi_status sc, - enum spdk_scsi_sense sk, uint8_t asc, uint8_t ascq) +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) { - bdev_io->status = SPDK_BDEV_IO_STATUS_SCSI_ERROR; - bdev_io->error.scsi.sc = sc; - bdev_io->error.scsi.sk = sk; - bdev_io->error.scsi.asc = asc; - bdev_io->error.scsi.ascq = ascq; + if (sc == SPDK_SCSI_STATUS_GOOD) { + bdev_io->status = SPDK_BDEV_IO_STATUS_SUCCESS; + } else { + bdev_io->status = SPDK_BDEV_IO_STATUS_SCSI_ERROR; + bdev_io->error.scsi.sc = sc; + bdev_io->error.scsi.sk = sk; + bdev_io->error.scsi.asc = asc; + bdev_io->error.scsi.ascq = ascq; + } + + spdk_bdev_io_complete(bdev_io, bdev_io->status); } void