fuse: reduce size of struct fuse_inode
[sfrench/cifs-2.6.git] / fs / fuse / fuse_i.h
1 /*
2   FUSE: Filesystem in Userspace
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
9 #ifndef _FS_FUSE_I_H
10 #define _FS_FUSE_I_H
11
12 #include <linux/fuse.h>
13 #include <linux/fs.h>
14 #include <linux/mount.h>
15 #include <linux/wait.h>
16 #include <linux/list.h>
17 #include <linux/spinlock.h>
18 #include <linux/mm.h>
19 #include <linux/backing-dev.h>
20 #include <linux/mutex.h>
21 #include <linux/rwsem.h>
22 #include <linux/rbtree.h>
23 #include <linux/poll.h>
24 #include <linux/workqueue.h>
25 #include <linux/kref.h>
26 #include <linux/xattr.h>
27 #include <linux/pid_namespace.h>
28 #include <linux/refcount.h>
29 #include <linux/user_namespace.h>
30
31 /** Max number of pages that can be used in a single read request */
32 #define FUSE_MAX_PAGES_PER_REQ 32
33
34 /** Bias for fi->writectr, meaning new writepages must not be sent */
35 #define FUSE_NOWRITE INT_MIN
36
37 /** It could be as large as PATH_MAX, but would that have any uses? */
38 #define FUSE_NAME_MAX 1024
39
40 /** Number of dentries for each connection in the control filesystem */
41 #define FUSE_CTL_NUM_DENTRIES 5
42
43 /** Number of page pointers embedded in fuse_req */
44 #define FUSE_REQ_INLINE_PAGES 1
45
46 /** List of active connections */
47 extern struct list_head fuse_conn_list;
48
49 /** Global mutex protecting fuse_conn_list and the control filesystem */
50 extern struct mutex fuse_mutex;
51
52 /** Module parameters */
53 extern unsigned max_user_bgreq;
54 extern unsigned max_user_congthresh;
55
56 /* One forget request */
57 struct fuse_forget_link {
58         struct fuse_forget_one forget_one;
59         struct fuse_forget_link *next;
60 };
61
62 /** FUSE inode */
63 struct fuse_inode {
64         /** Inode data */
65         struct inode inode;
66
67         /** Unique ID, which identifies the inode between userspace
68          * and kernel */
69         u64 nodeid;
70
71         /** Number of lookups on this inode */
72         u64 nlookup;
73
74         /** The request used for sending the FORGET message */
75         struct fuse_forget_link *forget;
76
77         /** Time in jiffies until the file attributes are valid */
78         u64 i_time;
79
80         /** The sticky bit in inode->i_mode may have been removed, so
81             preserve the original mode */
82         umode_t orig_i_mode;
83
84         /** 64 bit inode number */
85         u64 orig_ino;
86
87         /** Version of last attribute change */
88         u64 attr_version;
89
90         union {
91                 /* Write related fields (regular file only) */
92                 struct {
93                         /* Files usable in writepage.  Protected by fc->lock */
94                         struct list_head write_files;
95
96                         /* Writepages pending on truncate or fsync */
97                         struct list_head queued_writes;
98
99                         /* Number of sent writes, a negative bias
100                          * (FUSE_NOWRITE) means more writes are blocked */
101                         int writectr;
102
103                         /* Waitq for writepage completion */
104                         wait_queue_head_t page_waitq;
105
106                         /* List of writepage requestst (pending or sent) */
107                         struct list_head writepages;
108                 };
109
110                 /* readdir cache (directory only) */
111                 struct {
112                         /* true if fully cached */
113                         bool cached;
114
115                         /* size of cache */
116                         loff_t size;
117
118                         /* position at end of cache (position of next entry) */
119                         loff_t pos;
120
121                         /* version of the cache */
122                         u64 version;
123
124                         /* modification time of directory when cache was
125                          * started */
126                         struct timespec64 mtime;
127
128                         /* iversion of directory when cache was started */
129                         u64 iversion;
130
131                         /* protects above fields */
132                         spinlock_t lock;
133                 } rdc;
134         };
135
136         /** Miscellaneous bits describing inode state */
137         unsigned long state;
138
139         /** Lock for serializing lookup and readdir for back compatibility*/
140         struct mutex mutex;
141 };
142
143 /** FUSE inode state bits */
144 enum {
145         /** Advise readdirplus  */
146         FUSE_I_ADVISE_RDPLUS,
147         /** Initialized with readdirplus */
148         FUSE_I_INIT_RDPLUS,
149         /** An operation changing file size is in progress  */
150         FUSE_I_SIZE_UNSTABLE,
151 };
152
153 struct fuse_conn;
154
155 /** FUSE specific file data */
156 struct fuse_file {
157         /** Fuse connection for this file */
158         struct fuse_conn *fc;
159
160         /** Request reserved for flush and release */
161         struct fuse_req *reserved_req;
162
163         /** Kernel file handle guaranteed to be unique */
164         u64 kh;
165
166         /** File handle used by userspace */
167         u64 fh;
168
169         /** Node id of this file */
170         u64 nodeid;
171
172         /** Refcount */
173         refcount_t count;
174
175         /** FOPEN_* flags returned by open */
176         u32 open_flags;
177
178         /** Entry on inode's write_files list */
179         struct list_head write_entry;
180
181         /* Readdir related */
182         struct {
183                 /*
184                  * Protects below fields against (crazy) parallel readdir on
185                  * same open file.  Uncontended in the normal case.
186                  */
187                 struct mutex lock;
188
189                 /* Dir stream position */
190                 loff_t pos;
191
192                 /* Offset in cache */
193                 loff_t cache_off;
194
195                 /* Version of cache we are reading */
196                 u64 version;
197
198         } readdir;
199
200         /** RB node to be linked on fuse_conn->polled_files */
201         struct rb_node polled_node;
202
203         /** Wait queue head for poll */
204         wait_queue_head_t poll_wait;
205
206         /** Has flock been performed on this file? */
207         bool flock:1;
208 };
209
210 /** One input argument of a request */
211 struct fuse_in_arg {
212         unsigned size;
213         const void *value;
214 };
215
216 /** The request input */
217 struct fuse_in {
218         /** The request header */
219         struct fuse_in_header h;
220
221         /** True if the data for the last argument is in req->pages */
222         unsigned argpages:1;
223
224         /** Number of arguments */
225         unsigned numargs;
226
227         /** Array of arguments */
228         struct fuse_in_arg args[3];
229 };
230
231 /** One output argument of a request */
232 struct fuse_arg {
233         unsigned size;
234         void *value;
235 };
236
237 /** The request output */
238 struct fuse_out {
239         /** Header returned from userspace */
240         struct fuse_out_header h;
241
242         /*
243          * The following bitfields are not changed during the request
244          * processing
245          */
246
247         /** Last argument is variable length (can be shorter than
248             arg->size) */
249         unsigned argvar:1;
250
251         /** Last argument is a list of pages to copy data to */
252         unsigned argpages:1;
253
254         /** Zero partially or not copied pages */
255         unsigned page_zeroing:1;
256
257         /** Pages may be replaced with new ones */
258         unsigned page_replace:1;
259
260         /** Number or arguments */
261         unsigned numargs;
262
263         /** Array of arguments */
264         struct fuse_arg args[2];
265 };
266
267 /** FUSE page descriptor */
268 struct fuse_page_desc {
269         unsigned int length;
270         unsigned int offset;
271 };
272
273 struct fuse_args {
274         struct {
275                 struct {
276                         uint32_t opcode;
277                         uint64_t nodeid;
278                 } h;
279                 unsigned numargs;
280                 struct fuse_in_arg args[3];
281
282         } in;
283         struct {
284                 unsigned argvar:1;
285                 unsigned numargs;
286                 struct fuse_arg args[2];
287         } out;
288 };
289
290 #define FUSE_ARGS(args) struct fuse_args args = {}
291
292 /** The request IO state (for asynchronous processing) */
293 struct fuse_io_priv {
294         struct kref refcnt;
295         int async;
296         spinlock_t lock;
297         unsigned reqs;
298         ssize_t bytes;
299         size_t size;
300         __u64 offset;
301         bool write;
302         bool should_dirty;
303         int err;
304         struct kiocb *iocb;
305         struct completion *done;
306         bool blocking;
307 };
308
309 #define FUSE_IO_PRIV_SYNC(i) \
310 {                                       \
311         .refcnt = KREF_INIT(1),         \
312         .async = 0,                     \
313         .iocb = i,                      \
314 }
315
316 /**
317  * Request flags
318  *
319  * FR_ISREPLY:          set if the request has reply
320  * FR_FORCE:            force sending of the request even if interrupted
321  * FR_BACKGROUND:       request is sent in the background
322  * FR_WAITING:          request is counted as "waiting"
323  * FR_ABORTED:          the request was aborted
324  * FR_INTERRUPTED:      the request has been interrupted
325  * FR_LOCKED:           data is being copied to/from the request
326  * FR_PENDING:          request is not yet in userspace
327  * FR_SENT:             request is in userspace, waiting for an answer
328  * FR_FINISHED:         request is finished
329  * FR_PRIVATE:          request is on private list
330  */
331 enum fuse_req_flag {
332         FR_ISREPLY,
333         FR_FORCE,
334         FR_BACKGROUND,
335         FR_WAITING,
336         FR_ABORTED,
337         FR_INTERRUPTED,
338         FR_LOCKED,
339         FR_PENDING,
340         FR_SENT,
341         FR_FINISHED,
342         FR_PRIVATE,
343 };
344
345 /**
346  * A request to the client
347  *
348  * .waitq.lock protects the following fields:
349  *   - FR_ABORTED
350  *   - FR_LOCKED (may also be modified under fc->lock, tested under both)
351  */
352 struct fuse_req {
353         /** This can be on either pending processing or io lists in
354             fuse_conn */
355         struct list_head list;
356
357         /** Entry on the interrupts list  */
358         struct list_head intr_entry;
359
360         /** refcount */
361         refcount_t count;
362
363         /* Request flags, updated with test/set/clear_bit() */
364         unsigned long flags;
365
366         /** The request input */
367         struct fuse_in in;
368
369         /** The request output */
370         struct fuse_out out;
371
372         /** Used to wake up the task waiting for completion of request*/
373         wait_queue_head_t waitq;
374
375         /** Data for asynchronous requests */
376         union {
377                 struct {
378                         struct fuse_release_in in;
379                         struct inode *inode;
380                 } release;
381                 struct fuse_init_in init_in;
382                 struct fuse_init_out init_out;
383                 struct cuse_init_in cuse_init_in;
384                 struct {
385                         struct fuse_read_in in;
386                         u64 attr_ver;
387                 } read;
388                 struct {
389                         struct fuse_write_in in;
390                         struct fuse_write_out out;
391                         struct fuse_req *next;
392                 } write;
393                 struct fuse_notify_retrieve_in retrieve_in;
394         } misc;
395
396         /** page vector */
397         struct page **pages;
398
399         /** page-descriptor vector */
400         struct fuse_page_desc *page_descs;
401
402         /** size of the 'pages' array */
403         unsigned max_pages;
404
405         /** inline page vector */
406         struct page *inline_pages[FUSE_REQ_INLINE_PAGES];
407
408         /** inline page-descriptor vector */
409         struct fuse_page_desc inline_page_descs[FUSE_REQ_INLINE_PAGES];
410
411         /** number of pages in vector */
412         unsigned num_pages;
413
414         /** File used in the request (or NULL) */
415         struct fuse_file *ff;
416
417         /** Inode used in the request or NULL */
418         struct inode *inode;
419
420         /** AIO control block */
421         struct fuse_io_priv *io;
422
423         /** Link on fi->writepages */
424         struct list_head writepages_entry;
425
426         /** Request completion callback */
427         void (*end)(struct fuse_conn *, struct fuse_req *);
428
429         /** Request is stolen from fuse_file->reserved_req */
430         struct file *stolen_file;
431 };
432
433 struct fuse_iqueue {
434         /** Connection established */
435         unsigned connected;
436
437         /** Readers of the connection are waiting on this */
438         wait_queue_head_t waitq;
439
440         /** The next unique request id */
441         u64 reqctr;
442
443         /** The list of pending requests */
444         struct list_head pending;
445
446         /** Pending interrupts */
447         struct list_head interrupts;
448
449         /** Queue of pending forgets */
450         struct fuse_forget_link forget_list_head;
451         struct fuse_forget_link *forget_list_tail;
452
453         /** Batching of FORGET requests (positive indicates FORGET batch) */
454         int forget_batch;
455
456         /** O_ASYNC requests */
457         struct fasync_struct *fasync;
458 };
459
460 #define FUSE_PQ_HASH_BITS 8
461 #define FUSE_PQ_HASH_SIZE (1 << FUSE_PQ_HASH_BITS)
462
463 struct fuse_pqueue {
464         /** Connection established */
465         unsigned connected;
466
467         /** Lock protecting accessess to  members of this structure */
468         spinlock_t lock;
469
470         /** Hash table of requests being processed */
471         struct list_head *processing;
472
473         /** The list of requests under I/O */
474         struct list_head io;
475 };
476
477 /**
478  * Fuse device instance
479  */
480 struct fuse_dev {
481         /** Fuse connection for this device */
482         struct fuse_conn *fc;
483
484         /** Processing queue */
485         struct fuse_pqueue pq;
486
487         /** list entry on fc->devices */
488         struct list_head entry;
489 };
490
491 /**
492  * A Fuse connection.
493  *
494  * This structure is created, when the filesystem is mounted, and is
495  * destroyed, when the client device is closed and the filesystem is
496  * unmounted.
497  */
498 struct fuse_conn {
499         /** Lock protecting accessess to  members of this structure */
500         spinlock_t lock;
501
502         /** Refcount */
503         refcount_t count;
504
505         /** Number of fuse_dev's */
506         atomic_t dev_count;
507
508         struct rcu_head rcu;
509
510         /** The user id for this mount */
511         kuid_t user_id;
512
513         /** The group id for this mount */
514         kgid_t group_id;
515
516         /** The pid namespace for this mount */
517         struct pid_namespace *pid_ns;
518
519         /** The user namespace for this mount */
520         struct user_namespace *user_ns;
521
522         /** Maximum read size */
523         unsigned max_read;
524
525         /** Maximum write size */
526         unsigned max_write;
527
528         /** Input queue */
529         struct fuse_iqueue iq;
530
531         /** The next unique kernel file handle */
532         u64 khctr;
533
534         /** rbtree of fuse_files waiting for poll events indexed by ph */
535         struct rb_root polled_files;
536
537         /** Maximum number of outstanding background requests */
538         unsigned max_background;
539
540         /** Number of background requests at which congestion starts */
541         unsigned congestion_threshold;
542
543         /** Number of requests currently in the background */
544         unsigned num_background;
545
546         /** Number of background requests currently queued for userspace */
547         unsigned active_background;
548
549         /** The list of background requests set aside for later queuing */
550         struct list_head bg_queue;
551
552         /** Protects: max_background, congestion_threshold, num_background,
553          * active_background, bg_queue, blocked */
554         spinlock_t bg_lock;
555
556         /** Flag indicating that INIT reply has been received. Allocating
557          * any fuse request will be suspended until the flag is set */
558         int initialized;
559
560         /** Flag indicating if connection is blocked.  This will be
561             the case before the INIT reply is received, and if there
562             are too many outstading backgrounds requests */
563         int blocked;
564
565         /** waitq for blocked connection */
566         wait_queue_head_t blocked_waitq;
567
568         /** waitq for reserved requests */
569         wait_queue_head_t reserved_req_waitq;
570
571         /** Connection established, cleared on umount, connection
572             abort and device release */
573         unsigned connected;
574
575         /** Connection aborted via sysfs */
576         bool aborted;
577
578         /** Connection failed (version mismatch).  Cannot race with
579             setting other bitfields since it is only set once in INIT
580             reply, before any other request, and never cleared */
581         unsigned conn_error:1;
582
583         /** Connection successful.  Only set in INIT */
584         unsigned conn_init:1;
585
586         /** Do readpages asynchronously?  Only set in INIT */
587         unsigned async_read:1;
588
589         /** Return an unique read error after abort.  Only set in INIT */
590         unsigned abort_err:1;
591
592         /** Do not send separate SETATTR request before open(O_TRUNC)  */
593         unsigned atomic_o_trunc:1;
594
595         /** Filesystem supports NFS exporting.  Only set in INIT */
596         unsigned export_support:1;
597
598         /** write-back cache policy (default is write-through) */
599         unsigned writeback_cache:1;
600
601         /** allow parallel lookups and readdir (default is serialized) */
602         unsigned parallel_dirops:1;
603
604         /** handle fs handles killing suid/sgid/cap on write/chown/trunc */
605         unsigned handle_killpriv:1;
606
607         /*
608          * The following bitfields are only for optimization purposes
609          * and hence races in setting them will not cause malfunction
610          */
611
612         /** Is open/release not implemented by fs? */
613         unsigned no_open:1;
614
615         /** Is fsync not implemented by fs? */
616         unsigned no_fsync:1;
617
618         /** Is fsyncdir not implemented by fs? */
619         unsigned no_fsyncdir:1;
620
621         /** Is flush not implemented by fs? */
622         unsigned no_flush:1;
623
624         /** Is setxattr not implemented by fs? */
625         unsigned no_setxattr:1;
626
627         /** Is getxattr not implemented by fs? */
628         unsigned no_getxattr:1;
629
630         /** Is listxattr not implemented by fs? */
631         unsigned no_listxattr:1;
632
633         /** Is removexattr not implemented by fs? */
634         unsigned no_removexattr:1;
635
636         /** Are posix file locking primitives not implemented by fs? */
637         unsigned no_lock:1;
638
639         /** Is access not implemented by fs? */
640         unsigned no_access:1;
641
642         /** Is create not implemented by fs? */
643         unsigned no_create:1;
644
645         /** Is interrupt not implemented by fs? */
646         unsigned no_interrupt:1;
647
648         /** Is bmap not implemented by fs? */
649         unsigned no_bmap:1;
650
651         /** Is poll not implemented by fs? */
652         unsigned no_poll:1;
653
654         /** Do multi-page cached writes */
655         unsigned big_writes:1;
656
657         /** Don't apply umask to creation modes */
658         unsigned dont_mask:1;
659
660         /** Are BSD file locking primitives not implemented by fs? */
661         unsigned no_flock:1;
662
663         /** Is fallocate not implemented by fs? */
664         unsigned no_fallocate:1;
665
666         /** Is rename with flags implemented by fs? */
667         unsigned no_rename2:1;
668
669         /** Use enhanced/automatic page cache invalidation. */
670         unsigned auto_inval_data:1;
671
672         /** Does the filesystem support readdirplus? */
673         unsigned do_readdirplus:1;
674
675         /** Does the filesystem want adaptive readdirplus? */
676         unsigned readdirplus_auto:1;
677
678         /** Does the filesystem support asynchronous direct-IO submission? */
679         unsigned async_dio:1;
680
681         /** Is lseek not implemented by fs? */
682         unsigned no_lseek:1;
683
684         /** Does the filesystem support posix acls? */
685         unsigned posix_acl:1;
686
687         /** Check permissions based on the file mode or not? */
688         unsigned default_permissions:1;
689
690         /** Allow other than the mounter user to access the filesystem ? */
691         unsigned allow_other:1;
692
693         /** Does the filesystem support copy_file_range? */
694         unsigned no_copy_file_range:1;
695
696         /** The number of requests waiting for completion */
697         atomic_t num_waiting;
698
699         /** Negotiated minor version */
700         unsigned minor;
701
702         /** Entry on the fuse_conn_list */
703         struct list_head entry;
704
705         /** Device ID from super block */
706         dev_t dev;
707
708         /** Dentries in the control filesystem */
709         struct dentry *ctl_dentry[FUSE_CTL_NUM_DENTRIES];
710
711         /** number of dentries used in the above array */
712         int ctl_ndents;
713
714         /** Key for lock owner ID scrambling */
715         u32 scramble_key[4];
716
717         /** Reserved request for the DESTROY message */
718         struct fuse_req *destroy_req;
719
720         /** Version counter for attribute changes */
721         u64 attr_version;
722
723         /** Called on final put */
724         void (*release)(struct fuse_conn *);
725
726         /** Super block for this connection. */
727         struct super_block *sb;
728
729         /** Read/write semaphore to hold when accessing sb. */
730         struct rw_semaphore killsb;
731
732         /** List of device instances belonging to this connection */
733         struct list_head devices;
734 };
735
736 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
737 {
738         return sb->s_fs_info;
739 }
740
741 static inline struct fuse_conn *get_fuse_conn(struct inode *inode)
742 {
743         return get_fuse_conn_super(inode->i_sb);
744 }
745
746 static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
747 {
748         return container_of(inode, struct fuse_inode, inode);
749 }
750
751 static inline u64 get_node_id(struct inode *inode)
752 {
753         return get_fuse_inode(inode)->nodeid;
754 }
755
756 static inline int invalid_nodeid(u64 nodeid)
757 {
758         return !nodeid || nodeid == FUSE_ROOT_ID;
759 }
760
761 /** Device operations */
762 extern const struct file_operations fuse_dev_operations;
763
764 extern const struct dentry_operations fuse_dentry_operations;
765 extern const struct dentry_operations fuse_root_dentry_operations;
766
767 /**
768  * Inode to nodeid comparison.
769  */
770 int fuse_inode_eq(struct inode *inode, void *_nodeidp);
771
772 /**
773  * Get a filled in inode
774  */
775 struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
776                         int generation, struct fuse_attr *attr,
777                         u64 attr_valid, u64 attr_version);
778
779 int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name,
780                      struct fuse_entry_out *outarg, struct inode **inode);
781
782 /**
783  * Send FORGET command
784  */
785 void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,
786                        u64 nodeid, u64 nlookup);
787
788 struct fuse_forget_link *fuse_alloc_forget(void);
789
790 /* Used by READDIRPLUS */
791 void fuse_force_forget(struct file *file, u64 nodeid);
792
793 /**
794  * Initialize READ or READDIR request
795  */
796 void fuse_read_fill(struct fuse_req *req, struct file *file,
797                     loff_t pos, size_t count, int opcode);
798
799 /**
800  * Send OPEN or OPENDIR request
801  */
802 int fuse_open_common(struct inode *inode, struct file *file, bool isdir);
803
804 struct fuse_file *fuse_file_alloc(struct fuse_conn *fc);
805 void fuse_file_free(struct fuse_file *ff);
806 void fuse_finish_open(struct inode *inode, struct file *file);
807
808 void fuse_sync_release(struct fuse_file *ff, int flags);
809
810 /**
811  * Send RELEASE or RELEASEDIR request
812  */
813 void fuse_release_common(struct file *file, int opcode);
814
815 /**
816  * Send FSYNC or FSYNCDIR request
817  */
818 int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
819                       int datasync, int isdir);
820
821 /**
822  * Notify poll wakeup
823  */
824 int fuse_notify_poll_wakeup(struct fuse_conn *fc,
825                             struct fuse_notify_poll_wakeup_out *outarg);
826
827 /**
828  * Initialize file operations on a regular file
829  */
830 void fuse_init_file_inode(struct inode *inode);
831
832 /**
833  * Initialize inode operations on regular files and special files
834  */
835 void fuse_init_common(struct inode *inode);
836
837 /**
838  * Initialize inode and file operations on a directory
839  */
840 void fuse_init_dir(struct inode *inode);
841
842 /**
843  * Initialize inode operations on a symlink
844  */
845 void fuse_init_symlink(struct inode *inode);
846
847 /**
848  * Change attributes of an inode
849  */
850 void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
851                             u64 attr_valid, u64 attr_version);
852
853 void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
854                                    u64 attr_valid);
855
856 /**
857  * Initialize the client device
858  */
859 int fuse_dev_init(void);
860
861 /**
862  * Cleanup the client device
863  */
864 void fuse_dev_cleanup(void);
865
866 int fuse_ctl_init(void);
867 void __exit fuse_ctl_cleanup(void);
868
869 /**
870  * Allocate a request
871  */
872 struct fuse_req *fuse_request_alloc(unsigned npages);
873
874 struct fuse_req *fuse_request_alloc_nofs(unsigned npages);
875
876 /**
877  * Free a request
878  */
879 void fuse_request_free(struct fuse_req *req);
880
881 /**
882  * Get a request, may fail with -ENOMEM,
883  * caller should specify # elements in req->pages[] explicitly
884  */
885 struct fuse_req *fuse_get_req(struct fuse_conn *fc, unsigned npages);
886 struct fuse_req *fuse_get_req_for_background(struct fuse_conn *fc,
887                                              unsigned npages);
888
889 /*
890  * Increment reference count on request
891  */
892 void __fuse_get_request(struct fuse_req *req);
893
894 /**
895  * Gets a requests for a file operation, always succeeds
896  */
897 struct fuse_req *fuse_get_req_nofail_nopages(struct fuse_conn *fc,
898                                              struct file *file);
899
900 /**
901  * Decrement reference count of a request.  If count goes to zero free
902  * the request.
903  */
904 void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req);
905
906 /**
907  * Send a request (synchronous)
908  */
909 void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req);
910
911 /**
912  * Simple request sending that does request allocation and freeing
913  */
914 ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args);
915
916 /**
917  * Send a request in the background
918  */
919 void fuse_request_send_background(struct fuse_conn *fc, struct fuse_req *req);
920 bool fuse_request_queue_background(struct fuse_conn *fc, struct fuse_req *req);
921
922 /* Abort all requests */
923 void fuse_abort_conn(struct fuse_conn *fc, bool is_abort);
924 void fuse_wait_aborted(struct fuse_conn *fc);
925
926 /**
927  * Invalidate inode attributes
928  */
929 void fuse_invalidate_attr(struct inode *inode);
930
931 void fuse_invalidate_entry_cache(struct dentry *entry);
932
933 void fuse_invalidate_atime(struct inode *inode);
934
935 u64 entry_attr_timeout(struct fuse_entry_out *o);
936 void fuse_change_entry_timeout(struct dentry *entry, struct fuse_entry_out *o);
937
938 /**
939  * Acquire reference to fuse_conn
940  */
941 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
942
943 /**
944  * Initialize fuse_conn
945  */
946 void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns);
947
948 /**
949  * Release reference to fuse_conn
950  */
951 void fuse_conn_put(struct fuse_conn *fc);
952
953 struct fuse_dev *fuse_dev_alloc(struct fuse_conn *fc);
954 void fuse_dev_free(struct fuse_dev *fud);
955
956 /**
957  * Add connection to control filesystem
958  */
959 int fuse_ctl_add_conn(struct fuse_conn *fc);
960
961 /**
962  * Remove connection from control filesystem
963  */
964 void fuse_ctl_remove_conn(struct fuse_conn *fc);
965
966 /**
967  * Is file type valid?
968  */
969 int fuse_valid_type(int m);
970
971 /**
972  * Is current process allowed to perform filesystem operation?
973  */
974 int fuse_allow_current_process(struct fuse_conn *fc);
975
976 u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id);
977
978 void fuse_update_ctime(struct inode *inode);
979
980 int fuse_update_attributes(struct inode *inode, struct file *file);
981
982 void fuse_flush_writepages(struct inode *inode);
983
984 void fuse_set_nowrite(struct inode *inode);
985 void fuse_release_nowrite(struct inode *inode);
986
987 u64 fuse_get_attr_version(struct fuse_conn *fc);
988
989 /**
990  * File-system tells the kernel to invalidate cache for the given node id.
991  */
992 int fuse_reverse_inval_inode(struct super_block *sb, u64 nodeid,
993                              loff_t offset, loff_t len);
994
995 /**
996  * File-system tells the kernel to invalidate parent attributes and
997  * the dentry matching parent/name.
998  *
999  * If the child_nodeid is non-zero and:
1000  *    - matches the inode number for the dentry matching parent/name,
1001  *    - is not a mount point
1002  *    - is a file or oan empty directory
1003  * then the dentry is unhashed (d_delete()).
1004  */
1005 int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
1006                              u64 child_nodeid, struct qstr *name);
1007
1008 int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
1009                  bool isdir);
1010
1011 /**
1012  * fuse_direct_io() flags
1013  */
1014
1015 /** If set, it is WRITE; otherwise - READ */
1016 #define FUSE_DIO_WRITE (1 << 0)
1017
1018 /** CUSE pass fuse_direct_io() a file which f_mapping->host is not from FUSE */
1019 #define FUSE_DIO_CUSE  (1 << 1)
1020
1021 ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
1022                        loff_t *ppos, int flags);
1023 long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
1024                    unsigned int flags);
1025 long fuse_ioctl_common(struct file *file, unsigned int cmd,
1026                        unsigned long arg, unsigned int flags);
1027 __poll_t fuse_file_poll(struct file *file, poll_table *wait);
1028 int fuse_dev_release(struct inode *inode, struct file *file);
1029
1030 bool fuse_write_update_size(struct inode *inode, loff_t pos);
1031
1032 int fuse_flush_times(struct inode *inode, struct fuse_file *ff);
1033 int fuse_write_inode(struct inode *inode, struct writeback_control *wbc);
1034
1035 int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
1036                     struct file *file);
1037
1038 void fuse_set_initialized(struct fuse_conn *fc);
1039
1040 void fuse_unlock_inode(struct inode *inode, bool locked);
1041 bool fuse_lock_inode(struct inode *inode);
1042
1043 int fuse_setxattr(struct inode *inode, const char *name, const void *value,
1044                   size_t size, int flags);
1045 ssize_t fuse_getxattr(struct inode *inode, const char *name, void *value,
1046                       size_t size);
1047 ssize_t fuse_listxattr(struct dentry *entry, char *list, size_t size);
1048 int fuse_removexattr(struct inode *inode, const char *name);
1049 extern const struct xattr_handler *fuse_xattr_handlers[];
1050 extern const struct xattr_handler *fuse_acl_xattr_handlers[];
1051 extern const struct xattr_handler *fuse_no_acl_xattr_handlers[];
1052
1053 struct posix_acl;
1054 struct posix_acl *fuse_get_acl(struct inode *inode, int type);
1055 int fuse_set_acl(struct inode *inode, struct posix_acl *acl, int type);
1056
1057
1058 /* readdir.c */
1059 int fuse_readdir(struct file *file, struct dir_context *ctx);
1060
1061 #endif /* _FS_FUSE_I_H */