summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorAl Smith <Al.Smith@aeschi.ch.eu.org>1999-04-18 12:53:49 +0000
committerAl Smith <Al.Smith@aeschi.ch.eu.org>1999-04-18 12:53:49 +0000
commit22ee0f26ee9026be3ef67b9229ebfab26e1f6fb0 (patch)
treed93bd0b3b37bf662ab320d8050c04306043d4e08 /fs
parentf863fa44863c5443c0b34e30bfb662358f27dd22 (diff)
Found a buffer that wasn't being brelse()d in efs_read_super
(noted by Matthew Wilcox <willy@bofh.ai>).
Diffstat (limited to 'fs')
-rw-r--r--fs/efs/super.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/fs/efs/super.c b/fs/efs/super.c
index ba7f45fc0..582e5a07d 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -144,9 +144,8 @@ static int efs_validate_super(struct efs_sb_info *sb, struct efs_super *super) {
return 0;
}
-struct super_block *efs_read_super(struct super_block *s, void *d, int verbose) {
+struct super_block *efs_read_super(struct super_block *s, void *d, int silent) {
kdev_t dev = s->s_dev;
- struct inode *root_inode;
struct efs_sb_info *sb;
struct buffer_head *bh;
@@ -188,7 +187,8 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int verbose)
brelse(bh);
goto out_no_fs_ul;
}
-
+ brelse(bh);
+
s->s_magic = EFS_SUPER_MAGIC;
s->s_blocksize = EFS_BLOCKSIZE;
s->s_blocksize_bits = EFS_BLOCKSIZE_BITS;
@@ -198,25 +198,17 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int verbose)
#endif
s->s_flags |= MS_RDONLY;
}
- s->s_op = &efs_superblock_operations;
- s->s_dev = dev;
- s->s_root = NULL;
-
- root_inode = iget(s, EFS_ROOTINODE);
- if (root_inode) {
- s->s_root = d_alloc_root(root_inode, NULL);
- if (!(s->s_root)) {
- iput(root_inode);
- }
- }
+ s->s_op = &efs_superblock_operations;
+ s->s_dev = dev;
+ s->s_root = d_alloc_root(iget(s, EFS_ROOTINODE), NULL);
unlock_super(s);
-
- if(!(s->s_root)) {
- printk("EFS: not mounted\n");
+
+ if (!(s->s_root)) {
+ printk("EFS: get root inode failed\n");
goto out_no_fs;
}
- if(check_disk_change(s->s_dev)) {
+ if (check_disk_change(s->s_dev)) {
printk("EFS: device changed\n");
goto out_no_fs;
}
@@ -232,7 +224,6 @@ out_no_fs:
}
void efs_put_super(struct super_block *s) {
- s->s_dev = 0;
MOD_DEC_USE_COUNT;
}