X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=fs%2Fopen.c;h=4fd6e256f4f454e0e8792d1a11c44e377dfbae04;hb=cd27e455042da85b088bdd3a6e00da1d5b4df9f1;hp=bf66cf1a9f5c4e186c14b7217414a51b5109c7b4;hpb=755b20f49220683bc2469f4d956dee39101440aa;p=cascardo%2Flinux.git diff --git a/fs/open.c b/fs/open.c index bf66cf1a9f5c..4fd6e256f4f4 100644 --- a/fs/open.c +++ b/fs/open.c @@ -998,6 +998,26 @@ struct file *file_open_root(struct dentry *dentry, struct vfsmount *mnt, } EXPORT_SYMBOL(file_open_root); +struct file *filp_clone_open(struct file *oldfile) +{ + struct file *file; + int retval; + + file = get_empty_filp(); + if (IS_ERR(file)) + return file; + + file->f_flags = oldfile->f_flags; + retval = vfs_open(&oldfile->f_path, file, oldfile->f_cred); + if (retval) { + put_filp(file); + return ERR_PTR(retval); + } + + return file; +} +EXPORT_SYMBOL(filp_clone_open); + long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) { struct open_flags op;