404

[ Avaa Bypassed ]




Upload:

Command:

botdev@52.15.109.247: ~ $
                           How Fuse-1.3 Works

[Written by Terje Oseberg]

1. The fuse library.

When your user mode program calls fuse_main() (lib/helper.c),
fuse_main() parses the arguments passed to your user mode program,
then calls fuse_mount() (lib/mount.c).

fuse_mount() creates a UNIX domain socket pair, then forks and execs
fusermount (util/fusermount.c) passing it one end of the socket in the
FUSE_COMMFD_ENV environment variable.

fusermount (util/fusermount.c) makes sure that the fuse module is
loaded. fusermount then open /dev/fuse and send the file handle over a
UNIX domain socket back to fuse_mount().

fuse_mount() returns the filehandle for /dev/fuse to fuse_main().

fuse_main() calls fuse_new() (lib/fuse.c) which allocates the struct
fuse datastructure that stores and maintains a cached image of the
filesystem data.

Lastly, fuse_main() calls either fuse_loop() (lib/fuse.c) or
fuse_loop_mt() (lib/fuse_mt.c) which both start to read the filesystem
system calls from the /dev/fuse, call the usermode functions
stored in struct fuse_operations datastructure before calling
fuse_main(). The results of those calls are then written back to the
/dev/fuse file where they can be forwarded back to the system
calls.

2. The kernel module.

The kernel module consists of two parts. First the proc filesystem
component in kernel/dev.c -and second the filesystem system calls
kernel/file.c, kernel/inode.c, and kernel/dir.c

All the system calls in kernel/file.c, kernel/inode.c, and
kernel/dir.c make calls to either request_send(),
request_send_noreply(), or request_send_nonblock(). Most of the calls
(all but 2) are to request_send(). request_send() adds the request to,
"list of requests" structure (fc->pending), then waits for a response.
request_send_noreply() and request_send_nonblock() are both similar in
function to request_send() except that one is non-blocking, and the
other does not respond with a reply.

The proc filesystem component in kernel/dev.c responds to file io
requests to the file /dev/fuse. fuse_dev_read() handles the
file reads and returns commands from the "list of requests" structure
to the calling program. fuse_dev_write() handles file writes and takes
the data written and places them into the req->out datastructure where
they can be returned to the system call through the "list of requests"
structure and request_send().

Filemanager

Name Type Size Permission Actions
NEWS.gz File 2.78 KB 0644
README.NFS File 1.35 KB 0644
README.md File 3.98 KB 0644
changelog.Debian.gz File 1.3 KB 0644
copyright File 2.64 KB 0644
how-fuse-works File 2.33 KB 0644
kernel.txt.gz File 4.99 KB 0644