From: Stefan Hajnoczi <[email protected]>
Signed-off-by: Stefan Hajnoczi <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Paolo Bonzini <[email protected]>
---
block/file-posix.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
index 328adb57233..df117f35d48 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -4362,12 +4362,20 @@ hdev_co_ioctl(BlockDriverState *bs, unsigned long int
req, void *buf)
return ret;
}
- if (req == SG_IO && s->pr_mgr) {
+ if (req == SG_IO) {
struct sg_io_hdr *io_hdr = buf;
- if (io_hdr->cmdp[0] == PERSISTENT_RESERVE_OUT ||
- io_hdr->cmdp[0] == PERSISTENT_RESERVE_IN) {
- return pr_manager_execute(s->pr_mgr,
qemu_get_current_aio_context(),
- s->fd, io_hdr);
+
+ if (s->pr_mgr) {
+ if (io_hdr->cmdp[0] == PERSISTENT_RESERVE_OUT ||
+ io_hdr->cmdp[0] == PERSISTENT_RESERVE_IN ||
+ io_hdr->cmdp[0] == PR_HELPER_CLEANUP) {
+ return pr_manager_execute(s->pr_mgr,
qemu_get_current_aio_context(),
+ s->fd, io_hdr);
+ }
+ } else if (io_hdr->cmdp[0] == PR_HELPER_CLEANUP) {
+ /* This is a nop without pr-manager */
+ io_hdr->status = GOOD;
+ return 0;
}
}
--
2.56.0