提交 8e6c848e 编写于 作者: A Al Viro

new primitive: vfs_mkobj()

Similar to vfs_create(), but with caller-supplied callback (and
argument for it) to be used instead of ->create().
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 ae64f9bd
...@@ -2898,6 +2898,27 @@ int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, ...@@ -2898,6 +2898,27 @@ int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
} }
EXPORT_SYMBOL(vfs_create); EXPORT_SYMBOL(vfs_create);
int vfs_mkobj(struct dentry *dentry, umode_t mode,
int (*f)(struct dentry *, umode_t, void *),
void *arg)
{
struct inode *dir = dentry->d_parent->d_inode;
int error = may_create(dir, dentry);
if (error)
return error;
mode &= S_IALLUGO;
mode |= S_IFREG;
error = security_inode_create(dir, dentry, mode);
if (error)
return error;
error = f(dentry, mode, arg);
if (!error)
fsnotify_create(dir, dentry);
return error;
}
EXPORT_SYMBOL(vfs_mkobj);
bool may_open_dev(const struct path *path) bool may_open_dev(const struct path *path)
{ {
return !(path->mnt->mnt_flags & MNT_NODEV) && return !(path->mnt->mnt_flags & MNT_NODEV) &&
......
...@@ -1608,6 +1608,10 @@ extern int vfs_whiteout(struct inode *, struct dentry *); ...@@ -1608,6 +1608,10 @@ extern int vfs_whiteout(struct inode *, struct dentry *);
extern struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode, extern struct dentry *vfs_tmpfile(struct dentry *dentry, umode_t mode,
int open_flag); int open_flag);
int vfs_mkobj(struct dentry *, umode_t,
int (*f)(struct dentry *, umode_t, void *),
void *);
/* /*
* VFS file helper functions. * VFS file helper functions.
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册