diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c index 674380837ab9..c0b656e1c4ef 100644 --- a/fs/nilfs2/dat.c +++ b/fs/nilfs2/dat.c @@ -507,7 +507,7 @@ int nilfs_dat_read(struct super_block *sb, size_t entry_size, if (unlikely(!dat)) return -ENOMEM; if (!(inode_state_read_once(dat) & I_NEW)) - goto out; + goto reinit_shadow; err = nilfs_mdt_init(dat, NILFS_MDT_GFP, sizeof(*di)); if (err) @@ -529,6 +529,14 @@ int nilfs_dat_read(struct super_block *sb, size_t entry_size, goto failed; unlock_new_inode(dat); + goto out; +reinit_shadow: + di = NILFS_DAT_I(dat); + if (!di->mi.mi_shadow) { + err = nilfs_mdt_setup_shadow_map(dat, &di->shadow); + if (err) + goto failed; + } out: *inodep = dat; return 0;