STRUCT FUSE_REQ(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’œ struct fuse_req(9) β€” a request to the client, bestie

okay so this is the Kernel API Manual page for struct fuse_req, and honestly? it's giving "backstage pass to the whole FUSE operation" ✨ stay with me, we're gonna read the whole struct together, no skimming 🫢


🌸 NAME 🌸

struct fuse_req β€” literally a request to the client. that's it, that's the vibe πŸŽ€


✨ SYNOPSIS ✨

here's the whole thing, character for character, do NOT touch:

struct fuse_req {
    struct list_head list;
    struct list_head intr_entry;
    struct fuse_args *args;
    refcount_t count;
    unsigned long flags;
    struct {
      struct fuse_in_header h;
    } in;
    struct {
      struct fuse_out_header h;
    } out;
    wait_queue_head_t waitq;
  #if IS_ENABLED(CONFIG_VIRTIO_FS);
    void *argbuf;
  #endif;
    struct fuse_chan *chan;
  #ifdef CONFIG_FUSE_IO_URING;
    void *ring_entry;
    void *ring_queue;
  #endif;
    unsigned long create_time;
 };

look at those #if guards bestie, they're conditional and iconic πŸ’…


πŸ¦‹ Members πŸ¦‹

let's go field by field, i got you:

  • list β€” this one can be on either the pending processing lists or the io lists in fuse_conn. so like, it's a social butterfly, it gets around 🌈
  • intr_entry β€” entry on the interrupts list. short king, does one job, does it well πŸ‘‘
  • args β€” the input/output arguments. the actual payload, the main character energy πŸ”₯
  • count β€” refcount. classic. keep it balanced or perish πŸ’€
  • flags β€” request flags, updated with test/set/clear_bit. bit twiddling, we love to see it ✨
  • in β€” the request input header
  • in.h β€” the request input header (yes it's listed twice, no i'm not gonna pretend it isn't, we keep every detail in this house 🫢)
  • out β€” the request output header
  • out.h β€” the request output header (same energy, same double listing πŸ’–)
  • waitq β€” used to wake up the task waiting for completion of request. the "hey bestie it's done" queue 😭
  • argbuf β€” virtio-fs's physically contiguous buffer for in and out args. only shows up when CONFIG_VIRTIO_FS is enabled, very exclusive πŸŽ€
  • chan β€” the fuse_chan this request belongs to. found family fr fr 🌸
  • create_time β€” when (in jiffies) the request was created. a timestamp, a birth certificate, a moment πŸ•

🌟 Description 🌟

okay so .waitq.lock protects the following fields:

  • FR_ABORTED
  • FR_LOCKED (may also be modified under fpq->lock, tested under both)
⚠️ no cap, read that parenthetical twice: FR_LOCKED may also be modified under fpq->lock and it's tested under both. locking rules are not a vibe to freestyle, bestie πŸ’…

πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./fs/fuse/fuse_dev_i.h β€” plus these glorious neighbours:

  • enum fuse_req_flag(9)
  • struct fuse_iqueue_ops(9)
  • struct fuse_dev(9)

and that's the whole page, you ate it πŸ’…βœ¨ so anyways, this came out of ./fs/fuse dated October 2026, on the struct fuse_req(9) page β€” mwah, go read the source, ily, bye πŸŽ€πŸ¦‹πŸ’œ

πŸ“¦ where this page comes from