]> git.karo-electronics.de Git - karo-tx-linux.git/blob - include/uapi/linux/fuse.h
Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
[karo-tx-linux.git] / include / uapi / linux / fuse.h
1 /*
2     This file defines the kernel interface of FUSE
3     Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
4
5     This program can be distributed under the terms of the GNU GPL.
6     See the file COPYING.
7
8     This -- and only this -- header file may also be distributed under
9     the terms of the BSD Licence as follows:
10
11     Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
12
13     Redistribution and use in source and binary forms, with or without
14     modification, are permitted provided that the following conditions
15     are met:
16     1. Redistributions of source code must retain the above copyright
17        notice, this list of conditions and the following disclaimer.
18     2. Redistributions in binary form must reproduce the above copyright
19        notice, this list of conditions and the following disclaimer in the
20        documentation and/or other materials provided with the distribution.
21
22     THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25     ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
26     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28     OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32     SUCH DAMAGE.
33 */
34
35 /*
36  * This file defines the kernel interface of FUSE
37  *
38  * Protocol changelog:
39  *
40  * 7.9:
41  *  - new fuse_getattr_in input argument of GETATTR
42  *  - add lk_flags in fuse_lk_in
43  *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
44  *  - add blksize field to fuse_attr
45  *  - add file flags field to fuse_read_in and fuse_write_in
46  *
47  * 7.10
48  *  - add nonseekable open flag
49  *
50  * 7.11
51  *  - add IOCTL message
52  *  - add unsolicited notification support
53  *  - add POLL message and NOTIFY_POLL notification
54  *
55  * 7.12
56  *  - add umask flag to input argument of open, mknod and mkdir
57  *  - add notification messages for invalidation of inodes and
58  *    directory entries
59  *
60  * 7.13
61  *  - make max number of background requests and congestion threshold
62  *    tunables
63  *
64  * 7.14
65  *  - add splice support to fuse device
66  *
67  * 7.15
68  *  - add store notify
69  *  - add retrieve notify
70  *
71  * 7.16
72  *  - add BATCH_FORGET request
73  *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
74  *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
75  *  - add FUSE_IOCTL_32BIT flag
76  *
77  * 7.17
78  *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
79  *
80  * 7.18
81  *  - add FUSE_IOCTL_DIR flag
82  *  - add FUSE_NOTIFY_DELETE
83  *
84  * 7.19
85  *  - add FUSE_FALLOCATE
86  *
87  * 7.20
88  *  - add FUSE_AUTO_INVAL_DATA
89  *
90  * 7.21
91  *  - add FUSE_READDIRPLUS
92  *  - send the requested events in POLL request
93  *
94  * 7.22
95  *  - add FUSE_ASYNC_DIO
96  *
97  * 7.23
98  *  - add FUSE_WRITEBACK_CACHE
99  */
100
101 #ifndef _LINUX_FUSE_H
102 #define _LINUX_FUSE_H
103
104 #ifdef __KERNEL__
105 #include <linux/types.h>
106 #else
107 #include <stdint.h>
108 #endif
109
110 /*
111  * Version negotiation:
112  *
113  * Both the kernel and userspace send the version they support in the
114  * INIT request and reply respectively.
115  *
116  * If the major versions match then both shall use the smallest
117  * of the two minor versions for communication.
118  *
119  * If the kernel supports a larger major version, then userspace shall
120  * reply with the major version it supports, ignore the rest of the
121  * INIT message and expect a new INIT message from the kernel with a
122  * matching major version.
123  *
124  * If the library supports a larger major version, then it shall fall
125  * back to the major protocol version sent by the kernel for
126  * communication and reply with that major version (and an arbitrary
127  * supported minor version).
128  */
129
130 /** Version number of this interface */
131 #define FUSE_KERNEL_VERSION 7
132
133 /** Minor version number of this interface */
134 #define FUSE_KERNEL_MINOR_VERSION 23
135
136 /** The node ID of the root inode */
137 #define FUSE_ROOT_ID 1
138
139 /* Make sure all structures are padded to 64bit boundary, so 32bit
140    userspace works under 64bit kernels */
141
142 struct fuse_attr {
143         uint64_t        ino;
144         uint64_t        size;
145         uint64_t        blocks;
146         uint64_t        atime;
147         uint64_t        mtime;
148         uint64_t        ctime;
149         uint32_t        atimensec;
150         uint32_t        mtimensec;
151         uint32_t        ctimensec;
152         uint32_t        mode;
153         uint32_t        nlink;
154         uint32_t        uid;
155         uint32_t        gid;
156         uint32_t        rdev;
157         uint32_t        blksize;
158         uint32_t        padding;
159 };
160
161 struct fuse_kstatfs {
162         uint64_t        blocks;
163         uint64_t        bfree;
164         uint64_t        bavail;
165         uint64_t        files;
166         uint64_t        ffree;
167         uint32_t        bsize;
168         uint32_t        namelen;
169         uint32_t        frsize;
170         uint32_t        padding;
171         uint32_t        spare[6];
172 };
173
174 struct fuse_file_lock {
175         uint64_t        start;
176         uint64_t        end;
177         uint32_t        type;
178         uint32_t        pid; /* tgid */
179 };
180
181 /**
182  * Bitmasks for fuse_setattr_in.valid
183  */
184 #define FATTR_MODE      (1 << 0)
185 #define FATTR_UID       (1 << 1)
186 #define FATTR_GID       (1 << 2)
187 #define FATTR_SIZE      (1 << 3)
188 #define FATTR_ATIME     (1 << 4)
189 #define FATTR_MTIME     (1 << 5)
190 #define FATTR_FH        (1 << 6)
191 #define FATTR_ATIME_NOW (1 << 7)
192 #define FATTR_MTIME_NOW (1 << 8)
193 #define FATTR_LOCKOWNER (1 << 9)
194
195 /**
196  * Flags returned by the OPEN request
197  *
198  * FOPEN_DIRECT_IO: bypass page cache for this open file
199  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
200  * FOPEN_NONSEEKABLE: the file is not seekable
201  */
202 #define FOPEN_DIRECT_IO         (1 << 0)
203 #define FOPEN_KEEP_CACHE        (1 << 1)
204 #define FOPEN_NONSEEKABLE       (1 << 2)
205
206 /**
207  * INIT request/reply flags
208  *
209  * FUSE_ASYNC_READ: asynchronous read requests
210  * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
211  * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
212  * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
213  * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
214  * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
215  * FUSE_DONT_MASK: don't apply umask to file mode on create operations
216  * FUSE_SPLICE_WRITE: kernel supports splice write on the device
217  * FUSE_SPLICE_MOVE: kernel supports splice move on the device
218  * FUSE_SPLICE_READ: kernel supports splice read on the device
219  * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
220  * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
221  * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
222  * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
223  * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
224  * FUSE_ASYNC_DIO: asynchronous direct I/O submission
225  * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
226  */
227 #define FUSE_ASYNC_READ         (1 << 0)
228 #define FUSE_POSIX_LOCKS        (1 << 1)
229 #define FUSE_FILE_OPS           (1 << 2)
230 #define FUSE_ATOMIC_O_TRUNC     (1 << 3)
231 #define FUSE_EXPORT_SUPPORT     (1 << 4)
232 #define FUSE_BIG_WRITES         (1 << 5)
233 #define FUSE_DONT_MASK          (1 << 6)
234 #define FUSE_SPLICE_WRITE       (1 << 7)
235 #define FUSE_SPLICE_MOVE        (1 << 8)
236 #define FUSE_SPLICE_READ        (1 << 9)
237 #define FUSE_FLOCK_LOCKS        (1 << 10)
238 #define FUSE_HAS_IOCTL_DIR      (1 << 11)
239 #define FUSE_AUTO_INVAL_DATA    (1 << 12)
240 #define FUSE_DO_READDIRPLUS     (1 << 13)
241 #define FUSE_READDIRPLUS_AUTO   (1 << 14)
242 #define FUSE_ASYNC_DIO          (1 << 15)
243 #define FUSE_WRITEBACK_CACHE    (1 << 16)
244
245 /**
246  * CUSE INIT request/reply flags
247  *
248  * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
249  */
250 #define CUSE_UNRESTRICTED_IOCTL (1 << 0)
251
252 /**
253  * Release flags
254  */
255 #define FUSE_RELEASE_FLUSH      (1 << 0)
256 #define FUSE_RELEASE_FLOCK_UNLOCK       (1 << 1)
257
258 /**
259  * Getattr flags
260  */
261 #define FUSE_GETATTR_FH         (1 << 0)
262
263 /**
264  * Lock flags
265  */
266 #define FUSE_LK_FLOCK           (1 << 0)
267
268 /**
269  * WRITE flags
270  *
271  * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
272  * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
273  */
274 #define FUSE_WRITE_CACHE        (1 << 0)
275 #define FUSE_WRITE_LOCKOWNER    (1 << 1)
276
277 /**
278  * Read flags
279  */
280 #define FUSE_READ_LOCKOWNER     (1 << 1)
281
282 /**
283  * Ioctl flags
284  *
285  * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
286  * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
287  * FUSE_IOCTL_RETRY: retry with new iovecs
288  * FUSE_IOCTL_32BIT: 32bit ioctl
289  * FUSE_IOCTL_DIR: is a directory
290  *
291  * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
292  */
293 #define FUSE_IOCTL_COMPAT       (1 << 0)
294 #define FUSE_IOCTL_UNRESTRICTED (1 << 1)
295 #define FUSE_IOCTL_RETRY        (1 << 2)
296 #define FUSE_IOCTL_32BIT        (1 << 3)
297 #define FUSE_IOCTL_DIR          (1 << 4)
298
299 #define FUSE_IOCTL_MAX_IOV      256
300
301 /**
302  * Poll flags
303  *
304  * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
305  */
306 #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
307
308 enum fuse_opcode {
309         FUSE_LOOKUP        = 1,
310         FUSE_FORGET        = 2,  /* no reply */
311         FUSE_GETATTR       = 3,
312         FUSE_SETATTR       = 4,
313         FUSE_READLINK      = 5,
314         FUSE_SYMLINK       = 6,
315         FUSE_MKNOD         = 8,
316         FUSE_MKDIR         = 9,
317         FUSE_UNLINK        = 10,
318         FUSE_RMDIR         = 11,
319         FUSE_RENAME        = 12,
320         FUSE_LINK          = 13,
321         FUSE_OPEN          = 14,
322         FUSE_READ          = 15,
323         FUSE_WRITE         = 16,
324         FUSE_STATFS        = 17,
325         FUSE_RELEASE       = 18,
326         FUSE_FSYNC         = 20,
327         FUSE_SETXATTR      = 21,
328         FUSE_GETXATTR      = 22,
329         FUSE_LISTXATTR     = 23,
330         FUSE_REMOVEXATTR   = 24,
331         FUSE_FLUSH         = 25,
332         FUSE_INIT          = 26,
333         FUSE_OPENDIR       = 27,
334         FUSE_READDIR       = 28,
335         FUSE_RELEASEDIR    = 29,
336         FUSE_FSYNCDIR      = 30,
337         FUSE_GETLK         = 31,
338         FUSE_SETLK         = 32,
339         FUSE_SETLKW        = 33,
340         FUSE_ACCESS        = 34,
341         FUSE_CREATE        = 35,
342         FUSE_INTERRUPT     = 36,
343         FUSE_BMAP          = 37,
344         FUSE_DESTROY       = 38,
345         FUSE_IOCTL         = 39,
346         FUSE_POLL          = 40,
347         FUSE_NOTIFY_REPLY  = 41,
348         FUSE_BATCH_FORGET  = 42,
349         FUSE_FALLOCATE     = 43,
350         FUSE_READDIRPLUS   = 44,
351
352         /* CUSE specific operations */
353         CUSE_INIT          = 4096,
354 };
355
356 enum fuse_notify_code {
357         FUSE_NOTIFY_POLL   = 1,
358         FUSE_NOTIFY_INVAL_INODE = 2,
359         FUSE_NOTIFY_INVAL_ENTRY = 3,
360         FUSE_NOTIFY_STORE = 4,
361         FUSE_NOTIFY_RETRIEVE = 5,
362         FUSE_NOTIFY_DELETE = 6,
363         FUSE_NOTIFY_CODE_MAX,
364 };
365
366 /* The read buffer is required to be at least 8k, but may be much larger */
367 #define FUSE_MIN_READ_BUFFER 8192
368
369 #define FUSE_COMPAT_ENTRY_OUT_SIZE 120
370
371 struct fuse_entry_out {
372         uint64_t        nodeid;         /* Inode ID */
373         uint64_t        generation;     /* Inode generation: nodeid:gen must
374                                            be unique for the fs's lifetime */
375         uint64_t        entry_valid;    /* Cache timeout for the name */
376         uint64_t        attr_valid;     /* Cache timeout for the attributes */
377         uint32_t        entry_valid_nsec;
378         uint32_t        attr_valid_nsec;
379         struct fuse_attr attr;
380 };
381
382 struct fuse_forget_in {
383         uint64_t        nlookup;
384 };
385
386 struct fuse_forget_one {
387         uint64_t        nodeid;
388         uint64_t        nlookup;
389 };
390
391 struct fuse_batch_forget_in {
392         uint32_t        count;
393         uint32_t        dummy;
394 };
395
396 struct fuse_getattr_in {
397         uint32_t        getattr_flags;
398         uint32_t        dummy;
399         uint64_t        fh;
400 };
401
402 #define FUSE_COMPAT_ATTR_OUT_SIZE 96
403
404 struct fuse_attr_out {
405         uint64_t        attr_valid;     /* Cache timeout for the attributes */
406         uint32_t        attr_valid_nsec;
407         uint32_t        dummy;
408         struct fuse_attr attr;
409 };
410
411 #define FUSE_COMPAT_MKNOD_IN_SIZE 8
412
413 struct fuse_mknod_in {
414         uint32_t        mode;
415         uint32_t        rdev;
416         uint32_t        umask;
417         uint32_t        padding;
418 };
419
420 struct fuse_mkdir_in {
421         uint32_t        mode;
422         uint32_t        umask;
423 };
424
425 struct fuse_rename_in {
426         uint64_t        newdir;
427 };
428
429 struct fuse_link_in {
430         uint64_t        oldnodeid;
431 };
432
433 struct fuse_setattr_in {
434         uint32_t        valid;
435         uint32_t        padding;
436         uint64_t        fh;
437         uint64_t        size;
438         uint64_t        lock_owner;
439         uint64_t        atime;
440         uint64_t        mtime;
441         uint64_t        unused2;
442         uint32_t        atimensec;
443         uint32_t        mtimensec;
444         uint32_t        unused3;
445         uint32_t        mode;
446         uint32_t        unused4;
447         uint32_t        uid;
448         uint32_t        gid;
449         uint32_t        unused5;
450 };
451
452 struct fuse_open_in {
453         uint32_t        flags;
454         uint32_t        unused;
455 };
456
457 struct fuse_create_in {
458         uint32_t        flags;
459         uint32_t        mode;
460         uint32_t        umask;
461         uint32_t        padding;
462 };
463
464 struct fuse_open_out {
465         uint64_t        fh;
466         uint32_t        open_flags;
467         uint32_t        padding;
468 };
469
470 struct fuse_release_in {
471         uint64_t        fh;
472         uint32_t        flags;
473         uint32_t        release_flags;
474         uint64_t        lock_owner;
475 };
476
477 struct fuse_flush_in {
478         uint64_t        fh;
479         uint32_t        unused;
480         uint32_t        padding;
481         uint64_t        lock_owner;
482 };
483
484 struct fuse_read_in {
485         uint64_t        fh;
486         uint64_t        offset;
487         uint32_t        size;
488         uint32_t        read_flags;
489         uint64_t        lock_owner;
490         uint32_t        flags;
491         uint32_t        padding;
492 };
493
494 #define FUSE_COMPAT_WRITE_IN_SIZE 24
495
496 struct fuse_write_in {
497         uint64_t        fh;
498         uint64_t        offset;
499         uint32_t        size;
500         uint32_t        write_flags;
501         uint64_t        lock_owner;
502         uint32_t        flags;
503         uint32_t        padding;
504 };
505
506 struct fuse_write_out {
507         uint32_t        size;
508         uint32_t        padding;
509 };
510
511 #define FUSE_COMPAT_STATFS_SIZE 48
512
513 struct fuse_statfs_out {
514         struct fuse_kstatfs st;
515 };
516
517 struct fuse_fsync_in {
518         uint64_t        fh;
519         uint32_t        fsync_flags;
520         uint32_t        padding;
521 };
522
523 struct fuse_setxattr_in {
524         uint32_t        size;
525         uint32_t        flags;
526 };
527
528 struct fuse_getxattr_in {
529         uint32_t        size;
530         uint32_t        padding;
531 };
532
533 struct fuse_getxattr_out {
534         uint32_t        size;
535         uint32_t        padding;
536 };
537
538 struct fuse_lk_in {
539         uint64_t        fh;
540         uint64_t        owner;
541         struct fuse_file_lock lk;
542         uint32_t        lk_flags;
543         uint32_t        padding;
544 };
545
546 struct fuse_lk_out {
547         struct fuse_file_lock lk;
548 };
549
550 struct fuse_access_in {
551         uint32_t        mask;
552         uint32_t        padding;
553 };
554
555 struct fuse_init_in {
556         uint32_t        major;
557         uint32_t        minor;
558         uint32_t        max_readahead;
559         uint32_t        flags;
560 };
561
562 struct fuse_init_out {
563         uint32_t        major;
564         uint32_t        minor;
565         uint32_t        max_readahead;
566         uint32_t        flags;
567         uint16_t        max_background;
568         uint16_t        congestion_threshold;
569         uint32_t        max_write;
570 };
571
572 #define CUSE_INIT_INFO_MAX 4096
573
574 struct cuse_init_in {
575         uint32_t        major;
576         uint32_t        minor;
577         uint32_t        unused;
578         uint32_t        flags;
579 };
580
581 struct cuse_init_out {
582         uint32_t        major;
583         uint32_t        minor;
584         uint32_t        unused;
585         uint32_t        flags;
586         uint32_t        max_read;
587         uint32_t        max_write;
588         uint32_t        dev_major;              /* chardev major */
589         uint32_t        dev_minor;              /* chardev minor */
590         uint32_t        spare[10];
591 };
592
593 struct fuse_interrupt_in {
594         uint64_t        unique;
595 };
596
597 struct fuse_bmap_in {
598         uint64_t        block;
599         uint32_t        blocksize;
600         uint32_t        padding;
601 };
602
603 struct fuse_bmap_out {
604         uint64_t        block;
605 };
606
607 struct fuse_ioctl_in {
608         uint64_t        fh;
609         uint32_t        flags;
610         uint32_t        cmd;
611         uint64_t        arg;
612         uint32_t        in_size;
613         uint32_t        out_size;
614 };
615
616 struct fuse_ioctl_iovec {
617         uint64_t        base;
618         uint64_t        len;
619 };
620
621 struct fuse_ioctl_out {
622         int32_t         result;
623         uint32_t        flags;
624         uint32_t        in_iovs;
625         uint32_t        out_iovs;
626 };
627
628 struct fuse_poll_in {
629         uint64_t        fh;
630         uint64_t        kh;
631         uint32_t        flags;
632         uint32_t        events;
633 };
634
635 struct fuse_poll_out {
636         uint32_t        revents;
637         uint32_t        padding;
638 };
639
640 struct fuse_notify_poll_wakeup_out {
641         uint64_t        kh;
642 };
643
644 struct fuse_fallocate_in {
645         uint64_t        fh;
646         uint64_t        offset;
647         uint64_t        length;
648         uint32_t        mode;
649         uint32_t        padding;
650 };
651
652 struct fuse_in_header {
653         uint32_t        len;
654         uint32_t        opcode;
655         uint64_t        unique;
656         uint64_t        nodeid;
657         uint32_t        uid;
658         uint32_t        gid;
659         uint32_t        pid;
660         uint32_t        padding;
661 };
662
663 struct fuse_out_header {
664         uint32_t        len;
665         int32_t         error;
666         uint64_t        unique;
667 };
668
669 struct fuse_dirent {
670         uint64_t        ino;
671         uint64_t        off;
672         uint32_t        namelen;
673         uint32_t        type;
674         char name[];
675 };
676
677 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
678 #define FUSE_DIRENT_ALIGN(x) \
679         (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
680 #define FUSE_DIRENT_SIZE(d) \
681         FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
682
683 struct fuse_direntplus {
684         struct fuse_entry_out entry_out;
685         struct fuse_dirent dirent;
686 };
687
688 #define FUSE_NAME_OFFSET_DIRENTPLUS \
689         offsetof(struct fuse_direntplus, dirent.name)
690 #define FUSE_DIRENTPLUS_SIZE(d) \
691         FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
692
693 struct fuse_notify_inval_inode_out {
694         uint64_t        ino;
695         int64_t         off;
696         int64_t         len;
697 };
698
699 struct fuse_notify_inval_entry_out {
700         uint64_t        parent;
701         uint32_t        namelen;
702         uint32_t        padding;
703 };
704
705 struct fuse_notify_delete_out {
706         uint64_t        parent;
707         uint64_t        child;
708         uint32_t        namelen;
709         uint32_t        padding;
710 };
711
712 struct fuse_notify_store_out {
713         uint64_t        nodeid;
714         uint64_t        offset;
715         uint32_t        size;
716         uint32_t        padding;
717 };
718
719 struct fuse_notify_retrieve_out {
720         uint64_t        notify_unique;
721         uint64_t        nodeid;
722         uint64_t        offset;
723         uint32_t        size;
724         uint32_t        padding;
725 };
726
727 /* Matches the size of fuse_write_in */
728 struct fuse_notify_retrieve_in {
729         uint64_t        dummy1;
730         uint64_t        offset;
731         uint32_t        size;
732         uint32_t        dummy2;
733         uint64_t        dummy3;
734         uint64_t        dummy4;
735 };
736
737 #endif /* _LINUX_FUSE_H */