INIT_LIST_HEAD(&dentry->d_subdirs);
INIT_LIST_HEAD(&dentry->d_alias);
}
+
static int smfs_create(struct inode *dir,
struct dentry *dentry,
int mode)
sm_set_inode_ops(cache_inode, inode);
exit:
smfs_clear_dentry(&cache_dentry);
- if (cache_inode)
- iput(cache_inode);
RETURN(rc);
}
d_add(dentry, inode);
exit:
smfs_clear_dentry(&cache_dentry);
-
- if (cache_inode)
- iput(cache_inode);
RETURN(rc);
}
if (cache_sb->s_op->clear_inode)
cache_sb->s_op->clear_inode(cache_inode);
- //clear_inode(cache_inode);
duplicate_inode(inode, cache_inode);
return;
cache_inode = I2CI(inode);
cache_sb = S2CSB(inode->i_sb);
- if (!cache_inode || !cache_sb)
+ if (!cache_inode || !cache_sb ||
+ !cache_inode->i_nlink) {
+ clear_inode(inode);
return;
-
+ }
duplicate_inode(inode, cache_inode);
list_del(&cache_inode->i_hash);
if (!cache_inode || !cache_sb)
return;
-
- if (cache_sb->s_op->put_inode)
- cache_sb->s_op->put_inode(cache_inode);
+ iput(cache_inode);
return;
}
cache_sb = S2CSB(sb);
if (!cache_sb)
- return;
+ RETURN(-EINVAL);
if (cache_sb->s_op->statfs)
rc = cache_sb->s_op->statfs(cache_sb, buf);
sb->s_magic = csb->s_magic;
sb->s_blocksize_bits = csb->s_blocksize_bits;
sb->s_maxbytes = csb->s_maxbytes;
- sb->s_flags = csb->s_flags;
}
extern struct super_operations smfs_super_ops;
free_page(page);
if (IS_ERR(mnt)) {
- CERROR("do_kern_mount failed: rc = %d\n", err);
- GOTO(err_out, 0);
+ CERROR("do_kern_mount failed: rc = %d\n", PTR_ERR(mnt));
+ GOTO(err_out, err = PTR_ERR(mnt));
}
smb = S2SMI(sb);
smb->smsi_sb = mnt->mnt_sb;
CERROR("Can not mount %s as %s\n", devstr, typestr);
GOTO(out_err, 0);
}
-
+ dget(S2CSB(sb)->s_root);
root_ino = S2CSB(sb)->s_root->d_inode->i_ino;
root_inode = iget(sb, root_ino);