diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowlevel.c
index c8a3b1597a..f3c8bdf7cb 100644
--- a/tools/virtiofsd/fuse_lowlevel.c
+++ b/tools/virtiofsd/fuse_lowlevel.c
@@ -43,21 +43,23 @@ static __attribute__((constructor)) void fuse_ll_init_pagesize(void)
 
 static void convert_stat(const struct stat *stbuf, struct fuse_attr *attr)
 {
-    attr->ino = stbuf->st_ino;
-    attr->mode = stbuf->st_mode;
-    attr->nlink = stbuf->st_nlink;
-    attr->uid = stbuf->st_uid;
-    attr->gid = stbuf->st_gid;
-    attr->rdev = stbuf->st_rdev;
-    attr->size = stbuf->st_size;
-    attr->blksize = stbuf->st_blksize;
-    attr->blocks = stbuf->st_blocks;
-    attr->atime = stbuf->st_atime;
-    attr->mtime = stbuf->st_mtime;
-    attr->ctime = stbuf->st_ctime;
-    attr->atimensec = ST_ATIM_NSEC(stbuf);
-    attr->mtimensec = ST_MTIM_NSEC(stbuf);
-    attr->ctimensec = ST_CTIM_NSEC(stbuf);
+    *attr = (struct fuse_attr){
+        .ino = stbuf->st_ino,
+        .mode = stbuf->st_mode,
+        .nlink = stbuf->st_nlink,
+        .uid = stbuf->st_uid,
+        .gid = stbuf->st_gid,
+        .rdev = stbuf->st_rdev,
+        .size = stbuf->st_size,
+        .blksize = stbuf->st_blksize,
+        .blocks = stbuf->st_blocks,
+        .atime = stbuf->st_atime,
+        .mtime = stbuf->st_mtime,
+        .ctime = stbuf->st_ctime,
+        .atimensec = ST_ATIM_NSEC(stbuf),
+        .mtimensec = ST_MTIM_NSEC(stbuf),
+        .ctimensec = ST_CTIM_NSEC(stbuf),
+    };
 }
 
 static void convert_attr(const struct fuse_setattr_in *attr, struct stat *stbuf)
