[SPDK] An issue with Persistent Reservation Replace Reservation

Valeriy Glushkov <gvvua at ua.fm> Mon, 24 May 2021 14:40:56 +0300
Newsgroups dev.linux.lists.spdk
Message-ID <op.03waqiy6v4n1vf@sam8>
Hi All,

 From the NVMe v1.4a Specification 8.8.2 Registering:
"A host may replace its reservation key without regard to its registration  
status or current reservation key value by setting the Ignore Existing Key  
(IEKEY) bit to '1' in the Reservation Register command."

But the recent SPDK code in lib/nvmf/subsystem.c that controls the  
Reservation replacing is:

     case SPDK_NVME_RESERVE_REPLACE_KEY:
        if (!reg || (!iekey && reg->rkey != key.crkey)) {
          SPDK_ERRLOG("No registrant or current key doesn't match "
          "with existing registrant key\n");
          status = SPDK_NVME_SC_RESERVATION_CONFLICT;
          goto exit;
        }

The code rejects replacements when a host is not registered at the time,  
but set IEKEY=1.

I think it an issue in the SPDK NVMf implementation of Persistent  
Reservation that should be fixed, isn't it?

-- 
Best regards,
Valeriy Glushkov
www.starwind.com