xref: /linux-6.15/include/linux/backing-file.h (revision 48b50624)
1f91a704fSAmir Goldstein /* SPDX-License-Identifier: GPL-2.0-only */
2f91a704fSAmir Goldstein /*
3f91a704fSAmir Goldstein  * Common helpers for stackable filesystems and backing files.
4f91a704fSAmir Goldstein  *
5f91a704fSAmir Goldstein  * Copyright (C) 2023 CTERA Networks.
6f91a704fSAmir Goldstein  */
7f91a704fSAmir Goldstein 
8f91a704fSAmir Goldstein #ifndef _LINUX_BACKING_FILE_H
9f91a704fSAmir Goldstein #define _LINUX_BACKING_FILE_H
10f91a704fSAmir Goldstein 
11f91a704fSAmir Goldstein #include <linux/file.h>
12a6293b3eSAmir Goldstein #include <linux/uio.h>
13a6293b3eSAmir Goldstein #include <linux/fs.h>
14a6293b3eSAmir Goldstein 
15a6293b3eSAmir Goldstein struct backing_file_ctx {
16a6293b3eSAmir Goldstein 	const struct cred *cred;
17*48b50624SMiklos Szeredi 	void (*accessed)(struct file *file);
18*48b50624SMiklos Szeredi 	void (*end_write)(struct kiocb *iocb, ssize_t);
19a6293b3eSAmir Goldstein };
20f91a704fSAmir Goldstein 
21f91a704fSAmir Goldstein struct file *backing_file_open(const struct path *user_path, int flags,
22f91a704fSAmir Goldstein 			       const struct path *real_path,
23f91a704fSAmir Goldstein 			       const struct cred *cred);
249a87907dSMiklos Szeredi struct file *backing_tmpfile_open(const struct path *user_path, int flags,
259a87907dSMiklos Szeredi 				  const struct path *real_parentpath,
269a87907dSMiklos Szeredi 				  umode_t mode, const struct cred *cred);
27a6293b3eSAmir Goldstein ssize_t backing_file_read_iter(struct file *file, struct iov_iter *iter,
28a6293b3eSAmir Goldstein 			       struct kiocb *iocb, int flags,
29a6293b3eSAmir Goldstein 			       struct backing_file_ctx *ctx);
30a6293b3eSAmir Goldstein ssize_t backing_file_write_iter(struct file *file, struct iov_iter *iter,
31a6293b3eSAmir Goldstein 				struct kiocb *iocb, int flags,
32a6293b3eSAmir Goldstein 				struct backing_file_ctx *ctx);
33*48b50624SMiklos Szeredi ssize_t backing_file_splice_read(struct file *in, struct kiocb *iocb,
349b7e9e2fSAmir Goldstein 				 struct pipe_inode_info *pipe, size_t len,
359b7e9e2fSAmir Goldstein 				 unsigned int flags,
369b7e9e2fSAmir Goldstein 				 struct backing_file_ctx *ctx);
379b7e9e2fSAmir Goldstein ssize_t backing_file_splice_write(struct pipe_inode_info *pipe,
38*48b50624SMiklos Szeredi 				  struct file *out, struct kiocb *iocb,
39*48b50624SMiklos Szeredi 				  size_t len, unsigned int flags,
409b7e9e2fSAmir Goldstein 				  struct backing_file_ctx *ctx);
41f567377eSAmir Goldstein int backing_file_mmap(struct file *file, struct vm_area_struct *vma,
42f567377eSAmir Goldstein 		      struct backing_file_ctx *ctx);
43f91a704fSAmir Goldstein 
44f91a704fSAmir Goldstein #endif /* _LINUX_BACKING_FILE_H */
45