]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/firmware/efivars.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[mv-sheeva.git] / drivers / firmware / efivars.c
index ff0c373e3bbffcff0663efdf19c675ccf2f7ec78..5f29aafd44624e8ee1ccb9215735b9068013e056 100644 (file)
@@ -321,7 +321,7 @@ efivar_show_raw(struct efivar_entry *entry, char *buf)
 
 /*
  * Generic read/write functions that call the specific functions of
- * the atttributes...
+ * the attributes...
  */
 static ssize_t efivar_attr_show(struct kobject *kobj, struct attribute *attr,
                                char *buf)
@@ -677,8 +677,8 @@ create_efivars_bin_attributes(struct efivars *efivars)
 
        return 0;
 out_free:
-       kfree(efivars->new_var);
-       efivars->new_var = NULL;
+       kfree(efivars->del_var);
+       efivars->del_var = NULL;
        kfree(efivars->new_var);
        efivars->new_var = NULL;
        return error;
@@ -803,6 +803,8 @@ efivars_init(void)
        ops.set_variable = efi.set_variable;
        ops.get_next_variable = efi.get_next_variable;
        error = register_efivars(&__efivars, &ops, efi_kobj);
+       if (error)
+               goto err_put;
 
        /* Don't forget the systab entry */
        error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
@@ -810,18 +812,25 @@ efivars_init(void)
                printk(KERN_ERR
                       "efivars: Sysfs attribute export failed with error %d.\n",
                       error);
-               unregister_efivars(&__efivars);
-               kobject_put(efi_kobj);
+               goto err_unregister;
        }
 
+       return 0;
+
+err_unregister:
+       unregister_efivars(&__efivars);
+err_put:
+       kobject_put(efi_kobj);
        return error;
 }
 
 static void __exit
 efivars_exit(void)
 {
-       unregister_efivars(&__efivars);
-       kobject_put(efi_kobj);
+       if (efi_enabled) {
+               unregister_efivars(&__efivars);
+               kobject_put(efi_kobj);
+       }
 }
 
 module_init(efivars_init);