diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 8303e3925..8b48e2553 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -200,7 +200,7 @@ static int nvme_ctrlr_read_ana_log_page(struct nvme_ctrlr *nvme_ctrlr); static int nvme_ns_cmp(struct nvme_ns *ns1, struct nvme_ns *ns2) { - return ns1->id - ns2->id; + return ns1->id < ns2->id ? -1 : ns1->id > ns2->id; } RB_GENERATE_STATIC(nvme_ns_tree, nvme_ns, node, nvme_ns_cmp); diff --git a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c index 17758da2c..142d40c6f 100644 --- a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c @@ -5801,6 +5801,18 @@ test_fail_path(void) free(bdev_io); } +static void +test_nvme_ns_cmp(void) +{ + struct nvme_ns nvme_ns1 = {}, nvme_ns2 = {}; + + nvme_ns1.id = 0; + nvme_ns2.id = UINT32_MAX; + + CU_ASSERT(nvme_ns_cmp(&nvme_ns1, &nvme_ns2) < 0); + CU_ASSERT(nvme_ns_cmp(&nvme_ns2, &nvme_ns1) > 0); +} + int main(int argc, const char **argv) { @@ -5848,6 +5860,7 @@ main(int argc, const char **argv) CU_ADD_TEST(suite, test_reconnect_ctrlr); CU_ADD_TEST(suite, test_retry_failover_ctrlr); CU_ADD_TEST(suite, test_fail_path); + CU_ADD_TEST(suite, test_nvme_ns_cmp); CU_basic_set_mode(CU_BRM_VERBOSE);