Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
fuse_i.h
Go to the documentation of this file.
1 /*
2  FUSE: Filesystem in Userspace
3  Copyright (C) 2001-2008 Miklos Szeredi <[email protected]>
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 
27 #define FUSE_MAX_PAGES_PER_REQ 32
28 
30 #define FUSE_NOWRITE INT_MIN
31 
33 #define FUSE_NAME_MAX 1024
34 
36 #define FUSE_CTL_NUM_DENTRIES 5
37 
41 #define FUSE_DEFAULT_PERMISSIONS (1 << 0)
42 
45 #define FUSE_ALLOW_OTHER (1 << 1)
46 
48 extern struct list_head fuse_conn_list;
49 
51 extern struct mutex fuse_mutex;
52 
54 extern unsigned max_user_bgreq;
55 extern unsigned max_user_congthresh;
56 
57 /* One forget request */
61 };
62 
64 struct fuse_inode {
66  struct inode inode;
67 
71 
74 
77 
80 
84 
87 
90 
93 
96 
99  int writectr;
100 
103 
106 };
107 
108 struct fuse_conn;
109 
111 struct fuse_file {
113  struct fuse_conn *fc;
114 
117 
120 
123 
126 
129 
132 
135 
138 
141 
143  bool flock:1;
144 };
145 
147 struct fuse_in_arg {
148  unsigned size;
149  const void *value;
150 };
151 
153 struct fuse_in {
156 
158  unsigned argpages:1;
159 
161  unsigned numargs;
162 
164  struct fuse_in_arg args[3];
165 };
166 
168 struct fuse_arg {
169  unsigned size;
170  void *value;
171 };
172 
174 struct fuse_out {
177 
178  /*
179  * The following bitfields are not changed during the request
180  * processing
181  */
182 
185  unsigned argvar:1;
186 
188  unsigned argpages:1;
189 
191  unsigned page_zeroing:1;
192 
194  unsigned page_replace:1;
195 
197  unsigned numargs;
198 
200  struct fuse_arg args[3];
201 };
202 
211 };
212 
216 struct fuse_req {
219  struct list_head list;
220 
223 
226 
229 
230  /*
231  * The following bitfields are either set once before the
232  * request is queued or setting/clearing them is protected by
233  * fuse_conn->lock
234  */
235 
237  unsigned isreply:1;
238 
240  unsigned force:1;
241 
243  unsigned aborted:1;
244 
246  unsigned background:1;
247 
249  unsigned interrupted:1;
250 
252  unsigned locked:1;
253 
255  unsigned waiting:1;
256 
259 
261  struct fuse_in in;
262 
264  struct fuse_out out;
265 
268 
270  union {
271  struct {
272  union {
275  };
276  struct path path;
277  } release;
281  struct {
282  struct fuse_read_in in;
284  } read;
285  struct {
288  } write;
291  } misc;
292 
295 
297  unsigned num_pages;
298 
300  unsigned page_offset;
301 
303  struct fuse_file *ff;
304 
306  struct inode *inode;
307 
310 
312  void (*end)(struct fuse_conn *, struct fuse_req *);
313 
315  struct file *stolen_file;
316 };
317 
325 struct fuse_conn {
328 
331 
334 
337 
340 
342  unsigned flags;
343 
345  unsigned max_read;
346 
348  unsigned max_write;
349 
352 
355 
358 
360  struct list_head io;
361 
364 
367 
369  unsigned max_background;
370 
373 
375  unsigned num_background;
376 
379 
382 
385 
389 
392 
396  int blocked;
397 
400 
403 
406 
409  unsigned connected;
410 
414  unsigned conn_error:1;
415 
417  unsigned conn_init:1;
418 
420  unsigned async_read:1;
421 
423  unsigned atomic_o_trunc:1;
424 
426  unsigned export_support:1;
427 
429  unsigned bdi_initialized:1;
430 
431  /*
432  * The following bitfields are only for optimization purposes
433  * and hence races in setting them will not cause malfunction
434  */
435 
437  unsigned no_fsync:1;
438 
440  unsigned no_fsyncdir:1;
441 
443  unsigned no_flush:1;
444 
446  unsigned no_setxattr:1;
447 
449  unsigned no_getxattr:1;
450 
452  unsigned no_listxattr:1;
453 
455  unsigned no_removexattr:1;
456 
458  unsigned no_lock:1;
459 
461  unsigned no_access:1;
462 
464  unsigned no_create:1;
465 
467  unsigned no_interrupt:1;
468 
470  unsigned no_bmap:1;
471 
473  unsigned no_poll:1;
474 
476  unsigned big_writes:1;
477 
479  unsigned dont_mask:1;
480 
482  unsigned no_flock:1;
483 
485  unsigned no_fallocate:1;
486 
488  unsigned auto_inval_data:1;
489 
492 
494  unsigned minor;
495 
498 
500  struct list_head entry;
501 
504 
507 
510 
513 
516 
519 
522 
524  void (*release)(struct fuse_conn *);
525 
527  struct super_block *sb;
528 
531 };
532 
533 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
534 {
535  return sb->s_fs_info;
536 }
537 
538 static inline struct fuse_conn *get_fuse_conn(struct inode *inode)
539 {
540  return get_fuse_conn_super(inode->i_sb);
541 }
542 
543 static inline struct fuse_inode *get_fuse_inode(struct inode *inode)
544 {
545  return container_of(inode, struct fuse_inode, inode);
546 }
547 
548 static inline u64 get_node_id(struct inode *inode)
549 {
550  return get_fuse_inode(inode)->nodeid;
551 }
552 
554 extern const struct file_operations fuse_dev_operations;
555 
556 extern const struct dentry_operations fuse_dentry_operations;
557 
561 int fuse_inode_eq(struct inode *inode, void *_nodeidp);
562 
566 struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
567  int generation, struct fuse_attr *attr,
568  u64 attr_valid, u64 attr_version);
569 
570 int fuse_lookup_name(struct super_block *sb, u64 nodeid, struct qstr *name,
571  struct fuse_entry_out *outarg, struct inode **inode);
572 
576 void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget,
577  u64 nodeid, u64 nlookup);
578 
579 struct fuse_forget_link *fuse_alloc_forget(void);
580 
584 void fuse_read_fill(struct fuse_req *req, struct file *file,
585  loff_t pos, size_t count, int opcode);
586 
590 int fuse_open_common(struct inode *inode, struct file *file, bool isdir);
591 
592 struct fuse_file *fuse_file_alloc(struct fuse_conn *fc);
593 struct fuse_file *fuse_file_get(struct fuse_file *ff);
594 void fuse_file_free(struct fuse_file *ff);
595 void fuse_finish_open(struct inode *inode, struct file *file);
596 
597 void fuse_sync_release(struct fuse_file *ff, int flags);
598 
602 void fuse_release_common(struct file *file, int opcode);
603 
607 int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
608  int datasync, int isdir);
609 
614  struct fuse_notify_poll_wakeup_out *outarg);
615 
619 void fuse_init_file_inode(struct inode *inode);
620 
624 void fuse_init_common(struct inode *inode);
625 
629 void fuse_init_dir(struct inode *inode);
630 
634 void fuse_init_symlink(struct inode *inode);
635 
639 void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
640  u64 attr_valid, u64 attr_version);
641 
643  u64 attr_valid);
644 
648 int fuse_dev_init(void);
649 
653 void fuse_dev_cleanup(void);
654 
655 int fuse_ctl_init(void);
656 void fuse_ctl_cleanup(void);
657 
661 struct fuse_req *fuse_request_alloc(void);
662 
663 struct fuse_req *fuse_request_alloc_nofs(void);
664 
668 void fuse_request_free(struct fuse_req *req);
669 
673 struct fuse_req *fuse_get_req(struct fuse_conn *fc);
674 
678 struct fuse_req *fuse_get_req_nofail(struct fuse_conn *fc, struct file *file);
679 
684 void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req);
685 
689 void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req);
690 
694 void fuse_request_send_background(struct fuse_conn *fc, struct fuse_req *req);
695 
697  struct fuse_req *req);
698 
699 /* Abort all requests */
700 void fuse_abort_conn(struct fuse_conn *fc);
701 
705 void fuse_invalidate_attr(struct inode *inode);
706 
708 
712 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
713 
714 void fuse_conn_kill(struct fuse_conn *fc);
715 
719 void fuse_conn_init(struct fuse_conn *fc);
720 
724 void fuse_conn_put(struct fuse_conn *fc);
725 
729 int fuse_ctl_add_conn(struct fuse_conn *fc);
730 
734 void fuse_ctl_remove_conn(struct fuse_conn *fc);
735 
739 int fuse_valid_type(int m);
740 
744 int fuse_allow_task(struct fuse_conn *fc, struct task_struct *task);
745 
747 
748 int fuse_update_attributes(struct inode *inode, struct kstat *stat,
749  struct file *file, bool *refreshed);
750 
751 void fuse_flush_writepages(struct inode *inode);
752 
753 void fuse_set_nowrite(struct inode *inode);
754 void fuse_release_nowrite(struct inode *inode);
755 
757 
761 int fuse_reverse_inval_inode(struct super_block *sb, u64 nodeid,
762  loff_t offset, loff_t len);
763 
774 int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
775  u64 child_nodeid, struct qstr *name);
776 
777 int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
778  bool isdir);
779 ssize_t fuse_direct_io(struct file *file, const char __user *buf,
780  size_t count, loff_t *ppos, int write);
781 long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
782  unsigned int flags);
783 long fuse_ioctl_common(struct file *file, unsigned int cmd,
784  unsigned long arg, unsigned int flags);
785 unsigned fuse_file_poll(struct file *file, poll_table *wait);
786 int fuse_dev_release(struct inode *inode, struct file *file);
787 
788 void fuse_write_update_size(struct inode *inode, loff_t pos);
789 
790 #endif /* _FS_FUSE_I_H */