On 9/4/19 1:06 AM, Daniel Henrique Barboza wrote:
Following the same idea of avoid code repetition from the
previous patch, this commit introduces a new function that
aggregates the functions of qemuAddSharedDisk() and
qemuRemoveSharedDisk() into a single place, using a flag to
switch between add/remove operations.
Both qemuAddSharedDisk() and qemuRemoveSharedDisk() are
public, so keep them around to avoid changing other files
due to an internal qemu_conf.c refactory.
No functional change was made.
Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
src/qemu/qemu_conf.c | 130 +++++++++++++++++++++----------------------
1 file changed, 62 insertions(+), 68 deletions(-)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index a583440807..422f0d743d 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1646,19 +1646,35 @@ qemuSharedDeviceEntryInsert(virQEMUDriverPtr driver,
}
-/* qemuAddSharedDisk:
- * @driver: Pointer to qemu driver struct
- * @src: disk source
- * @name: The domain name
- *
- * Increase ref count and add the domain name into the list which
- * records all the domains that use the shared device if the entry
- * already exists, otherwise add a new entry.
- */
-int
-qemuAddSharedDisk(virQEMUDriverPtr driver,
- virDomainDiskDefPtr disk,
- const char *name)
+static int
+qemuSharedDeviceEntryRemove(virQEMUDriverPtr driver,
+ const char *key,
+ const char *name)
+{
+ qemuSharedDeviceEntryPtr entry = NULL;
+ int idx;
+
+ if (!(entry = virHashLookup(driver->sharedDevices, key)))
+ return -1;
+
+ /* Nothing to do if the shared disk is not recored in the table. */
+ if (!qemuSharedDeviceEntryDomainExists(entry, name, &idx))
+ return 0;
+
+ if (entry->ref != 1)
+ VIR_DELETE_ELEMENT(entry->domains, idx, entry->ref);
+ else
+ ignore_value(virHashRemoveEntry(driver->sharedDevices, key));
+
+ return 0;
+}
+
+
+static int
+qemuAddRemoveSharedDiskInternal(virQEMUDriverPtr driver,
+ virDomainDiskDefPtr disk,
+ const char *name,
+ bool addDisk)
This can be named qemuSharedDiskAddRemoveInternal().
Michal