diff options
author | Amir Goldstein <amir73il@gmail.com> | 2023-06-15 14:22:26 +0300 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2023-06-19 18:11:58 +0200 |
commit | cbb0b9d4bbcfa96e7872808a63be03202536f1bc (patch) | |
tree | 065d10cee8d5fbdb6452671d4bfe980b4cc3f9e7 /fs/open.c | |
parent | d56e0ddb8fc35a7aa13ab8f21c499a34f45dda05 (diff) |
fs: use a helper for opening kernel internal files
cachefiles uses kernel_open_tmpfile() to open kernel internal tmpfile
without accounting for nr_files.
cachefiles uses open_with_fake_path() for the same reason without the
need for a fake path.
Fork open_with_fake_path() to kernel_file_open() which only does the
noaccount part and use it in cachefiles.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Message-Id: <20230615112229.2143178-3-amir73il@gmail.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/open.c')
-rw-r--r-- | fs/open.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c index 4478adcc4f3a..322e017bf480 100644 --- a/fs/open.c +++ b/fs/open.c @@ -1116,6 +1116,39 @@ struct file *dentry_create(const struct path *path, int flags, umode_t mode, } EXPORT_SYMBOL(dentry_create); +/** + * kernel_file_open - open a file for kernel internal use + * @path: path of the file to open + * @flags: open flags + * @inode: the inode + * @cred: credentials for open + * + * Open a file for use by in-kernel consumers. The file is not accounted + * against nr_files and must not be installed into the file descriptor + * table. + * + * Return: Opened file on success, an error pointer on failure. + */ +struct file *kernel_file_open(const struct path *path, int flags, + struct inode *inode, const struct cred *cred) +{ + struct file *f; + int error; + + f = alloc_empty_file_noaccount(flags, cred); + if (IS_ERR(f)) + return f; + + f->f_path = *path; + error = do_dentry_open(f, inode, NULL); + if (error) { + fput(f); + f = ERR_PTR(error); + } + return f; +} +EXPORT_SYMBOL_GPL(kernel_file_open); + struct file *open_with_fake_path(const struct path *path, int flags, struct inode *inode, const struct cred *cred) { |