diff options
Diffstat (limited to 'fs/logfs/super.c')
| -rw-r--r-- | fs/logfs/super.c | 16 | 
1 files changed, 8 insertions, 8 deletions
| diff --git a/fs/logfs/super.c b/fs/logfs/super.c index c66beab78dee..b60bfac3263c 100644 --- a/fs/logfs/super.c +++ b/fs/logfs/super.c @@ -11,6 +11,7 @@   */  #include "logfs.h"  #include <linux/bio.h> +#include <linux/slab.h>  #include <linux/mtd/mtd.h>  #include <linux/statfs.h>  #include <linux/buffer_head.h> @@ -277,7 +278,7 @@ static int logfs_recover_sb(struct super_block *sb)  	}  	if (valid0 && valid1 && ds_cmp(ds0, ds1)) {  		printk(KERN_INFO"Superblocks don't match - fixing.\n"); -		return write_one_sb(sb, super->s_devops->find_last_sb); +		return logfs_write_sb(sb);  	}  	/* If neither is valid now, something's wrong.  Didn't we properly  	 * check them before?!? */ @@ -289,6 +290,10 @@ static int logfs_make_writeable(struct super_block *sb)  {  	int err; +	err = logfs_open_segfile(sb); +	if (err) +		return err; +  	/* Repair any broken superblock copies */  	err = logfs_recover_sb(sb);  	if (err) @@ -299,10 +304,6 @@ static int logfs_make_writeable(struct super_block *sb)  	if (err)  		return err; -	err = logfs_open_segfile(sb); -	if (err) -		return err; -  	/* Do one GC pass before any data gets dirtied */  	logfs_gc_pass(sb); @@ -328,7 +329,7 @@ static int logfs_get_sb_final(struct super_block *sb, struct vfsmount *mnt)  	sb->s_root = d_alloc_root(rootdir);  	if (!sb->s_root) -		goto fail; +		goto fail2;  	super->s_erase_page = alloc_pages(GFP_KERNEL, 0);  	if (!super->s_erase_page) @@ -572,8 +573,7 @@ int logfs_get_sb_device(struct file_system_type *type, int flags,  	return 0;  err1: -	up_write(&sb->s_umount); -	deactivate_super(sb); +	deactivate_locked_super(sb);  	return err;  err0:  	kfree(super); | 
