/* already existed */
kfree(sk);
} else {
- struct inode *rootdir;
+ struct inode *rootino, *rootdir;
struct datablock *b;
sb->s_flags = flags | MS_RDONLY;
atomic_inc(&fs->prime_sb->s_active);
- fs->ss[s].root = sk->k.root = iget_locked(sb, 0);
- LAFSI(fs->ss[s].root)->filesys = fs->ss[s].root;
- b = lafs_get_block(fs->ss[s].root, 0, NULL, GFP_KERNEL,
+ rootino = iget_locked(sb, 0);
+ rootino->i_private = sb;
+ fs->ss[s].root = sk->k.root = rootino;
+ LAFSI(rootino)->filesys = rootino;
+ b = lafs_get_block(rootino, 0, NULL, GFP_KERNEL,
MKREF(snap));
b->b.physaddr = fs->ss[s].root_addr;
set_bit(B_PhysValid, &b->b.flags);
if (!err)
err = lafs_import_inode(fs->ss[s].root, b);
putdref(b, MKREF(snap));
- unlock_new_inode(fs->ss[s].root);
+ unlock_new_inode(rootino);
if (err) {
deactivate_locked_super(sb);
goto fail;
}
- rootdir = lafs_iget(sb, 2, SYNC);
+ rootdir = lafs_iget(rootino, 2, SYNC);
sb->s_root = d_alloc_root(rootdir);
sb->s_op = fs->prime_sb->s_op;
sb->s_flags |= MS_ACTIVE;