aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Whitcroft <apw@canonical.com>2012-10-10 16:18:51 +0100
committerJohn Rigby <john.rigby@linaro.org>2012-11-14 18:19:44 -0700
commite4e5c871ea1cb9d8144c1dbf9b6ba7567f9ea6fc (patch)
tree9bb02395844852601e25295a70e706ebb9042884
parent61d7bb4e4a4270156763bd07f2ac0614f38b6579 (diff)
UBUNTU: SAUCE: efivarfs: efivarfs_fill_super() fix inode reference counts
BugLink: http://bugs.launchpad.net/bugs/1063061 When d_make_root() fails it will automatically drop the reference on the root inode. We should not be doing so as well. Acked-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Andy Whitcroft <apw@canonical.com> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
-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 ed89b3f40a3..bf453522a6f 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)
struct dentry *root;
struct efivar_entry *entry, *n;
struct efivars *efivars = &__efivars;
- int err;
efivarfs_sb = sb;
@@ -960,18 +959,14 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
sb->s_time_gran = 1;
inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0);
- if (!inode) {
- err = -ENOMEM;
- goto fail;
- }
+ if (!inode)
+ return -ENOMEM;
inode->i_op = &efivarfs_dir_inode_operations;
root = d_make_root(inode);
sb->s_root = root;
- if (!root) {
- err = -ENOMEM;
- goto fail;
- }
+ if (!root)
+ return -ENOMEM;
list_for_each_entry_safe(entry, n, &efivars->list, list) {
struct inode *inode;
@@ -1012,9 +1007,6 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
}
return 0;
-fail:
- iput(inode);
- return err;
}
static struct dentry *efivarfs_mount(struct file_system_type *fs_type,