SlideShare a Scribd company logo
1 of 18
Download to read offline
Gluster Dev
session #18
Intro to FUSE and its trade-offs
Scope
various parts of fuse code in the glusterfs source
tree
the story FUSE version macros tell
the tale of FUSE and fuse (historical context,
terminology)
to libfuse or not to libfuse?
FUSE proto breakdown
mount and INIT
fuse code in the gluster tree
> git ls-files '*fuse*.[ch]' | grep -v ^tests/ | 

sed 's@/[^/]*$@/@' | uniq | cat -n

1 contrib/fuse-include/

2 contrib/fuse-lib/

3 contrib/fuse-util/

4 contrib/macfuse/

5 xlators/mount/fuse/src/
FUSE version macros
xlators/mount/fuse/src/fuse-bridge.c:
static void

fuse_create(xlator_t *this, fuse_in_header_t *finh, void *msg,

struct iobuf *iobuf)

{

#if FUSE_KERNEL_MINOR_VERSION >= 12

struct fuse_create_in *fci = msg;

fuse_private_t *priv = NULL;

int32_t ret = -1;

#else

struct fuse_open_in *fci = msg;

#endif

char *name = (char *)(fci + 1);
...
fuse_state_t *state = NULL;

#if FUSE_KERNEL_MINOR_VERSION >= 12

priv = this->private;
if (priv->proto_minor < 12)

name = (char *)((struct fuse_open_in *)msg + 1);

#endif
fuse history
kernel: micro (GNU Hurd) vs monolithic
userspace filesystesms: "tarfs", "sshfs"; NFS, Arla,
9P
Linux: AFVS, lufis, shfs
fuse: project of Miklós Szeredi; got merged in
2005 to 2.6.14 (gmailfs, sshfs)
first non-Linux port: fuse4bsd, GSoC 2005, Csaba
Henk
NetBSD: puffs/refuse; Mac: OSXFUSE / FUSE for
macOS / macFUSE, 2011-
fuse and FUSE
fuse: project / code
FUSE: protocol
FUSE follows a client-server architecture
kernel: client
userspace: server
libfuse: de facto reference server lib
however, a server lib is more like a framework
(think of Apache, Nginx)
Go, Rust...
glusterfs is also a framework
What have the Romans
libfuse ever done for us?
we do use:
mounting
we do roll our own:
uniform API over versions and platforms
we make up our own minds about it:
threading / synchronization / fuse dev I/O
although automatic thread scaling would
be nice to have
...
we don't need:
support for all FUSE features
command-line driven configuration
we need to roll our own:
support for FUSE features
fuse code in the gluster tree,
continued
> git ls-files '*fuse*.[ch]' | grep -v ^tests/ | 

sed 's@/[^/]*$@/@' | uniq | (i=1; while read d; do

echo "# $i. $d"; git ls-files "$d/*.[ch]" | cat -n

i=$(($i+1))

done)

# 1. contrib/fuse-include/

1 contrib/fuse-include/fuse-misc.h

2 contrib/fuse-include/fuse-mount.h

3 contrib/fuse-include/fuse_kernel.h

4 contrib/fuse-include/fuse_kernel_macfuse.h

5 contrib/fuse-include/mount_util.h

...
# 2. contrib/fuse-lib/

1 contrib/fuse-lib/misc.c

2 contrib/fuse-lib/mount-common.c

3 contrib/fuse-lib/mount-gluster-compat.h

4 contrib/fuse-lib/mount.c

...
# 3. contrib/fuse-util/

1 contrib/fuse-util/fusermount.c

2 contrib/fuse-util/mount_util.c

...
# 4. contrib/macfuse/

1 contrib/macfuse/fuse_ioctl.h

2 contrib/macfuse/fuse_param.h

3 contrib/macfuse/mount_darwin.c

...
# 5. xlators/mount/fuse/src/

1 xlators/mount/fuse/src/fuse-bridge.c

2 xlators/mount/fuse/src/fuse-bridge.h

3 xlators/mount/fuse/src/fuse-helpers.c

4 xlators/mount/fuse/src/fuse-mem-types.h

5 xlators/mount/fuse/src/fuse-resolve.c
FUSE
client (kernel) sends FUSE request
server (userspace) replies with FUSE response
message structure: header + body
exceptions:
FORGET does not get a response
reverse notifications (invalidations): server's
requests
struct fuse_in_header {

uint32_t len;

uint32_t opcode;

uint64_t unique;

uint64_t nodeid;

uint32_t uid;

uint32_t gid;

uint32_t pid;

uint32_t padding;

};

struct fuse_out_header {

uint32_t len;

int32_t error;

uint64_t unique;

};
mount and INIT
mount(2): VFS general and instance specific
options
INIT: version handshake + option negotiation
mount options are per-mount, INIT options are
per-fs
initialization sequence:
open /dev/fuse
mount with -ofd=...
kernel sends INIT
userspace replies INIT
mount returns
concerns:
unprivileged mounting
security frameworks' (eg. SELinux) probing

More Related Content

What's hot

37562259 top-consuming-process
37562259 top-consuming-process37562259 top-consuming-process
37562259 top-consuming-process
skumner
 
Proxy server ubuntu 12.04
Proxy server ubuntu 12.04Proxy server ubuntu 12.04
Proxy server ubuntu 12.04
Tio Aldiansyah
 

What's hot (20)

LSA2 - 02 Control Groups
LSA2 - 02   Control GroupsLSA2 - 02   Control Groups
LSA2 - 02 Control Groups
 
Unix for developers
Unix for developersUnix for developers
Unix for developers
 
My First XDP (eXpress Data Path)
My First XDP (eXpress Data Path)My First XDP (eXpress Data Path)
My First XDP (eXpress Data Path)
 
37562259 top-consuming-process
37562259 top-consuming-process37562259 top-consuming-process
37562259 top-consuming-process
 
Glusterd_thread_synchronization_using_urcu_lca2016
Glusterd_thread_synchronization_using_urcu_lca2016Glusterd_thread_synchronization_using_urcu_lca2016
Glusterd_thread_synchronization_using_urcu_lca2016
 
Kernel Recipes 2014 - What I’m forgetting when designing a new userspace inte...
Kernel Recipes 2014 - What I’m forgetting when designing a new userspace inte...Kernel Recipes 2014 - What I’m forgetting when designing a new userspace inte...
Kernel Recipes 2014 - What I’m forgetting when designing a new userspace inte...
 
Unix Ramblings
Unix RamblingsUnix Ramblings
Unix Ramblings
 
仮想化環境におけるバイナリー・ポータビリティの考察 (WebAssemblyの場合)
仮想化環境におけるバイナリー・ポータビリティの考察 (WebAssemblyの場合)仮想化環境におけるバイナリー・ポータビリティの考察 (WebAssemblyの場合)
仮想化環境におけるバイナリー・ポータビリティの考察 (WebAssemblyの場合)
 
От sysV к systemd
От sysV к systemdОт sysV к systemd
От sysV к systemd
 
Beyond Golden Containers: Complementing Docker with Puppet
Beyond Golden Containers: Complementing Docker with PuppetBeyond Golden Containers: Complementing Docker with Puppet
Beyond Golden Containers: Complementing Docker with Puppet
 
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
 
redis-benchmark with AMD RYZEN 1800X Intel Kaby Lake (i7-7700K) memo
redis-benchmark with AMD RYZEN 1800X Intel Kaby Lake (i7-7700K) memoredis-benchmark with AMD RYZEN 1800X Intel Kaby Lake (i7-7700K) memo
redis-benchmark with AMD RYZEN 1800X Intel Kaby Lake (i7-7700K) memo
 
BOSH deploys distributed systems, and Diego runs any containers
BOSH deploys distributed systems, and Diego runs any containersBOSH deploys distributed systems, and Diego runs any containers
BOSH deploys distributed systems, and Diego runs any containers
 
Proxy server ubuntu 12.04
Proxy server ubuntu 12.04Proxy server ubuntu 12.04
Proxy server ubuntu 12.04
 
Python & FUSE
Python & FUSEPython & FUSE
Python & FUSE
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
 
Linuxnetworkingcommands
LinuxnetworkingcommandsLinuxnetworkingcommands
Linuxnetworkingcommands
 
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatterHow to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
 
PenTest using Python By Purna Chander
PenTest using Python By Purna ChanderPenTest using Python By Purna Chander
PenTest using Python By Purna Chander
 
Writing file system in CPython
Writing file system in CPythonWriting file system in CPython
Writing file system in CPython
 

Similar to Glusterfs session #18 intro to fuse and its trade offs

Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbersDefcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Alexandre Moneger
 

Similar to Glusterfs session #18 intro to fuse and its trade offs (20)

XPDDS18: A dive into kbuild - Cao jin, Fujitsu
XPDDS18: A dive into kbuild - Cao jin, FujitsuXPDDS18: A dive into kbuild - Cao jin, Fujitsu
XPDDS18: A dive into kbuild - Cao jin, Fujitsu
 
Fuse- Filesystem in User space
Fuse- Filesystem in User space Fuse- Filesystem in User space
Fuse- Filesystem in User space
 
리눅스 드라이버 #2
리눅스 드라이버 #2리눅스 드라이버 #2
리눅스 드라이버 #2
 
HPC_MPI_CICID_OA.pptx
HPC_MPI_CICID_OA.pptxHPC_MPI_CICID_OA.pptx
HPC_MPI_CICID_OA.pptx
 
Upgrade Ubuntu 18.04 Security with Secureboot
Upgrade Ubuntu 18.04 Security with SecurebootUpgrade Ubuntu 18.04 Security with Secureboot
Upgrade Ubuntu 18.04 Security with Secureboot
 
HPC_MPI_CICD.pptx
HPC_MPI_CICD.pptxHPC_MPI_CICD.pptx
HPC_MPI_CICD.pptx
 
Linux Security APIs and the Chromium Sandbox
Linux Security APIs and the Chromium SandboxLinux Security APIs and the Chromium Sandbox
Linux Security APIs and the Chromium Sandbox
 
The Container Security Checklist
The Container Security Checklist The Container Security Checklist
The Container Security Checklist
 
SELinux Kernel Internals and Architecture - FOSS.IN/2005
SELinux Kernel Internals and Architecture - FOSS.IN/2005SELinux Kernel Internals and Architecture - FOSS.IN/2005
SELinux Kernel Internals and Architecture - FOSS.IN/2005
 
short_intro_to_CMake_(inria_REVES_team)
short_intro_to_CMake_(inria_REVES_team)short_intro_to_CMake_(inria_REVES_team)
short_intro_to_CMake_(inria_REVES_team)
 
Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6
 
Kubernetes laravel and kubernetes
Kubernetes   laravel and kubernetesKubernetes   laravel and kubernetes
Kubernetes laravel and kubernetes
 
Chromium Sandbox on Linux (NDC Security 2019)
Chromium Sandbox on Linux (NDC Security 2019)Chromium Sandbox on Linux (NDC Security 2019)
Chromium Sandbox on Linux (NDC Security 2019)
 
Implementing of classical synchronization problem by using semaphores
Implementing of classical synchronization problem by using semaphoresImplementing of classical synchronization problem by using semaphores
Implementing of classical synchronization problem by using semaphores
 
CloudStack and cloud-init
CloudStack and cloud-initCloudStack and cloud-init
CloudStack and cloud-init
 
An Overview of the IHK/McKernel Multi-kernel Operating System
An Overview of the IHK/McKernel Multi-kernel Operating SystemAn Overview of the IHK/McKernel Multi-kernel Operating System
An Overview of the IHK/McKernel Multi-kernel Operating System
 
Edup wifi for raspberry zero
Edup wifi  for raspberry zeroEdup wifi  for raspberry zero
Edup wifi for raspberry zero
 
Autotools
AutotoolsAutotools
Autotools
 
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbersDefcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
 
Sling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspective
 

More from Pranith Karampuri

More from Pranith Karampuri (11)

Glusterfs session #12 locks xlator posixlk
Glusterfs session #12   locks xlator posixlkGlusterfs session #12   locks xlator posixlk
Glusterfs session #12 locks xlator posixlk
 
Glusterfs session #17 self heal daemon data, metadata, entry healing
Glusterfs session #17 self heal daemon data, metadata, entry healingGlusterfs session #17 self heal daemon data, metadata, entry healing
Glusterfs session #17 self heal daemon data, metadata, entry healing
 
Glusterfs session #16 self-heal daemon ( for replication)
Glusterfs session #16   self-heal daemon ( for replication)Glusterfs session #16   self-heal daemon ( for replication)
Glusterfs session #16 self-heal daemon ( for replication)
 
Glusterfs session #14 replication update fops
Glusterfs session #14   replication update fopsGlusterfs session #14   replication update fops
Glusterfs session #14 replication update fops
 
Glusterfs session #11 locks xlator entrylks
Glusterfs session #11   locks xlator entrylksGlusterfs session #11   locks xlator entrylks
Glusterfs session #11 locks xlator entrylks
 
Glusterfs session #9 index xlator
Glusterfs session #9   index xlatorGlusterfs session #9   index xlator
Glusterfs session #9 index xlator
 
Glusterfs session #7 client, server interactions
Glusterfs session #7   client, server interactionsGlusterfs session #7   client, server interactions
Glusterfs session #7 client, server interactions
 
Gluster dev session #6 understanding gluster's network communication layer
Gluster dev session #6  understanding gluster's network   communication layerGluster dev session #6  understanding gluster's network   communication layer
Gluster dev session #6 understanding gluster's network communication layer
 
Glusterfs session #4 call frame and programming model
Glusterfs session #4   call frame and programming modelGlusterfs session #4   call frame and programming model
Glusterfs session #4 call frame and programming model
 
Glusterfs session #2 1 layer above disk filesystems
Glusterfs session #2   1 layer above disk filesystemsGlusterfs session #2   1 layer above disk filesystems
Glusterfs session #2 1 layer above disk filesystems
 
Glusterfs session #1 disk filesystems
Glusterfs session #1   disk filesystemsGlusterfs session #1   disk filesystems
Glusterfs session #1 disk filesystems
 

Recently uploaded

Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 

Recently uploaded (20)

Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptx
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptx
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxHMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptx
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptxCOMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Interdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxInterdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptx
 

Glusterfs session #18 intro to fuse and its trade offs

