NAME
fb_setup,
fb_queue, fb_delete —
kernel messaging mechanism for file
system in userland (FUSE)
SYNOPSIS
#include
<sys/fusebuf.h>
struct fusebuf *
fb_setup(size_t
size, ino_t inode,
int type,
struct proc *p);
int
fb_queue(dev_t
dev, struct fusebuf
*fbuf);
void
fb_delete(struct
fusebuf *fbuf);
#define FUSEBUFMAXSIZE (4096*1024)
#define FUSEBUFSIZE (sizeof(struct fusebuf))
struct fb_hdr {
SIMPLEQ_ENTRY(fusebuf) fh_next;
size_t fh_len;
int fh_err;
int fh_type;
ino_t fh_ino;
uint64_t fh_uuid;
};
struct fb_io {
uint64_t fi_fd;
ino_t fi_ino;
off_t fi_off;
size_t fi_len;
mode_t fi_mode;
uint32_t fi_flags;
};
struct fusebuf {
struct fb_hdr fb_hdr;
union {
struct statvfs FD_stat;
struct stat FD_attr;
struct fb_io FD_io;
} FD;
uint8_t *fb_dat;
};
#define fb_next fb_hdr.fh_next
#define fb_len fb_hdr.fh_len
#define fb_err fb_hdr.fh_err
#define fb_type fb_hdr.fh_type
#define fb_ino fb_hdr.fh_ino
#define fb_uuid fb_hdr.fh_uuid
#define fb_stat FD.FD_stat
#define fb_attr FD.FD_attr
#define fb_io_fd FD.FD_io.fi_fd
#define fb_io_ino FD.FD_io.fi_ino
#define fb_io_off FD.FD_io.fi_off
#define fb_io_len FD.FD_io.fi_len
#define fb_io_mode FD.FD_io.fi_mode
#define fb_io_flags FD.FD_io.fi_flags
DESCRIPTION
These functions provide a way to manage the kernel messaging mechanism for fuse(4) file systems. It is based on mbuf(9).
Each FUSE operation fits in a fusebuf except for read, write, and readdirs, which are split into several fusebufs with a changing value in fb_io_off for each. The size of a fusebuf is FUSEBUFSIZE.
A fusebuf structure is defined as an fb_hdr followed by a structure containing a union and a buffer F_Dat. The header contains the following elements:
- fh_next
- A SIMPLEQ_ENTRY(3) needed to store the different fusebufs stored with
fb_queue(). - fh_len
- Indicates the amount of data in F_dat.
- fh_resid
- Used for partial fuse(4) reads. If the read does not fill the fusebuf, the number of bytes of F_dat written in this field are stored.
- fh_err
- Indicates the errno(2) failure of a fusebuf.
- fh_type
- Indicates the type of fusebuf transaction (see below).
- fh_ino
- Indicates the inode on which the fuse(4) operation is done.
- fh_uuid
- UUID to track the answer. This number is generated with arc4random(9).
The fh_type variable can take the following values:
FBT_LOOKUP- The fusebuf is a lookup operation.
FBT_GETATTR- The fusebuf is a gettattr operation.
FBT_SETATTR- The fusebuf is a setattr operation.
FBT_READLINK- The fusebuf is a readlink operation.
FBT_SYMLINK- The fusebuf is a symlink operation.
FBT_MKNOD- The fusebuf is a mknod operation.
FBT_MKDIR- The fusebuf is a mkdir operation.
FBT_UNLINK- The fusebuf is an unlink operation.
FBT_RMDIR- The fusebuf is an rmdir operation.
FBT_RENAME- The fusebuf is a rename operation.
FBT_LINK- The fusebuf is a link operation.
FBT_OPEN- The fusebuf is an open operation.
FBT_READ- The fusebuf is a read operation.
FBT_WRITE- The fusebuf is a write operation.
FBT_STATFS- The fusebuf is a statfs operation.
FBT_RELEASE- The fusebuf is a file close operation.
FBT_FSYNC- The fusebuf is a file sync operation.
FBT_FLUSH- The fusebuf is a flush operation.
FBT_INIT- The fusebuf initializes the FUSE connection.
FBT_OPENDIR- The fusebuf is an opendir operation.
FBT_READDIR- The fusebuf is a readdir operation.
FBT_RELEASEDIR- The fusebuf is a close dir operation.
FBT_FSYNCDIR- The fusebuf is a dir sync operation.
FBT_ACCESS- The fusebuf is an access operation.
FBT_DESTROY- The fusebuf closes the FUSE connection.
All the data needed by the FUSE clients is contained in the F_dat structure. This structure contains a union FD of frequently used type and a buffer F_databuf to send data to libfuse. The union contains the following elements:
- FD_stat
- A struct statvfs(3) filled in by the FUSE client statfs for the FUSE VFS statfs code.
- FD_attr
- Used by the getattr and setattr calls.
- FD_io
- Contains all fields commonly used by FUSE client callbacks to provide information to FUSE vnops. It is used by access, readdir, release, releasedir, read, write, mkdir, and setattr.
Setattr uses a struct fb_io and a struct stat. Settattr uses FD_stat and encapsulates a struct fb_io in F_databuf with fbtod.
Fusebufs can be deleted with the
fb_delete()
helper.
SEE ALSO
errno(2), fuse_main(3), queue(3), statvfs(3), fuse(4), arc4random(9), mbuf(9)
HISTORY
The fb_setup API first appeared in
OpenBSD 5.4.