@@ -183,16 +185,16 @@ static int fuse_send_msg(struct fuse_session *se, struct fuse_chan *ch,
 int fuse_send_reply_iov_nofree(fuse_req_t req, int error, struct iovec *iov,
                                int count)
 {
-    struct fuse_out_header out;
+    struct fuse_out_header out = {
+        .unique = req->unique,
+        .error = error,
+    };
 
     if (error <= -1000 || error > 0) {
         fuse_log(FUSE_LOG_ERR, "fuse: bad error value: %i\n", error);
         error = -ERANGE;
     }
 
-    out.unique = req->unique;
-    out.error = error;
-
     iov[0].iov_base = &out;
     iov[0].iov_len = sizeof(struct fuse_out_header);
 
@@ -277,14 +279,16 @@ size_t fuse_add_direntry(fuse_req_t req, char *buf, size_t bufsize,
 static void convert_statfs(const struct statvfs *stbuf,
                            struct fuse_kstatfs *kstatfs)
 {
-    kstatfs->bsize = stbuf->f_bsize;
-    kstatfs->frsize = stbuf->f_frsize;
-    kstatfs->blocks = stbuf->f_blocks;
-    kstatfs->bfree = stbuf->f_bfree;
-    kstatfs->bavail = stbuf->f_bavail;
-    kstatfs->files = stbuf->f_files;
-    kstatfs->ffree = stbuf->f_ffree;
-    kstatfs->namelen = stbuf->f_namemax;
+    *kstatfs = (struct fuse_kstatfs){
+        .bsize = stbuf->f_bsize,
+        .frsize = stbuf->f_frsize,
+        .blocks = stbuf->f_blocks,
+        .bfree = stbuf->f_bfree,
+        .bavail = stbuf->f_bavail,
+        .files = stbuf->f_files,
+        .ffree = stbuf->f_ffree,
+        .namelen = stbuf->f_namemax,
+    };
 }
 
 static int send_reply_ok(fuse_req_t req, const void *arg, size_t argsize)
@@ -328,12 +332,14 @@ static unsigned int calc_timeout_nsec(double t)
 static void fill_entry(struct fuse_entry_out *arg,
                        const struct fuse_entry_param *e)
 {
-    arg->nodeid = e->ino;
-    arg->generation = e->generation;
-    arg->entry_valid = calc_timeout_sec(e->entry_timeout);
-    arg->entry_valid_nsec = calc_timeout_nsec(e->entry_timeout);
-    arg->attr_valid = calc_timeout_sec(e->attr_timeout);
-    arg->attr_valid_nsec = calc_timeout_nsec(e->attr_timeout);
+    *arg = (struct fuse_entry_out){
+        .nodeid = e->ino,
+        .generation = e->generation,
+        .entry_valid = calc_timeout_sec(e->entry_timeout),
+        .entry_valid_nsec = calc_timeout_nsec(e->entry_timeout),
+        .attr_valid = calc_timeout_sec(e->attr_timeout),
+        .attr_valid_nsec = calc_timeout_nsec(e->attr_timeout),
+    };
     convert_stat(&e->attr, &arg->attr);
 }
 
@@ -362,10 +368,12 @@ size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
     fill_entry(&dp->entry_out, e);
 
     struct fuse_dirent *dirent = &dp->dirent;
-    dirent->ino = e->attr.st_ino;
-    dirent->off = off;
-    dirent->namelen = namelen;
-    dirent->type = (e->attr.st_mode & S_IFMT) >> 12;
+    *dirent = (struct fuse_dirent){
+        .ino = e->attr.st_ino,
+        .off = off,
+        .namelen = namelen,
+        .type = (e->attr.st_mode & S_IFMT) >> 12,
+    };
     memcpy(dirent->name, name, namelen);
     memset(dirent->name + namelen, 0, entlen_padded - entlen);
 
@@ -498,15 +506,14 @@ int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv,
                     enum fuse_buf_copy_flags flags)
 {
     struct iovec iov[2];
-    struct fuse_out_header out;
+    struct fuse_out_header out = {
+        .unique = req->unique,
+    };
     int res;
 
     iov[0].iov_base = &out;
     iov[0].iov_len = sizeof(struct fuse_out_header);
 
-    out.unique = req->unique;
-    out.error = 0;
-
     res = fuse_send_data_iov(req->se, req->ch, iov, 1, bufv, flags);
     if (res <= 0) {
         fuse_free_req(req);
@@ -2147,14 +2154,14 @@ static void do_destroy(fuse_req_t req, fuse_ino_t nodeid,
 static int send_notify_iov(struct fuse_session *se, int notify_code,
                            struct iovec *iov, int count)
 {
-    struct fuse_out_header out;
+    struct fuse_out_header out = {
+        .error = notify_code,
+    };
 
     if (!se->got_init) {
         return -ENOTCONN;
     }
 
-    out.unique = 0;
-    out.error = notify_code;
     iov[0].iov_base = &out;
     iov[0].iov_len = sizeof(struct fuse_out_header);
 
@@ -2164,11 +2171,11 @@ static int send_notify_iov(struct fuse_session *se, int notify_code,
 int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph)
 {
     if (ph != NULL) {
-        struct fuse_notify_poll_wakeup_out outarg;
+        struct fuse_notify_poll_wakeup_out outarg = {
+            .kh = ph->kh,
+        };
         struct iovec iov[2];
 
-        outarg.kh = ph->kh;
-
         iov[1].iov_base = &outarg;
         iov[1].iov_len = sizeof(outarg);
 
@@ -2181,17 +2188,17 @@ int fuse_lowlevel_notify_poll(struct fuse_pollhandle *ph)
 int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
                                      off_t off, off_t len)
 {
-    struct fuse_notify_inval_inode_out outarg;
+    struct fuse_notify_inval_inode_out outarg = {
+        .ino = ino,
+        .off = off,
+        .len = len,
+    };
     struct iovec iov[2];
 
     if (!se) {
         return -EINVAL;
     }
 
-    outarg.ino = ino;
-    outarg.off = off;
-    outarg.len = len;
-
     iov[1].iov_base = &outarg;
     iov[1].iov_len = sizeof(outarg);
 
@@ -2201,17 +2208,16 @@ int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
 int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent,
                                      const char *name, size_t namelen)
 {
-    struct fuse_notify_inval_entry_out outarg;
+    struct fuse_notify_inval_entry_out outarg = {
+        .parent = parent,
+        .namelen = namelen,
+    };
     struct iovec iov[3];
 
     if (!se) {
         return -EINVAL;
     }
 
-    outarg.parent = parent;
-    outarg.namelen = namelen;
-    outarg.padding = 0;
-
     iov[1].iov_base = &outarg;
     iov[1].iov_len = sizeof(outarg);
     iov[2].iov_base = (void *)name;
@@ -2224,18 +2230,17 @@ int fuse_lowlevel_notify_delete(struct fuse_session *se, fuse_ino_t parent,
                                 fuse_ino_t child, const char *name,
                                 size_t namelen)
 {
-    struct fuse_notify_delete_out outarg;
+    struct fuse_notify_delete_out outarg = {
+        .parent = parent,
+        .child = child,
+        .namelen = namelen,
+    };
     struct iovec iov[3];
 
     if (!se) {
         return -EINVAL;
     }
 
-    outarg.parent = parent;
-    outarg.child = child;
-    outarg.namelen = namelen;
-    outarg.padding = 0;
-
     iov[1].iov_base = &outarg;
     iov[1].iov_len = sizeof(outarg);
     iov[2].iov_base = (void *)name;
@@ -2248,24 +2253,21 @@ int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino,
                                off_t offset, struct fuse_bufvec *bufv,
                                enum fuse_buf_copy_flags flags)
 {
-    struct fuse_out_header out;
-    struct fuse_notify_store_out outarg;
+    struct fuse_out_header out = {
+        .error = FUSE_NOTIFY_STORE,
+    };
+    struct fuse_notify_store_out outarg = {
+        .nodeid = ino,
+        .offset = offset,
+        .size = fuse_buf_size(bufv),
+    };
     struct iovec iov[3];
-    size_t size = fuse_buf_size(bufv);
     int res;
 
     if (!se) {
         return -EINVAL;
     }
 
-    out.unique = 0;
-    out.error = FUSE_NOTIFY_STORE;
-
-    outarg.nodeid = ino;
-    outarg.offset = offset;
-    outarg.size = size;
-    outarg.padding = 0;
-
     iov[0].iov_base = &out;
     iov[0].iov_len = sizeof(out);
     iov[1].iov_base = &outarg;