  • 1. Gluster Dev session #18 Intro to FUSE and its trade-offs
  • 2. Scope various parts of fuse code in the glusterfs source tree the story FUSE version macros tell the tale of FUSE and fuse (historical context, terminology) to libfuse or not to libfuse? FUSE proto breakdown mount and INIT
  • 3. fuse code in the gluster tree > git ls-files '*fuse*.[ch]' | grep -v ^tests/ | sed 's@/[^/]*$@/@' | uniq | cat -n 1 contrib/fuse-include/ 2 contrib/fuse-lib/ 3 contrib/fuse-util/ 4 contrib/macfuse/ 5 xlators/mount/fuse/src/
  • 4. FUSE version macros xlators/mount/fuse/src/fuse-bridge.c: static void fuse_create(xlator_t *this, fuse_in_header_t *finh, void *msg, struct iobuf *iobuf) { #if FUSE_KERNEL_MINOR_VERSION >= 12 struct fuse_create_in *fci = msg; fuse_private_t *priv = NULL; int32_t ret = -1; #else struct fuse_open_in *fci = msg; #endif char *name = (char *)(fci + 1); ...
  • 5. fuse_state_t *state = NULL; #if FUSE_KERNEL_MINOR_VERSION >= 12 priv = this->private; if (priv->proto_minor < 12) name = (char *)((struct fuse_open_in *)msg + 1); #endif
  • 6. fuse history kernel: micro (GNU Hurd) vs monolithic userspace filesystesms: "tarfs", "sshfs"; NFS, Arla, 9P Linux: AFVS, lufis, shfs fuse: project of Miklós Szeredi; got merged in 2005 to 2.6.14 (gmailfs, sshfs) first non-Linux port: fuse4bsd, GSoC 2005, Csaba Henk NetBSD: puffs/refuse; Mac: OSXFUSE / FUSE for macOS / macFUSE, 2011-
  • 7. fuse and FUSE fuse: project / code FUSE: protocol FUSE follows a client-server architecture kernel: client userspace: server libfuse: de facto reference server lib however, a server lib is more like a framework (think of Apache, Nginx) Go, Rust... glusterfs is also a framework
  • 8. What have the Romans libfuse ever done for us? we do use: mounting we do roll our own: uniform API over versions and platforms we make up our own minds about it: threading / synchronization / fuse dev I/O although automatic thread scaling would be nice to have ...
  • 9. we don't need: support for all FUSE features command-line driven configuration we need to roll our own: support for FUSE features
  • 10. fuse code in the gluster tree, continued > git ls-files '*fuse*.[ch]' | grep -v ^tests/ | sed 's@/[^/]*$@/@' | uniq | (i=1; while read d; do echo "# $i. $d"; git ls-files "$d/*.[ch]" | cat -n i=$(($i+1)) done) # 1. contrib/fuse-include/ 1 contrib/fuse-include/fuse-misc.h 2 contrib/fuse-include/fuse-mount.h 3 contrib/fuse-include/fuse_kernel.h 4 contrib/fuse-include/fuse_kernel_macfuse.h 5 contrib/fuse-include/mount_util.h ...
  • 11. # 2. contrib/fuse-lib/ 1 contrib/fuse-lib/misc.c 2 contrib/fuse-lib/mount-common.c 3 contrib/fuse-lib/mount-gluster-compat.h 4 contrib/fuse-lib/mount.c ...
  • 12. # 3. contrib/fuse-util/ 1 contrib/fuse-util/fusermount.c 2 contrib/fuse-util/mount_util.c ...
  • 13. # 4. contrib/macfuse/ 1 contrib/macfuse/fuse_ioctl.h 2 contrib/macfuse/fuse_param.h 3 contrib/macfuse/mount_darwin.c ...
  • 14. # 5. xlators/mount/fuse/src/ 1 xlators/mount/fuse/src/fuse-bridge.c 2 xlators/mount/fuse/src/fuse-bridge.h 3 xlators/mount/fuse/src/fuse-helpers.c 4 xlators/mount/fuse/src/fuse-mem-types.h 5 xlators/mount/fuse/src/fuse-resolve.c
  • 15. FUSE client (kernel) sends FUSE request server (userspace) replies with FUSE response message structure: header + body exceptions: FORGET does not get a response reverse notifications (invalidations): server's requests
  • 16. struct fuse_in_header { uint32_t len; uint32_t opcode; uint64_t unique; uint64_t nodeid; uint32_t uid; uint32_t gid; uint32_t pid; uint32_t padding; }; struct fuse_out_header { uint32_t len; int32_t error; uint64_t unique; };
  • 17. mount and INIT mount(2): VFS general and instance specific options INIT: version handshake + option negotiation mount options are per-mount, INIT options are per-fs
  • 18. initialization sequence: open /dev/fuse mount with -ofd=... kernel sends INIT userspace replies INIT mount returns concerns: unprivileged mounting security frameworks' (eg. SELinux) probing