bool changed;
 
        ret = reread_config_rom(device, device->generation, &changed);
-       if (ret != RCODE_COMPLETE) {
-               if (device->config_rom_retries < MAX_RETRIES / 2 &&
-                   atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
-                       device->config_rom_retries++;
-                       fw_schedule_device_work(device, RETRY_DELAY / 2);
-
-                       return;
-               }
-               goto give_up;
-       }
+       if (ret != RCODE_COMPLETE)
+               goto failed_config_rom;
 
        if (!changed) {
                if (atomic_cmpxchg(&device->state,
        device_for_each_child(&device->device, NULL, shutdown_unit);
 
        ret = read_config_rom(device, device->generation);
-       if (ret != RCODE_COMPLETE) {
-               if (device->config_rom_retries < MAX_RETRIES &&
-                   atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
-                       device->config_rom_retries++;
-                       fw_schedule_device_work(device, RETRY_DELAY);
-
-                       return;
-               }
-               goto give_up;
-       }
+       if (ret != RCODE_COMPLETE)
+               goto failed_config_rom;
 
        fw_device_cdev_update(device);
        create_units(device);
        device->config_rom_retries = 0;
        goto out;
 
- give_up:
+ failed_config_rom:
+       if (device->config_rom_retries < MAX_RETRIES &&
+           atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
+               device->config_rom_retries++;
+               fw_schedule_device_work(device, RETRY_DELAY);
+               return;
+       }
+
        fw_notice(card, "giving up on refresh of device %s: %s\n",
                  dev_name(&device->device), fw_rcode_string(ret));
  gone: