Hi; You can test it in spdk. First start spdk and execute the following command.
``` dd if=/dev/zero of=test.img bs=1G count=10 RPC=/root/source/spdk/spdk/scripts/rpc.py FILE=/root/test.img $RPC bdev_aio_create $FILE aio0 512 $RPC iscsi_create_portal_group 1 127.0.0.1:3260 $RPC iscsi_create_initiator_group 2 ANY ANY $RPC iscsi_create_target_node target0 target0_alias aio0:0 1:2 64 -d ``` Then start qemu and mount an nvme disk. Execute the following test command. ``` #reporter nvme resv-report /dev/nvme0n1 #register nvme resv-register /dev/nvme0n1 --nrkey 3 --rrega 0 #unregister nvme resv-register /dev/nvme0n1 --crkey 3 --rrega 1 # register replace nvme resv-register /dev/nvme0n1 --crkey 3 --nrkey 5 --rrega 2 #release nvme resv-release /dev/nvme0n1 --crkey 5 --rtype 1 --rrela 0 #clear nvme resv-release /dev/nvme0n1 --crkey 5 --rtype 1 --rrela 1 #reserve nvme resv-acquire /dev/nvme0n1 --crkey 3 --rtype 1 --racqa 0 #premmpt nvme resv-acquire /dev/nvme0n1 --crkey 6 --prkey 3 --rtype 1 --racqa 1 ``` On 2024/7/26 14:25, Klaus Jensen wrote: > On Jul 25 19:42, 卢长奇 wrote: >> Hi, >> >> ``` >> 2685 nvme_status->regctl_ds[i].cntlid = nvme_ctrl(req)->cntlid; >> 2686 nvme_status->regctl_ds[i].rkey = keys_info->keys[i]; >> 2687 nvme_status->regctl_ds[i].rcsts = keys_info->keys[i] == >> 2688 reservation->key ? 1 : 0; >> 2689 /* hostid is not supported currently */ >> 2670 memset(&nvme_status->regctl_ds[i].hostid, 0, 8); >> ``` >> >> Klaus, I think hostid(2685) is stored locally like cntlid, i >> can get cntlid by nvme_ctrl(req)->cntlid, but I can't >> find a good way to get the host ID(2670). So I add a comment >> "/* hostid is not supported currently */". Could you give me >> some advices? >> > > The Host Identifier is just a 64 or 128 bit value that the host can set > with Set Feature. So, it is fine (and normal) that the value is > initially zero, but the host should be able to set it on controllers > with Set Feature to indicate if a controller belongs to the same host or > not. > >> And using spdk as target will not fail, but it will show 0 at hostid >> at present. > > Host Identifier 0 is a valid value when used with reservations; 0 > indicates that the host associated with the controller is not associated > with any other controllers in the subsystem. So if two controllers have > Host Identifier set to 0, that implicitly mean they are associated with > two different hosts. > >> The relevant tests in qemu are as follows, >> >> ``` >> root@node1:~# nvme resv-report /dev/nvme0n1 >> NVME Reservation Report success >> >> NVME Reservation status: >> >> gen : 1 >> regctl : 1 >> rtype : 0 >> ptpls : 0 >> regctl[0] : >> cntlid : 0 >> rcsts : 0 >> hostid : 0 >> rkey : 6 >> ``` > > I was hoping for an example on how to setup some simple iscsi stuff so I > could test the feature.