yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

Blame SOURCES/kvm-block-introducing-bdrv_co_delete_file-interface.patch

902636
From 9581770f48911cbe68cfa1a7fa125df2a0a27d02 Mon Sep 17 00:00:00 2001
902636
From: Maxim Levitsky <mlevitsk@redhat.com>
902636
Date: Sun, 31 May 2020 16:40:33 +0100
902636
Subject: [PATCH 5/7] block: introducing 'bdrv_co_delete_file' interface
902636
MIME-Version: 1.0
902636
Content-Type: text/plain; charset=UTF-8
902636
Content-Transfer-Encoding: 8bit
902636
902636
RH-Author: Maxim Levitsky <mlevitsk@redhat.com>
902636
Message-id: <20200531164035.34188-2-mlevitsk@redhat.com>
902636
Patchwork-id: 97057
902636
O-Subject: [RHEL-AV-8.2.1 qemu-kvm PATCH 1/3] block: introducing 'bdrv_co_delete_file' interface
902636
Bugzilla: 1827630
902636
RH-Acked-by: Sergio Lopez Pascual <slp@redhat.com>
902636
RH-Acked-by: John Snow <jsnow@redhat.com>
902636
RH-Acked-by: Eric Blake <eblake@redhat.com>
902636
902636
From: Daniel Henrique Barboza <danielhb413@gmail.com>
902636
902636
Adding to Block Drivers the capability of being able to clean up
902636
its created files can be useful in certain situations. For the
902636
LUKS driver, for instance, a failure in one of its authentication
902636
steps can leave files in the host that weren't there before.
902636
902636
This patch adds the 'bdrv_co_delete_file' interface to block
902636
drivers and add it to the 'file' driver in file-posix.c. The
902636
implementation is given by 'raw_co_delete_file'.
902636
902636
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
902636
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
902636
Message-Id: <20200130213907.2830642-2-danielhb413@gmail.com>
902636
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
902636
(cherry picked from commit 9bffae14df879255329473a7bd578643af2d4c9c)
902636
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
902636
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
902636
---
902636
 block/file-posix.c        | 23 +++++++++++++++++++++++
902636
 include/block/block_int.h |  4 ++++
902636
 2 files changed, 27 insertions(+)
902636
902636
diff --git a/block/file-posix.c b/block/file-posix.c
902636
index dd18d40..1609598 100644
902636
--- a/block/file-posix.c
902636
+++ b/block/file-posix.c
902636
@@ -2388,6 +2388,28 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
902636
     return raw_co_create(&options, errp);
902636
 }
902636
 
902636
+static int coroutine_fn raw_co_delete_file(BlockDriverState *bs,
902636
+                                           Error **errp)
902636
+{
902636
+    struct stat st;
902636
+    int ret;
902636
+
902636
+    if (!(stat(bs->filename, &st) == 0) || !S_ISREG(st.st_mode)) {
902636
+        error_setg_errno(errp, ENOENT, "%s is not a regular file",
902636
+                         bs->filename);
902636
+        return -ENOENT;
902636
+    }
902636
+
902636
+    ret = unlink(bs->filename);
902636
+    if (ret < 0) {
902636
+        ret = -errno;
902636
+        error_setg_errno(errp, -ret, "Error when deleting file %s",
902636
+                         bs->filename);
902636
+    }
902636
+
902636
+    return ret;
902636
+}
902636
+
902636
 /*
902636
  * Find allocation range in @bs around offset @start.
902636
  * May change underlying file descriptor's file offset.
902636
@@ -3019,6 +3041,7 @@ BlockDriver bdrv_file = {
902636
     .bdrv_co_block_status = raw_co_block_status,
902636
     .bdrv_co_invalidate_cache = raw_co_invalidate_cache,
902636
     .bdrv_co_pwrite_zeroes = raw_co_pwrite_zeroes,
902636
+    .bdrv_co_delete_file = raw_co_delete_file,
902636
 
902636
     .bdrv_co_preadv         = raw_co_preadv,
902636
     .bdrv_co_pwritev        = raw_co_pwritev,
902636
diff --git a/include/block/block_int.h b/include/block/block_int.h
902636
index 529f153..562dca1 100644
902636
--- a/include/block/block_int.h
902636
+++ b/include/block/block_int.h
902636
@@ -316,6 +316,10 @@ struct BlockDriver {
902636
      */
902636
     int coroutine_fn (*bdrv_co_flush)(BlockDriverState *bs);
902636
 
902636
+    /* Delete a created file. */
902636
+    int coroutine_fn (*bdrv_co_delete_file)(BlockDriverState *bs,
902636
+                                            Error **errp);
902636
+
902636
     /*
902636
      * Flushes all data that was already written to the OS all the way down to
902636
      * the disk (for example file-posix.c calls fsync()).
902636
-- 
902636
1.8.3.1
902636