• Stars
    star
    100
  • Rank 340,703 (Top 7 %)
  • Language
    Rust
  • License
    Other
  • Created over 8 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FUSE-MT: a multithreaded wrapper on top of FUSE for Rust

FUSE-MT

Build Status Crates.io

Documentation

This code is a wrapper on top of the Rust FUSE crate with the following additions:

  • Dispatch system calls on multiple threads, so that e.g. I/O doesn't block directory listing.
  • Translate inodes into paths, to simplify filesystem implementation.

The fuser crate provides a minimal, low-level access to the FUSE kernel API, whereas this crate is more high-level, like the FUSE C API.

It includes a sample filesystem that uses the crate to pass all system calls through to another filesystem at any arbitrary path.

This is a work-in-progress. Bug reports, pull requests, and other feedback are welcome!

Some random notes on the implementation:

  • The trait that filesystems will implement is called FilesystemMT, and instead of the FUSE crate's convention of having methods return void and including a "reply" parameter, the methods return their values. This feels more idiomatic to me. They also take &Path arguments instead of inode numbers.
  • Currently, only the following calls are dispatched to other threads:
    • read
    • write
    • flush
    • fsync
  • Other calls run synchronously on the main thread because either it is expected that they will complete quickly and/or they require mutating internal state of the InodeTranslator and I want to avoid needing locking in there.
  • The inode/path translation is always done on the main thread.
  • It might be a good idea to limit the number of concurrent read and write operations in flight. I'm not sure yet how many outstanding read/write requests FUSE will issue though, so it might be a non-issue.

More Repositories

1

EseView

A graphical ESE (aka ESENT or JET) database viewer.
C#
25
star
2

backfs

BackFS is a FUSE filesystem designed to provide a large local disk cache for a remote network filesystem.
C
16
star
3

rsbrowse

Browse Rust code from the compiler's perspective.
Rust
10
star
4

lcd-pcf8574

Rust support for some common I2C LCD modules.
Rust
7
star
5

MusicFS

FUSE virtual filesystem for organizing your music files
C++
6
star
6

pianoroll

Experimental software for making player piano rolls from MIDI files.
Rust
6
star
7

esedb-rs

Extensible Storage Engine database library for Rust
Rust
6
star
8

dc4

A reimplementation of the Unix 'dc' program in Rust
Rust
6
star
9

rust_unicode_reader

Rust iterators that read by Unicode code points and grapheme clusters.
Rust
6
star
10

tis100-rs

A simulator for the TIS-100, the fictional computer in the video game of the same name.
Rust
5
star
11

backfs-rs

BackFS re-implemented in Rust (instead of C)
Rust
4
star
12

csvsel

CSV Select: it's like SQL for CSV files.
C
4
star
13

tsv

Tab-Separated Values (TSV) to Comma-Separated Values (CSV) Converter
C
3
star
14

stget

stget: a Syncthing file downloader
Rust
3
star
15

skey

Light-weight S/Key (RFC-2289) implementation in C
C
2
star
16

dropbox-content-hash

A utility & library for calculating Dropbox "content hashes"
Rust
2
star
17

klon

text-mode klondike (solitaire) card game implementation
Rust
2
star
18

s3fifo

Simple S3-FIFO implementation in Rust
Rust
2
star
19

autolisp

AutoLisp works with Hunchentoot to serve up Lisp files in any directory configuration you can come up with. It removes the need to restart Hunchentoot for a change in one of your Lisp files. It is currently compatible with Steel Bank Common Lisp.
Common Lisp
2
star
20

codewise-blog

[ancient] Multi-user blog system
PHP
1
star
21

const_map

Macro to define compile-time constant maps
Rust
1
star
22

gpxstat

a tool for summarizing stats of GPX tracks, for bike rides & hikes
Rust
1
star
23

arch-rust-pentium3

Arch PKGBUILD to bootstrap a Rust compiler for Pentium III machines
Shell
1
star
24

KSPSaveEdit

Kerbal Space Program Save Editor
C#
1
star
25

legacy-paper-dump

Back up your Dropbox Paper docs using the legacy API
Rust
1
star
26

io-chain

Traits for and simple impls of chainable I/O filters in Rust
Rust
1
star
27

catj-rss

Displays JSON files in a flat format. Rust streaming parser edition.
Rust
1
star
28

Breadcrumbs

Breadcrumbs is a GPS map for Windows Phone designed for real-time tracking of your adventures. Supports import/export of tracks to GPX files.
C#
1
star