dasd_delete_device(device);
                return -EINVAL;
        }
+       device->base_discipline = base_discipline;
        if (!try_module_get(discipline->owner)) {
-               module_put(base_discipline->owner);
                dasd_delete_device(device);
                return -EINVAL;
        }
-       device->base_discipline = base_discipline;
        device->discipline = discipline;
 
        /* check_device will allocate block device if necessary */
        if (rc) {
                dev_warn(dev, "Setting the DASD online with discipline %s failed with rc=%i\n",
                         discipline->name, rc);
-               module_put(discipline->owner);
-               module_put(base_discipline->owner);
                dasd_delete_device(device);
                return rc;
        }