aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
authorAndy Whitcroft <apw@canonical.com>2012-10-11 06:32:19 -0400
committerMatt Fleming <matt.fleming@intel.com>2012-10-30 06:39:22 -0400
commit5c9b50ab8ca962bc085cfb49bae947910d73f794 (patch)
tree48fb43e7b68aa3bd6597774f8569cd846af7dcd1 /drivers/firmware
parent45a937a883c4411648b80e87341b237cc48009c1 (diff)
efivarfs: efivarfs_fill_super() fix inode reference counts
When d_make_root() fails it will automatically drop the reference on the root inode. We should not be doing so as well. Signed-off-by: Andy Whitcroft <apw@canonical.com> Acked-by: Matthew Garrett <mjg@redhat.com> Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/efivars.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
index 6e5f367145f5..adfc4863202b 100644
--- a/drivers/firmware/efivars.c
+++ b/drivers/firmware/efivars.c
@@ -948,7 +948,6 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
948 struct dentry *root; 948 struct dentry *root;
949 struct efivar_entry *entry, *n; 949 struct efivar_entry *entry, *n;
950 struct efivars *efivars = &__efivars; 950 struct efivars *efivars = &__efivars;
951 int err;
952 951
953 efivarfs_sb = sb; 952 efivarfs_sb = sb;
954 953
@@ -960,18 +959,14 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
960 sb->s_time_gran = 1; 959 sb->s_time_gran = 1;
961 960
962 inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0); 961 inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0);
963 if (!inode) { 962 if (!inode)
964 err = -ENOMEM; 963 return -ENOMEM;
965 goto fail;
966 }
967 inode->i_op = &efivarfs_dir_inode_operations; 964 inode->i_op = &efivarfs_dir_inode_operations;
968 965
969 root = d_make_root(inode); 966 root = d_make_root(inode);
970 sb->s_root = root; 967 sb->s_root = root;
971 if (!root) { 968 if (!root)
972 err = -ENOMEM; 969 return -ENOMEM;
973 goto fail;
974 }
975 970
976 list_for_each_entry_safe(entry, n, &efivars->list, list) { 971 list_for_each_entry_safe(entry, n, &efivars->list, list) {
977 struct inode *inode; 972 struct inode *inode;
@@ -1012,9 +1007,6 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
1012 } 1007 }
1013 1008
1014 return 0; 1009 return 0;
1015fail:
1016 iput(inode);
1017 return err;
1018} 1010}
1019 1011
1020static struct dentry *efivarfs_mount(struct file_system_type *fs_type, 1012static struct dentry *efivarfs_mount(struct file_system_type *fs_type,