1
2
3
4
5
6
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
26
27#define FUSE_MAX_PAGES_PER_REQ 32
28
29
30#define FUSE_NOWRITE INT_MIN
31
32
33#define FUSE_NAME_MAX 1024
34
35
36#define FUSE_CTL_NUM_DENTRIES 5
37
38
39
40
41#define FUSE_DEFAULT_PERMISSIONS (1 << 0)
42
43
44
45#define FUSE_ALLOW_OTHER (1 << 1)
46
47
48#define FUSE_REQ_INLINE_PAGES 1
49
50
51extern struct list_head fuse_conn_list;
52
53
54extern struct mutex fuse_mutex;
55
56
57extern unsigned max_user_bgreq;
58extern unsigned max_user_congthresh;
59
60
61struct fuse_forget_link {
62 struct fuse_forget_one forget_one;
63 struct fuse_forget_link *next;
64};
65
66
67struct fuse_inode {
68
69 struct inode inode;
70
71
72
73 u64 nodeid;
74
75
76 u64 nlookup;
77
78
79 struct fuse_forget_link *forget;
80
81
82 u64 i_time;
83
84
85
86 umode_t orig_i_mode;
87
88
89 u64 orig_ino;
90
91
92 u64 attr_version;
93
94
95 struct list_head write_files;
96
97
98 struct list_head queued_writes;
99
100
101
102 int writectr;
103
104
105 wait_queue_head_t page_waitq;
106
107
108 struct list_head writepages;
109
110
111 unsigned long state;
112};
113
114
115enum {
116
117 FUSE_I_ADVISE_RDPLUS,
118};
119
120struct fuse_conn;
121
122
123struct fuse_file {
124
125 struct fuse_conn *fc;
126
127
128 struct fuse_req *reserved_req;
129
130
131 u64 kh;
132
133
134 u64 fh;
135
136
137 u64 nodeid;
138
139
140 atomic_t count;
141
142
143 u32 open_flags;
144
145
146 struct list_head write_entry;
147
148
149 struct rb_node polled_node;
150
151
152 wait_queue_head_t poll_wait;
153
154
155 bool flock:1;
156};
157
158
159struct fuse_in_arg {
160 unsigned size;
161 const void *value;
162};
163
164
165struct fuse_in {
166
167 struct fuse_in_header h;
168
169
170 unsigned argpages:1;
171
172
173 unsigned numargs;
174
175
176 struct fuse_in_arg args[3];
177};
178
179
180struct fuse_arg {
181 unsigned size;
182 void *value;
183};
184
185
186struct fuse_out {
187
188 struct fuse_out_header h;
189
190
191
192
193
194
195
196
197 unsigned argvar:1;
198
199
200 unsigned argpages:1;
201
202
203 unsigned page_zeroing:1;
204
205
206 unsigned page_replace:1;
207
208
209 unsigned numargs;
210
211
212 struct fuse_arg args[3];
213};
214
215
216struct fuse_page_desc {
217 unsigned int length;
218 unsigned int offset;
219};
220
221
222enum fuse_req_state {
223 FUSE_REQ_INIT = 0,
224 FUSE_REQ_PENDING,
225 FUSE_REQ_READING,
226 FUSE_REQ_SENT,
227 FUSE_REQ_WRITING,
228 FUSE_REQ_FINISHED
229};
230
231
232struct fuse_io_priv {
233 int async;
234 spinlock_t lock;
235 unsigned reqs;
236 ssize_t bytes;
237 size_t size;
238 __u64 offset;
239 bool write;
240 int err;
241 struct kiocb *iocb;
242 struct file *file;
243};
244
245
246
247
248struct fuse_req {
249
250
251 struct list_head list;
252
253
254 struct list_head intr_entry;
255
256
257 atomic_t count;
258
259
260 u64 intr_unique;
261
262
263
264
265
266
267
268
269 unsigned isreply:1;
270
271
272 unsigned force:1;
273
274
275 unsigned aborted:1;
276
277
278 unsigned background:1;
279
280
281 unsigned interrupted:1;
282
283
284 unsigned locked:1;
285
286
287 unsigned waiting:1;
288
289
290 enum fuse_req_state state;
291
292
293 struct fuse_in in;
294
295
296 struct fuse_out out;
297
298
299 wait_queue_head_t waitq;
300
301
302 union {
303 struct {
304 union {
305 struct fuse_release_in in;
306 struct work_struct work;
307 };
308 struct path path;
309 } release;
310 struct fuse_init_in init_in;
311 struct fuse_init_out init_out;
312 struct cuse_init_in cuse_init_in;
313 struct {
314 struct fuse_read_in in;
315 u64 attr_ver;
316 } read;
317 struct {
318 struct fuse_write_in in;
319 struct fuse_write_out out;
320 } write;
321 struct fuse_notify_retrieve_in retrieve_in;
322 struct fuse_lk_in lk_in;
323 } misc;
324
325
326 struct page **pages;
327
328
329 struct fuse_page_desc *page_descs;
330
331
332 unsigned max_pages;
333
334
335 struct page *inline_pages[FUSE_REQ_INLINE_PAGES];
336
337
338 struct fuse_page_desc inline_page_descs[FUSE_REQ_INLINE_PAGES];
339
340
341 unsigned num_pages;
342
343
344 struct fuse_file *ff;
345
346
347 struct inode *inode;
348
349
350 struct fuse_io_priv *io;
351
352
353 struct list_head writepages_entry;
354
355
356 void (*end)(struct fuse_conn *, struct fuse_req *);
357
358
359 struct file *stolen_file;
360};
361
362
363
364
365
366
367
368
369struct fuse_conn {
370
371 spinlock_t lock;
372
373
374 struct mutex inst_mutex;
375
376
377 atomic_t count;
378
379
380 kuid_t user_id;
381
382
383 kgid_t group_id;
384
385
386 unsigned flags;
387
388
389 unsigned max_read;
390
391
392 unsigned max_write;
393
394
395 wait_queue_head_t waitq;
396
397
398 struct list_head pending;
399
400
401 struct list_head processing;
402
403
404 struct list_head io;
405
406
407 u64 khctr;
408
409
410 struct rb_root polled_files;
411
412
413 unsigned max_background;
414
415
416 unsigned congestion_threshold;
417
418
419 unsigned num_background;
420
421
422 unsigned active_background;
423
424
425 struct list_head bg_queue;
426
427
428 struct list_head interrupts;
429
430
431 struct fuse_forget_link forget_list_head;
432 struct fuse_forget_link *forget_list_tail;
433
434
435 int forget_batch;
436
437
438
439 int initialized;
440
441
442
443
444 int blocked;
445
446
447 wait_queue_head_t blocked_waitq;
448
449
450 wait_queue_head_t reserved_req_waitq;
451
452
453 u64 reqctr;
454
455
456
457 unsigned connected;
458
459
460
461
462 unsigned conn_error:1;
463
464
465 unsigned conn_init:1;
466
467
468 unsigned async_read:1;
469
470
471 unsigned atomic_o_trunc:1;
472
473
474 unsigned export_support:1;
475
476
477 unsigned bdi_initialized:1;
478
479
480
481
482
483
484
485 unsigned no_fsync:1;
486
487
488 unsigned no_fsyncdir:1;
489
490
491 unsigned no_flush:1;
492
493
494 unsigned no_setxattr:1;
495
496
497 unsigned no_getxattr:1;
498
499
500 unsigned no_listxattr:1;
501
502
503 unsigned no_removexattr:1;
504
505
506 unsigned no_lock:1;
507
508
509 unsigned no_access:1;
510
511
512 unsigned no_create:1;
513
514
515 unsigned no_interrupt:1;
516
517
518 unsigned no_bmap:1;
519
520
521 unsigned no_poll:1;
522
523
524 unsigned big_writes:1;
525
526
527 unsigned dont_mask:1;
528
529
530 unsigned no_flock:1;
531
532
533 unsigned no_fallocate:1;
534
535
536 unsigned auto_inval_data:1;
537
538
539 unsigned do_readdirplus:1;
540
541
542 unsigned readdirplus_auto:1;
543
544
545 unsigned async_dio:1;
546
547
548 atomic_t num_waiting;
549
550
551 unsigned minor;
552
553
554 struct backing_dev_info bdi;
555
556
557 struct list_head entry;
558
559
560 dev_t dev;
561
562
563 struct dentry *ctl_dentry[FUSE_CTL_NUM_DENTRIES];
564
565
566 int ctl_ndents;
567
568
569 struct fasync_struct *fasync;
570
571
572 u32 scramble_key[4];
573
574
575 struct fuse_req *destroy_req;
576
577
578 u64 attr_version;
579
580
581 void (*release)(struct fuse_conn *);
582
583
584 struct super_block *sb;
585
586
587 struct rw_semaphore killsb;
588};
589
590static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
591{
592 return sb->s_fs_info;
593}
594
595static inline struct fuse_conn *get_fuse_conn(struct inode *inode)
596{
597 return get_fuse_conn_super(inode->i_sb);
598}
599
600static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
601{
602 return container_of(inode, struct fuse_inode, inode);
603}
604
605static inline u64 get_node_id(struct inode *inode)
606{
607 return get_fuse_inode(inode)->nodeid;
608}
609
610
611extern const struct file_operations fuse_dev_operations;
612
613extern const struct dentry_operations fuse_dentry_operations;
614
615
616
617
618int fuse_inode_eq(struct inode *inode, void *_nodeidp);
619
620
621
622
623struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
624 int generation, struct fuse_attr *attr,
625 u64 attr_valid, u64 attr_version);
626
627int fuse_lookup_name(struct super_block *sb, u64 nodeid, struct qstr *name,
628 struct fuse_entry_out *outarg, struct inode **inode);
629
630
631
632
633void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,
634 u64 nodeid, u64 nlookup);
635
636struct fuse_forget_link *fuse_alloc_forget(void);
637
638
639void fuse_force_forget(struct file *file, u64 nodeid);
640
641
642
643
644void fuse_read_fill(struct fuse_req *req, struct file *file,
645 loff_t pos, size_t count, int opcode);
646
647
648
649
650int fuse_open_common(struct inode *inode, struct file *file, bool isdir);
651
652struct fuse_file *fuse_file_alloc(struct fuse_conn *fc);
653struct fuse_file *fuse_file_get(struct fuse_file *ff);
654void fuse_file_free(struct fuse_file *ff);
655void fuse_finish_open(struct inode *inode, struct file *file);
656
657void fuse_sync_release(struct fuse_file *ff, int flags);
658
659
660
661
662void fuse_release_common(struct file *file, int opcode);
663
664
665
666
667int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
668 int datasync, int isdir);
669
670
671
672
673int fuse_notify_poll_wakeup(struct fuse_conn *fc,
674 struct fuse_notify_poll_wakeup_out *outarg);
675
676
677
678
679void fuse_init_file_inode(struct inode *inode);
680
681
682
683
684void fuse_init_common(struct inode *inode);
685
686
687
688
689void fuse_init_dir(struct inode *inode);
690
691
692
693
694void fuse_init_symlink(struct inode *inode);
695
696
697
698
699void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
700 u64 attr_valid, u64 attr_version);
701
702void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
703 u64 attr_valid);
704
705
706
707
708int fuse_dev_init(void);
709
710
711
712
713void fuse_dev_cleanup(void);
714
715int fuse_ctl_init(void);
716void fuse_ctl_cleanup(void);
717
718
719
720
721struct fuse_req *fuse_request_alloc(unsigned npages);
722
723struct fuse_req *fuse_request_alloc_nofs(unsigned npages);
724
725
726
727
728void fuse_request_free(struct fuse_req *req);
729
730
731
732
733
734struct fuse_req *fuse_get_req(struct fuse_conn *fc, unsigned npages);
735struct fuse_req *fuse_get_req_for_background(struct fuse_conn *fc,
736 unsigned npages);
737
738
739
740
741void __fuse_get_request(struct fuse_req *req);
742
743
744
745
746
747static inline struct fuse_req *fuse_get_req_nopages(struct fuse_conn *fc)
748{
749 return fuse_get_req(fc, 0);
750}
751
752
753
754
755struct fuse_req *fuse_get_req_nofail_nopages(struct fuse_conn *fc,
756 struct file *file);
757
758
759
760
761
762void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req);
763
764
765
766
767void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req);
768
769
770
771
772void fuse_request_send_background(struct fuse_conn *fc, struct fuse_req *req);
773
774void fuse_request_send_background_locked(struct fuse_conn *fc,
775 struct fuse_req *req);
776
777
778void fuse_abort_conn(struct fuse_conn *fc);
779
780
781
782
783void fuse_invalidate_attr(struct inode *inode);
784
785void fuse_invalidate_entry_cache(struct dentry *entry);
786
787
788
789
790struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
791
792void fuse_conn_kill(struct fuse_conn *fc);
793
794
795
796
797void fuse_conn_init(struct fuse_conn *fc);
798
799
800
801
802void fuse_conn_put(struct fuse_conn *fc);
803
804
805
806
807int fuse_ctl_add_conn(struct fuse_conn *fc);
808
809
810
811
812void fuse_ctl_remove_conn(struct fuse_conn *fc);
813
814
815
816
817int fuse_valid_type(int m);
818
819
820
821
822int fuse_allow_current_process(struct fuse_conn *fc);
823
824u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id);
825
826int fuse_update_attributes(struct inode *inode, struct kstat *stat,
827 struct file *file, bool *refreshed);
828
829void fuse_flush_writepages(struct inode *inode);
830
831void fuse_set_nowrite(struct inode *inode);
832void fuse_release_nowrite(struct inode *inode);
833
834u64 fuse_get_attr_version(struct fuse_conn *fc);
835
836
837
838
839int fuse_reverse_inval_inode(struct super_block *sb, u64 nodeid,
840 loff_t offset, loff_t len);
841
842
843
844
845
846
847
848
849
850
851
852int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
853 u64 child_nodeid, struct qstr *name);
854
855int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
856 bool isdir);
857ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov,
858 unsigned long nr_segs, size_t count, loff_t *ppos,
859 int write);
860long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
861 unsigned int flags);
862long fuse_ioctl_common(struct file *file, unsigned int cmd,
863 unsigned long arg, unsigned int flags);
864unsigned fuse_file_poll(struct file *file, poll_table *wait);
865int fuse_dev_release(struct inode *inode, struct file *file);
866
867void fuse_write_update_size(struct inode *inode, loff_t pos);
868
869int fuse_do_setattr(struct inode *inode, struct iattr *attr,
870 struct file *file);
871
872#endif
873