discover/boot: Store clean_* in the boot task
authorJeremy Kerr <jk@ozlabs.org>
Tue, 24 Sep 2013 03:04:25 +0000 (11:04 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Thu, 26 Sep 2013 06:28:56 +0000 (14:28 +0800)
... otherwise we won't clean up local files from earlier boot stages.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/boot.c

index 313bd2af2de9b7e23de69309d8cac3b93dc8b8f2..d0b57b5aac03505a306033845072740aa1f4c335 100644 (file)
@@ -42,6 +42,9 @@ struct boot_task {
        char *local_initrd;
        char *local_dtb;
        char *args;
+       unsigned int clean_image;
+       unsigned int clean_initrd;
+       unsigned int clean_dtb;
        struct pb_url *image, *initrd, *dtb;
        boot_status_fn status_fn;
        void *status_arg;
@@ -291,16 +294,13 @@ static void run_boot_hooks(struct boot_task *task)
 static void boot_process(void *ctx, int status)
 {
        struct boot_task *task = ctx;
-       unsigned int clean_image = 0;
-       unsigned int clean_initrd = 0;
-       unsigned int clean_dtb = 0;
        int result = -1;
 
        if (task->state == BOOT_STATE_INITIAL) {
                update_status(task->status_fn, task->status_arg,
                                BOOT_STATUS_INFO, "loading kernel");
                task->local_image = load_url_async(task, task->image,
-                                       &clean_image, boot_process);
+                                       &task->clean_image, boot_process);
                if (!task->local_image) {
                        update_status(task->status_fn, task->status_arg,
                                        BOOT_STATUS_ERROR,
@@ -324,7 +324,7 @@ static void boot_process(void *ctx, int status)
                        update_status(task->status_fn, task->status_arg,
                                        BOOT_STATUS_INFO, "loading initrd");
                        task->local_initrd = load_url_async(task, task->initrd,
-                                       &clean_initrd, boot_process);
+                                       &task->clean_initrd, boot_process);
                        if (!task->local_initrd) {
                                update_status(task->status_fn, task->status_arg,
                                                BOOT_STATUS_ERROR,
@@ -349,7 +349,7 @@ static void boot_process(void *ctx, int status)
                                        BOOT_STATUS_INFO,
                                        "loading device tree");
                        task->local_dtb = load_url_async(task, task->dtb,
-                                               &clean_dtb, boot_process);
+                                               &task->clean_dtb, boot_process);
                        if (!task->local_dtb) {
                                update_status(task->status_fn, task->status_arg,
                                                BOOT_STATUS_ERROR,
@@ -389,11 +389,11 @@ static void boot_process(void *ctx, int status)
        }
 
 no_load:
-       if (clean_image)
+       if (task->clean_image)
                unlink(task->local_image);
-       if (clean_initrd)
+       if (task->clean_initrd)
                unlink(task->local_initrd);
-       if (clean_dtb)
+       if (task->clean_dtb)
                unlink(task->local_dtb);
 
        if (!result) {