forked from Minki/linux
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2: nilfs2: fix false warning saying one of two super blocks is broken nilfs2: fix list corruption after ifile creation failure
This commit is contained in:
commit
351f13d708
@ -400,9 +400,10 @@ int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno)
|
|||||||
list_add(&sbi->s_list, &nilfs->ns_supers);
|
list_add(&sbi->s_list, &nilfs->ns_supers);
|
||||||
up_write(&nilfs->ns_super_sem);
|
up_write(&nilfs->ns_super_sem);
|
||||||
|
|
||||||
|
err = -ENOMEM;
|
||||||
sbi->s_ifile = nilfs_ifile_new(sbi, nilfs->ns_inode_size);
|
sbi->s_ifile = nilfs_ifile_new(sbi, nilfs->ns_inode_size);
|
||||||
if (!sbi->s_ifile)
|
if (!sbi->s_ifile)
|
||||||
return -ENOMEM;
|
goto delist;
|
||||||
|
|
||||||
down_read(&nilfs->ns_segctor_sem);
|
down_read(&nilfs->ns_segctor_sem);
|
||||||
err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
|
err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
|
||||||
@ -433,6 +434,7 @@ int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno)
|
|||||||
nilfs_mdt_destroy(sbi->s_ifile);
|
nilfs_mdt_destroy(sbi->s_ifile);
|
||||||
sbi->s_ifile = NULL;
|
sbi->s_ifile = NULL;
|
||||||
|
|
||||||
|
delist:
|
||||||
down_write(&nilfs->ns_super_sem);
|
down_write(&nilfs->ns_super_sem);
|
||||||
list_del_init(&sbi->s_list);
|
list_del_init(&sbi->s_list);
|
||||||
up_write(&nilfs->ns_super_sem);
|
up_write(&nilfs->ns_super_sem);
|
||||||
|
@ -608,11 +608,11 @@ static int nilfs_load_super_block(struct the_nilfs *nilfs,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swp) {
|
if (!valid[!swp])
|
||||||
printk(KERN_WARNING "NILFS warning: broken superblock. "
|
printk(KERN_WARNING "NILFS warning: broken superblock. "
|
||||||
"using spare superblock.\n");
|
"using spare superblock.\n");
|
||||||
|
if (swp)
|
||||||
nilfs_swap_super_block(nilfs);
|
nilfs_swap_super_block(nilfs);
|
||||||
}
|
|
||||||
|
|
||||||
nilfs->ns_sbwcount = 0;
|
nilfs->ns_sbwcount = 0;
|
||||||
nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime);
|
nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime);
|
||||||
|
Loading…
Reference in New Issue
Block a user