diff mbox series

[RESEND,V5,7/7] Documentation: document ublk user recovery feature

Message ID 20220923061505.52007-8-ZiyangZhang@linux.alibaba.com (mailing list archive)
State New, archived
Headers show
Series ublk_drv: add USER_RECOVERY support | expand

Commit Message

Ziyang Zhang Sept. 23, 2022, 6:15 a.m. UTC
Add documentation for user recovery feature of ublk subsystem.

Signed-off-by: ZiyangZhang <ZiyangZhang@linux.alibaba.com>
---
 Documentation/block/ublk.rst | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

Comments

Ming Lei Sept. 23, 2022, 1:58 p.m. UTC | #1
On Fri, Sep 23, 2022 at 02:15:05PM +0800, ZiyangZhang wrote:
> Add documentation for user recovery feature of ublk subsystem.
> 
> Signed-off-by: ZiyangZhang <ZiyangZhang@linux.alibaba.com>
> ---
>  Documentation/block/ublk.rst | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/Documentation/block/ublk.rst b/Documentation/block/ublk.rst
> index 2122d1a4a541..c3dde087e601 100644
> --- a/Documentation/block/ublk.rst
> +++ b/Documentation/block/ublk.rst
> @@ -144,6 +144,38 @@ managing and controlling ublk devices with help of several control commands:
>    For retrieving device info via ``ublksrv_ctrl_dev_info``. It is the server's
>    responsibility to save IO target specific info in userspace.
>  
> +- ``UBLK_CMD_START_USER_RECOVERY``
> +
> +  This command is valid if ``UBLK_F_USER_RECOVERY`` feature is enabled. This
> +  command is accepted after the old process has exited, ublk device is quiesced
> +  and ``/dev/ublkc*`` is closed. User should send this command before he starts
> +  a new process which opens ``/dev/ublkc*``. When this command returns, the
> +  ublk device is ready for the new process.
> +
> +- ``UBLK_CMD_END_USER_RECOVERY``
> +
> +  This command is valid if ``UBLK_F_USER_RECOVERY`` feature is enabled. This
> +  command is accepted after a new process has opened ``/dev/ublkc*`` and get
> +  all ublk queues be ready. When this command returns, ublk device is
> +  unquiesced and new I/O requests are passed to the new process.
> +
> +- user recovery feature description
> +
> +  Two new features are added for user recovery: ``UBLK_F_USER_RECOVERY`` and
> +  ``UBLK_F_USER_RECOVERY_REISSUE``.
> +
> +  With ``UBLK_F_USER_RECOVERY`` set, after one ubq_daemon(ublksrv io handler) is
> +  dying, ublk does not release ``/dev/ublkc*`` or ``/dev/ublkb*`` but requeues all

The above looks not accurate, the old ubq daemon has to release
/dev/ublkc*, and the new ubq daemon needs to re-open it, and
here I think it is fine to just mention /dev/ublkb* won't be
deleted during the whole recovery, or the device ID is kept,
and it is ublk server's responsibility to recover the device
context by its own knowledge.



thanks,
Ming
diff mbox series

Patch

diff --git a/Documentation/block/ublk.rst b/Documentation/block/ublk.rst
index 2122d1a4a541..c3dde087e601 100644
--- a/Documentation/block/ublk.rst
+++ b/Documentation/block/ublk.rst
@@ -144,6 +144,38 @@  managing and controlling ublk devices with help of several control commands:
   For retrieving device info via ``ublksrv_ctrl_dev_info``. It is the server's
   responsibility to save IO target specific info in userspace.
 
+- ``UBLK_CMD_START_USER_RECOVERY``
+
+  This command is valid if ``UBLK_F_USER_RECOVERY`` feature is enabled. This
+  command is accepted after the old process has exited, ublk device is quiesced
+  and ``/dev/ublkc*`` is closed. User should send this command before he starts
+  a new process which opens ``/dev/ublkc*``. When this command returns, the
+  ublk device is ready for the new process.
+
+- ``UBLK_CMD_END_USER_RECOVERY``
+
+  This command is valid if ``UBLK_F_USER_RECOVERY`` feature is enabled. This
+  command is accepted after a new process has opened ``/dev/ublkc*`` and get
+  all ublk queues be ready. When this command returns, ublk device is
+  unquiesced and new I/O requests are passed to the new process.
+
+- user recovery feature description
+
+  Two new features are added for user recovery: ``UBLK_F_USER_RECOVERY`` and
+  ``UBLK_F_USER_RECOVERY_REISSUE``.
+
+  With ``UBLK_F_USER_RECOVERY`` set, after one ubq_daemon(ublksrv io handler) is
+  dying, ublk does not release ``/dev/ublkc*`` or ``/dev/ublkb*`` but requeues all
+  inflight requests which have not been issued to userspace. Requests which have
+  been issued to userspace are aborted.
+
+  With ``UBLK_F_USER_RECOVERY_REISSUE`` set, after one ubq_daemon(ublksrv io
+  handler) is dying, contrary to ``UBLK_F_USER_RECOVERY``, requests which have been
+  issued to userspace are requeued and will be re-issued to the new process after
+  handling ``UBLK_CMD_END_USER_RECOVERY``. ``UBLK_F_USER_RECOVERY_REISSUE`` is
+  designed for backends who tolerate double-write since the driver may issue the
+  same I/O request twice. It might be useful to a read-only FS or a VM backend.
+
 Data plane
 ----------