unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OpenBSD-5.7)
Page:
Section:
Apropos / Subsearch:
optional field

FB_SETUP(9)              BSD Kernel Developer's Manual             FB_SETUP(9)

NAME
     fb_setup, fb_queue, fb_delete -- kernel messaging mechanism for file sys-
     tem in userland (FUSE)

SYNOPSIS
     #include <&lt;sys/fusebuf.h>&gt;

     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 vattr    FD_vattr;
                     struct fb_io    FD_io;

             } FD;
             uint8_t *F_databuf;
     };

     #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_vattr        FD.FD_vattr
     #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
     #define fb_dat          F_databuf

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 read-
     dirs, 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 con-
     taining 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_CREATE          The fusebuf is a create file operation.
           FBT_DESTROY         The fusebuf closes the FUSE connection.

     All the data needed by the FUSE clients is contained in the F_dat struc-
     ture.  This structure contains a union FD of frequently used type and a
     buffer F_databuf to send data to libfuse.  The union contains the follow-
     ing elements:

     FD_stat       A struct statvfs(3) filled in by the FUSE client statfs for
                   the FUSE VFS statfs code.

     FD_vattr      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, create,
                   mkdir, and setattr.

     Setattr uses a struct fb_io and a struct vattr.  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), queue(3), statvfs(3), fuse(4), arc4random(9), mbuf(9)

HISTORY
     The fb_setup API first appeared in OpenBSD 5.4.

BSD                            January 19, 2014                            BSD