diff mbox series

[1/3] fuse: Add 'setupmapping'

Message ID 20190802171521.21807-2-dgilbert@redhat.com (mailing list archive)
State New, archived
Headers show
Series Fuse definitions for virtiofs | expand

Commit Message

Dr. David Alan Gilbert Aug. 2, 2019, 5:15 p.m. UTC
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

'setupmapping' is a command for use with 'virtiofsd', a fuse-over-virtio
implementation; it may find use in other fuse impelementations as well
in which the kernel does not have access to the address space of the
daemon directly.

A 'setupmapping' operation causes a section of a file to be mapped
into a memory window visible to the kernel.
The offsets in the file and the window are defined by the kernel performing
the operation.

The daemon may reject the request, for reasons including permissions and
limited resources.

When a request perfectly overlaps a previous mapping, the
previous mapping is replaced.  When a mapping partially overlaps a previous
mapping, the previous mapping is split into one or two smaller mappings.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 include/uapi/linux/fuse.h | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
diff mbox series

Patch

diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index 2971d29a42e4..fb79d4d0b3a7 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -133,6 +133,7 @@ 
  *
  *  7.31
  *  - add FUSE_WRITE_KILL_PRIV flag
+ *  - add FUSE_SETUPMAPPING
  */
 
 #ifndef _LINUX_FUSE_H
@@ -422,6 +423,7 @@  enum fuse_opcode {
 	FUSE_RENAME2		= 45,
 	FUSE_LSEEK		= 46,
 	FUSE_COPY_FILE_RANGE	= 47,
+	FUSE_SETUPMAPPING	= 48,
 
 	/* CUSE specific operations */
 	CUSE_INIT		= 4096,
@@ -845,4 +847,19 @@  struct fuse_copy_file_range_in {
 	uint64_t	flags;
 };
 
+#define FUSE_SETUPMAPPING_FLAG_WRITE	(1ull << 0)
+#define FUSE_SETUPMAPPING_FLAG_READ	(1ull << 1)
+struct fuse_setupmapping_in {
+	/* An already open handle */
+	uint64_t	fh;
+	/* Offset into the file to start the mapping */
+	uint64_t	foffset;
+	/* Length of mapping required */
+	uint64_t	len;
+	/* Flags, FUSE_SETUPMAPPING_FLAG_* */
+	uint64_t	flags;
+	/* Offset in Memory Window */
+	uint64_t	moffset;
+};
+
 #endif /* _LINUX_FUSE_H */