return ret;
 }
 
-static int sel_make_dir(struct super_block *sb, struct dentry *dentry)
+static int sel_make_dir(struct inode *dir, struct dentry *dentry)
 {
        int ret = 0;
        struct inode *inode;
 
-       inode = sel_make_inode(sb, S_IFDIR | S_IRUGO | S_IXUGO);
+       inode = sel_make_inode(dir->i_sb, S_IFDIR | S_IRUGO | S_IXUGO);
        if (!inode) {
                ret = -ENOMEM;
                goto out;
        /* directory inodes start off with i_nlink == 2 (for "." entry) */
        inode->i_nlink++;
        d_add(dentry, inode);
+       /* bump link count on parent directory, too */
+       dir->i_nlink++;
 out:
        return ret;
 }
 {
        int ret;
        struct dentry *dentry;
-       struct inode *inode;
+       struct inode *inode, *root_inode;
        struct inode_security_struct *isec;
 
        static struct tree_descr selinux_files[] = {
        if (ret)
                goto err;
 
+       root_inode = sb->s_root->d_inode;
+
        dentry = d_alloc_name(sb->s_root, BOOL_DIR_NAME);
        if (!dentry) {
                ret = -ENOMEM;
                goto err;
        }
 
-       ret = sel_make_dir(sb, dentry);
+       ret = sel_make_dir(root_inode, dentry);
        if (ret)
                goto err;
 
                goto err;
        }
 
-       ret = sel_make_dir(sb, dentry);
+       ret = sel_make_dir(root_inode, dentry);
        if (ret)
                goto err;