diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-02-19 10:37:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-02-19 10:37:58 +0000 |
commit | 8c21fd00c98582703f1d0f701cd5bbfca2644b40 (patch) | |
tree | c5b54e8b4b235232b057a9c534d9a16d2208463d /src/nvme/nbft.c | |
parent | Adding upstream version 1.7.1. (diff) | |
download | libnvme-8c21fd00c98582703f1d0f701cd5bbfca2644b40.tar.xz libnvme-8c21fd00c98582703f1d0f701cd5bbfca2644b40.zip |
Adding upstream version 1.8.upstream/1.8
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/nvme/nbft.c')
-rw-r--r-- | src/nvme/nbft.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/nvme/nbft.c b/src/nvme/nbft.c index 2c87088..f2ffc21 100644 --- a/src/nvme/nbft.c +++ b/src/nvme/nbft.c @@ -274,7 +274,29 @@ static int read_ssns(struct nbft_info *nbft, ret = -EINVAL; goto fail; } + ssns->num_hfis = 1; for (i = 0; i < le16_to_cpu(raw_ssns->secondary_hfi_assoc_obj.length); i++) { + bool duplicate = false; + int j; + + for (j = 0; j < i; j++) { + if (ss_hfi_indexes[i] == ss_hfi_indexes[j]) { + duplicate = true; + break; + } + } + + if (!duplicate && + ss_hfi_indexes[i] == raw_ssns->primary_hfi_desc_index) + duplicate = true; + + if (duplicate) { + nvme_msg(NULL, LOG_DEBUG, + "file %s: SSNS %d skipping duplicate HFI index %d\n", + nbft->filename, ssns->index, ss_hfi_indexes[i]); + continue; + } + ssns->hfis[i + 1] = hfi_from_index(nbft, ss_hfi_indexes[i]); if (ss_hfi_indexes[i] && !ssns->hfis[i + 1]) nvme_msg(NULL, LOG_DEBUG, |