From dd2d5952c9fce80bd4d7c4ea2e20f4b7633a3d90 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Tue, 8 Oct 2024 11:30:10 +0200 Subject: [PATCH] machine: generalize rename_image_and_update_cache() logic This is a prep step to reuse the function in varlink interface --- src/machine/image-dbus.c | 14 +++----------- src/machine/machined-core.c | 26 ++++++++++++++++++++++++++ src/machine/machined.h | 1 + 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/machine/image-dbus.c b/src/machine/image-dbus.c index ff9d2f62581..da71b9115f4 100644 --- a/src/machine/image-dbus.c +++ b/src/machine/image-dbus.c @@ -127,17 +127,9 @@ int bus_image_method_rename( if (r == 0) return 1; /* Will call us back */ - /* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */ - assert_se(hashmap_remove_value(m->image_cache, image->name, image)); - - r = image_rename(image, new_name); - if (r < 0) { - image_unref(image); - return r; - } - - /* Then save the object again in the cache. */ - assert_se(hashmap_put(m->image_cache, image->name, image) > 0); + r = rename_image_and_update_cache(m, image, new_name); + if (r < 0) + return sd_bus_error_set_errnof(error, r, "Failed to rename image: %m"); return sd_bus_reply_method_return(message, NULL); } diff --git a/src/machine/machined-core.c b/src/machine/machined-core.c index e0e4f684e25..2836b90c6f8 100644 --- a/src/machine/machined-core.c +++ b/src/machine/machined-core.c @@ -456,3 +456,29 @@ int manager_acquire_image(Manager *m, const char *name, Image **ret) { TAKE_PTR(image); return 0; } + +int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name) { + int r; + + assert(m); + assert(image); + assert(new_name); + + /* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */ + assert_se(hashmap_remove_value(m->image_cache, image->name, image)); + + r = image_rename(image, new_name); + if (r < 0) { + image = image_unref(image); + return r; + } + + /* Then save the object again in the cache. */ + r = hashmap_put(m->image_cache, image->name, image); + if (r < 0) { + image = image_unref(image); + log_debug_errno(r, "Failed to put renamed image into cache, ignoring: %m"); + } + + return 0; +} diff --git a/src/machine/machined.h b/src/machine/machined.h index 9cc902f05f3..3d1f5026997 100644 --- a/src/machine/machined.h +++ b/src/machine/machined.h @@ -69,3 +69,4 @@ void manager_enqueue_gc(Manager *m); int machine_get_addresses(Machine* machine, struct local_address **ret_addresses); int machine_get_os_release(Machine *machine, char ***ret_os_release); int manager_acquire_image(Manager *m, const char *name, Image **ret); +int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name); -- 2.47.3