{
struct dentry *dentry = NULL;
int err = 0;
+ struct nameidata lower_nd;
dentry = __odf_create_dir(odf_root, ODF_NS);
if (IS_ERR(dentry)) {
err = -EEXIST;
goto out;
}
- err = vfs_create(odf_root->d_inode, dentry, S_IRWXUGO, NULL);
+ err = init_lower_nd(&lower_nd, LOOKUP_CREATE);
+ if (unlikely(err < 0))
+ goto out;
+ err = vfs_create(odf_root->d_inode, dentry, S_IRWXUGO, &lower_nd);
+ release_lower_nd(&lower_nd, err);
out:
dput(dentry);
vfs_link(link, odf_dentry->d_parent->d_inode,
odf_dentry);
} else if (flags & ODF_LOOKUP_FILE) {
+ struct nameidata lower_nd;
+ err = init_lower_nd(&lower_nd, LOOKUP_CREATE);
+ if (unlikely(err < 0))
+ goto out;
current->fsuid = 0;
current->fsgid = 0;
- err = vfs_create(odf_i_dir, odf_dentry, S_IRWXUGO, 0);
+ err = vfs_create(odf_i_dir, odf_dentry, S_IRWXUGO,
+ &lower_nd);
+ release_lower_nd(&lower_nd, err);
} else if (flags & ODF_LOOKUP_WH) {
current->fsuid = 0;
current->fsgid = 0;
goto out;
}
if (!ret->d_inode) {
- err = vfs_create(dirs[3]->d_inode, ret, S_IRWXUGO, 0);
+ struct nameidata lower_nd;
+ err = init_lower_nd(&lower_nd, LOOKUP_CREATE);
+ if (unlikely(err < 0))
+ goto out;
+ err = vfs_create(dirs[3]->d_inode, ret, S_IRWXUGO,
+ &lower_nd);
+ release_lower_nd(&lower_nd, err);
if (err)
dput(ret);
}
goto out;
}
} else {
+ struct nameidata lower_nd;
+ err = init_lower_nd(&lower_nd, LOOKUP_CREATE);
+ if (unlikely(err < 0))
+ goto out;
err = vfs_create(d_content->d_parent->d_inode, d_content,
- S_IRWXUGO, NULL);
+ S_IRWXUGO, &lower_nd);
+ release_lower_nd(&lower_nd, err);
if (err)
goto out;
}