mbox series

[v2,00/11] Support persistent reservation operations

Message ID 20240513035230.60162-1-luchangqi.123@bytedance.com
Headers show
Series Support persistent reservation operations | expand

Message

Changqi Lu May 13, 2024, 3:52 a.m. UTC
Hi Stefan;

Thanks for your advices! The existing PRManager only works with
local scsi devices. This series will completely decouple devices
and drivers. The device can not only be scsi, but also other
devices such as nvme. The same is true for the driver,
which is completely unrestricted. And block/file-posix.c can
implement the new block driver, and pr_manager can be executed
after splicing ioctl commands in these drivers. This will be implemented
in subsequent patches.

v1->v2:
- Add sg_persist --report-capabilities for SCSI protocol and enable
  oncs and rescap for NVMe protocol.
- Add persistent reservation capabilities constants and helper functions for
  SCSI and NVMe protocol.
- Add comments for necessary APIs.
  
v1:
- Add seven APIs about persistent reservation command for block layer.
  These APIs including reading keys, reading reservations, registering,
  reserving, releasing, clearing and preempting.
- Add the necessary pr-related operation APIs for both the
  SCSI protocol and NVMe protocol at the device layer.
- Add scsi driver at the driver layer to verify the functions.

Changqi Lu (11):
  block: add persistent reservation in/out api
  block/raw: add persistent reservation in/out driver
  scsi/constant: add persistent reservation in/out protocol constants
  scsi/util: add helper functions for persistent reservation types
    conversion
  hw/scsi: add persistent reservation in/out api for scsi device
  block/nvme: add reservation command protocol constants
  hw/nvme: add helper functions for converting reservation types
  hw/nvme: enable ONCS reservations
  hw/nvme: enable namespace rescap function
  hw/nvme: add reservation protocal command
  block/iscsi: add persistent reservation in/out driver

 block/block-backend.c             | 390 ++++++++++++++++++++++++++
 block/io.c                        | 161 +++++++++++
 block/iscsi.c                     | 448 ++++++++++++++++++++++++++++++
 block/raw-format.c                |  55 ++++
 hw/nvme/ctrl.c                    | 307 +++++++++++++++++++-
 hw/nvme/ns.c                      |   7 +
 hw/nvme/nvme.h                    |  44 +++
 hw/scsi/scsi-disk.c               | 348 +++++++++++++++++++++++
 include/block/block-common.h      |  40 +++
 include/block/block-io.h          |  19 ++
 include/block/block_int-common.h  |  85 ++++++
 include/block/nvme.h              |  92 ++++++
 include/scsi/constants.h          |  52 ++++
 include/scsi/utils.h              |   8 +
 include/sysemu/block-backend-io.h |  22 ++
 scsi/utils.c                      |  77 +++++
 16 files changed, 2153 insertions(+), 2 deletions(-)