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 26 /** Max number of pages that can be used in a single read request */ 27 #define FUSE_MAX_PAGES_PER_REQ 32 28 29 /** Bias for fi->writectr, meaning new writepages must not be sent */ 30 #define FUSE_NOWRITE INT_MIN 31 32 /** It could be as large as PATH_MAX, but would that have any uses? */ 33 #define FUSE_NAME_MAX 1024 34 35 /** Number of dentries for each connection in the control filesystem */ 36 #define FUSE_CTL_NUM_DENTRIES 5 37 38 /** If the FUSE_DEFAULT_PERMISSIONS flag is given, the filesystem 39 module will check permissions based on the file mode. Otherwise no 40 permission checking is done in the kernel */ 41 #define FUSE_DEFAULT_PERMISSIONS (1 << 0) 42 43 /** If the FUSE_ALLOW_OTHER flag is given, then not only the user 44 doing the mount will be allowed to access the filesystem */ 45 #define FUSE_ALLOW_OTHER (1 << 1) 46 47 /** Number of page pointers embedded in fuse_req */ 48 #define FUSE_REQ_INLINE_PAGES 1 49 50 /** List of active connections */ 51 extern struct list_head fuse_conn_list; 52 53 /** Global mutex protecting fuse_conn_list and the control filesystem */ 54 extern struct mutex fuse_mutex; 55 56 /** Module parameters */ 57 extern unsigned max_user_bgreq; 58 extern unsigned max_user_congthresh; 59 60 /* One forget request */ 61 struct fuse_forget_link { 62 struct fuse_forget_one forget_one; 63 struct fuse_forget_link *next; 64 }; 65 66 /** FUSE inode */ 67 struct fuse_inode { 68 /** Inode data */ 69 struct inode inode; 70 71 /** Unique ID, which identifies the inode between userspace 72 * and kernel */ 73 u64 nodeid; 74 75 /** Number of lookups on this inode */ 76 u64 nlookup; 77 78 /** The request used for sending the FORGET message */ 79 struct fuse_forget_link *forget; 80 81 /** Time in jiffies until the file attributes are valid */ 82 u64 i_time; 83 84 /** The sticky bit in inode->i_mode may have been removed, so 85 preserve the original mode */ 86 umode_t orig_i_mode; 87 88 /** 64 bit inode number */ 89 u64 orig_ino; 90 91 /** Version of last attribute change */ 92 u64 attr_version; 93 94 /** Files usable in writepage. Protected by fc->lock */ 95 struct list_head write_files; 96 97 /** Writepages pending on truncate or fsync */ 98 struct list_head queued_writes; 99 100 /** Number of sent writes, a negative bias (FUSE_NOWRITE) 101 * means more writes are blocked */ 102 int writectr; 103 104 /** Waitq for writepage completion */ 105 wait_queue_head_t page_waitq; 106 107 /** List of writepage requestst (pending or sent) */ 108 struct list_head writepages; 109 110 /** Miscellaneous bits describing inode state */ 111 unsigned long state; 112 }; 113 114 /** FUSE inode state bits */ 115 enum { 116 /** Advise readdirplus */ 117 FUSE_I_ADVISE_RDPLUS, 118 /** Initialized with readdirplus */ 119 FUSE_I_INIT_RDPLUS, 120 /** An operation changing file size is in progress */ 121 FUSE_I_SIZE_UNSTABLE, 122 /** i_mtime has been updated locally; a flush to userspace needed */ 123 FUSE_I_MTIME_DIRTY, 124 }; 125 126 struct fuse_conn; 127 128 /** FUSE specific file data */ 129 struct fuse_file { 130 /** Fuse connection for this file */ 131 struct fuse_conn *fc; 132 133 /** Request reserved for flush and release */ 134 struct fuse_req *reserved_req; 135 136 /** Kernel file handle guaranteed to be unique */ 137 u64 kh; 138 139 /** File handle used by userspace */ 140 u64 fh; 141 142 /** Node id of this file */ 143 u64 nodeid; 144 145 /** Refcount */ 146 atomic_t count; 147 148 /** FOPEN_* flags returned by open */ 149 u32 open_flags; 150 151 /** Entry on inode's write_files list */ 152 struct list_head write_entry; 153 154 /** RB node to be linked on fuse_conn->polled_files */ 155 struct rb_node polled_node; 156 157 /** Wait queue head for poll */ 158 wait_queue_head_t poll_wait; 159 160 /** Has flock been performed on this file? */ 161 bool flock:1; 162 }; 163 164 /** One input argument of a request */ 165 struct fuse_in_arg { 166 unsigned size; 167 const void *value; 168 }; 169 170 /** The request input */ 171 struct fuse_in { 172 /** The request header */ 173 struct fuse_in_header h; 174 175 /** True if the data for the last argument is in req->pages */ 176 unsigned argpages:1; 177 178 /** Number of arguments */ 179 unsigned numargs; 180 181 /** Array of arguments */ 182 struct fuse_in_arg args[3]; 183 }; 184 185 /** One output argument of a request */ 186 struct fuse_arg { 187 unsigned size; 188 void *value; 189 }; 190 191 /** The request output */ 192 struct fuse_out { 193 /** Header returned from userspace */ 194 struct fuse_out_header h; 195 196 /* 197 * The following bitfields are not changed during the request 198 * processing 199 */ 200 201 /** Last argument is variable length (can be shorter than 202 arg->size) */ 203 unsigned argvar:1; 204 205 /** Last argument is a list of pages to copy data to */ 206 unsigned argpages:1; 207 208 /** Zero partially or not copied pages */ 209 unsigned page_zeroing:1; 210 211 /** Pages may be replaced with new ones */ 212 unsigned page_replace:1; 213 214 /** Number or arguments */ 215 unsigned numargs; 216 217 /** Array of arguments */ 218 struct fuse_arg args[3]; 219 }; 220 221 /** FUSE page descriptor */ 222 struct fuse_page_desc { 223 unsigned int length; 224 unsigned int offset; 225 }; 226 227 /** The request state */ 228 enum fuse_req_state { 229 FUSE_REQ_INIT = 0, 230 FUSE_REQ_PENDING, 231 FUSE_REQ_READING, 232 FUSE_REQ_SENT, 233 FUSE_REQ_WRITING, 234 FUSE_REQ_FINISHED 235 }; 236 237 /** The request IO state (for asynchronous processing) */ 238 struct fuse_io_priv { 239 int async; 240 spinlock_t lock; 241 unsigned reqs; 242 ssize_t bytes; 243 size_t size; 244 __u64 offset; 245 bool write; 246 int err; 247 struct kiocb *iocb; 248 struct file *file; 249 }; 250 251 /** 252 * A request to the client 253 */ 254 struct fuse_req { 255 /** This can be on either pending processing or io lists in 256 fuse_conn */ 257 struct list_head list; 258 259 /** Entry on the interrupts list */ 260 struct list_head intr_entry; 261 262 /** refcount */ 263 atomic_t count; 264 265 /** Unique ID for the interrupt request */ 266 u64 intr_unique; 267 268 /* 269 * The following bitfields are either set once before the 270 * request is queued or setting/clearing them is protected by 271 * fuse_conn->lock 272 */ 273 274 /** True if the request has reply */ 275 unsigned isreply:1; 276 277 /** Force sending of the request even if interrupted */ 278 unsigned force:1; 279 280 /** The request was aborted */ 281 unsigned aborted:1; 282 283 /** Request is sent in the background */ 284 unsigned background:1; 285 286 /** The request has been interrupted */ 287 unsigned interrupted:1; 288 289 /** Data is being copied to/from the request */ 290 unsigned locked:1; 291 292 /** Request is counted as "waiting" */ 293 unsigned waiting:1; 294 295 /** State of the request */ 296 enum fuse_req_state state; 297 298 /** The request input */ 299 struct fuse_in in; 300 301 /** The request output */ 302 struct fuse_out out; 303 304 /** Used to wake up the task waiting for completion of request*/ 305 wait_queue_head_t waitq; 306 307 /** Data for asynchronous requests */ 308 union { 309 struct { 310 union { 311 struct fuse_release_in in; 312 struct work_struct work; 313 }; 314 struct path path; 315 } release; 316 struct fuse_init_in init_in; 317 struct fuse_init_out init_out; 318 struct cuse_init_in cuse_init_in; 319 struct { 320 struct fuse_read_in in; 321 u64 attr_ver; 322 } read; 323 struct { 324 struct fuse_write_in in; 325 struct fuse_write_out out; 326 struct fuse_req *next; 327 } write; 328 struct fuse_notify_retrieve_in retrieve_in; 329 struct fuse_lk_in lk_in; 330 } misc; 331 332 /** page vector */ 333 struct page **pages; 334 335 /** page-descriptor vector */ 336 struct fuse_page_desc *page_descs; 337 338 /** size of the 'pages' array */ 339 unsigned max_pages; 340 341 /** inline page vector */ 342 struct page *inline_pages[FUSE_REQ_INLINE_PAGES]; 343 344 /** inline page-descriptor vector */ 345 struct fuse_page_desc inline_page_descs[FUSE_REQ_INLINE_PAGES]; 346 347 /** number of pages in vector */ 348 unsigned num_pages; 349 350 /** File used in the request (or NULL) */ 351 struct fuse_file *ff; 352 353 /** Inode used in the request or NULL */ 354 struct inode *inode; 355 356 /** AIO control block */ 357 struct fuse_io_priv *io; 358 359 /** Link on fi->writepages */ 360 struct list_head writepages_entry; 361 362 /** Request completion callback */ 363 void (*end)(struct fuse_conn *, struct fuse_req *); 364 365 /** Request is stolen from fuse_file->reserved_req */ 366 struct file *stolen_file; 367 }; 368 369 /** 370 * A Fuse connection. 371 * 372 * This structure is created, when the filesystem is mounted, and is 373 * destroyed, when the client device is closed and the filesystem is 374 * unmounted. 375 */ 376 struct fuse_conn { 377 /** Lock protecting accessess to members of this structure */ 378 spinlock_t lock; 379 380 /** Refcount */ 381 atomic_t count; 382 383 struct rcu_head rcu; 384 385 /** The user id for this mount */ 386 kuid_t user_id; 387 388 /** The group id for this mount */ 389 kgid_t group_id; 390 391 /** The fuse mount flags for this mount */ 392 unsigned flags; 393 394 /** Maximum read size */ 395 unsigned max_read; 396 397 /** Maximum write size */ 398 unsigned max_write; 399 400 /** Readers of the connection are waiting on this */ 401 wait_queue_head_t waitq; 402 403 /** The list of pending requests */ 404 struct list_head pending; 405 406 /** The list of requests being processed */ 407 struct list_head processing; 408 409 /** The list of requests under I/O */ 410 struct list_head io; 411 412 /** The next unique kernel file handle */ 413 u64 khctr; 414 415 /** rbtree of fuse_files waiting for poll events indexed by ph */ 416 struct rb_root polled_files; 417 418 /** Maximum number of outstanding background requests */ 419 unsigned max_background; 420 421 /** Number of background requests at which congestion starts */ 422 unsigned congestion_threshold; 423 424 /** Number of requests currently in the background */ 425 unsigned num_background; 426 427 /** Number of background requests currently queued for userspace */ 428 unsigned active_background; 429 430 /** The list of background requests set aside for later queuing */ 431 struct list_head bg_queue; 432 433 /** Pending interrupts */ 434 struct list_head interrupts; 435 436 /** Queue of pending forgets */ 437 struct fuse_forget_link forget_list_head; 438 struct fuse_forget_link *forget_list_tail; 439 440 /** Batching of FORGET requests (positive indicates FORGET batch) */ 441 int forget_batch; 442 443 /** Flag indicating that INIT reply has been received. Allocating 444 * any fuse request will be suspended until the flag is set */ 445 int initialized; 446 447 /** Flag indicating if connection is blocked. This will be 448 the case before the INIT reply is received, and if there 449 are too many outstading backgrounds requests */ 450 int blocked; 451 452 /** waitq for blocked connection */ 453 wait_queue_head_t blocked_waitq; 454 455 /** waitq for reserved requests */ 456 wait_queue_head_t reserved_req_waitq; 457 458 /** The next unique request id */ 459 u64 reqctr; 460 461 /** Connection established, cleared on umount, connection 462 abort and device release */ 463 unsigned connected; 464 465 /** Connection failed (version mismatch). Cannot race with 466 setting other bitfields since it is only set once in INIT 467 reply, before any other request, and never cleared */ 468 unsigned conn_error:1; 469 470 /** Connection successful. Only set in INIT */ 471 unsigned conn_init:1; 472 473 /** Do readpages asynchronously? Only set in INIT */ 474 unsigned async_read:1; 475 476 /** Do not send separate SETATTR request before open(O_TRUNC) */ 477 unsigned atomic_o_trunc:1; 478 479 /** Filesystem supports NFS exporting. Only set in INIT */ 480 unsigned export_support:1; 481 482 /** Set if bdi is valid */ 483 unsigned bdi_initialized:1; 484 485 /** write-back cache policy (default is write-through) */ 486 unsigned writeback_cache:1; 487 488 /* 489 * The following bitfields are only for optimization purposes 490 * and hence races in setting them will not cause malfunction 491 */ 492 493 /** Is open/release not implemented by fs? */ 494 unsigned no_open:1; 495 496 /** Is fsync not implemented by fs? */ 497 unsigned no_fsync:1; 498 499 /** Is fsyncdir not implemented by fs? */ 500 unsigned no_fsyncdir:1; 501 502 /** Is flush not implemented by fs? */ 503 unsigned no_flush:1; 504 505 /** Is setxattr not implemented by fs? */ 506 unsigned no_setxattr:1; 507 508 /** Is getxattr not implemented by fs? */ 509 unsigned no_getxattr:1; 510 511 /** Is listxattr not implemented by fs? */ 512 unsigned no_listxattr:1; 513 514 /** Is removexattr not implemented by fs? */ 515 unsigned no_removexattr:1; 516 517 /** Are posix file locking primitives not implemented by fs? */ 518 unsigned no_lock:1; 519 520 /** Is access not implemented by fs? */ 521 unsigned no_access:1; 522 523 /** Is create not implemented by fs? */ 524 unsigned no_create:1; 525 526 /** Is interrupt not implemented by fs? */ 527 unsigned no_interrupt:1; 528 529 /** Is bmap not implemented by fs? */ 530 unsigned no_bmap:1; 531 532 /** Is poll not implemented by fs? */ 533 unsigned no_poll:1; 534 535 /** Do multi-page cached writes */ 536 unsigned big_writes:1; 537 538 /** Don't apply umask to creation modes */ 539 unsigned dont_mask:1; 540 541 /** Are BSD file locking primitives not implemented by fs? */ 542 unsigned no_flock:1; 543 544 /** Is fallocate not implemented by fs? */ 545 unsigned no_fallocate:1; 546 547 /** Use enhanced/automatic page cache invalidation. */ 548 unsigned auto_inval_data:1; 549 550 /** Does the filesystem support readdirplus? */ 551 unsigned do_readdirplus:1; 552 553 /** Does the filesystem want adaptive readdirplus? */ 554 unsigned readdirplus_auto:1; 555 556 /** Does the filesystem support asynchronous direct-IO submission? */ 557 unsigned async_dio:1; 558 559 /** The number of requests waiting for completion */ 560 atomic_t num_waiting; 561 562 /** Negotiated minor version */ 563 unsigned minor; 564 565 /** Backing dev info */ 566 struct backing_dev_info bdi; 567 568 /** Entry on the fuse_conn_list */ 569 struct list_head entry; 570 571 /** Device ID from super block */ 572 dev_t dev; 573 574 /** Dentries in the control filesystem */ 575 struct dentry *ctl_dentry[FUSE_CTL_NUM_DENTRIES]; 576 577 /** number of dentries used in the above array */ 578 int ctl_ndents; 579 580 /** O_ASYNC requests */ 581 struct fasync_struct *fasync; 582 583 /** Key for lock owner ID scrambling */ 584 u32 scramble_key[4]; 585 586 /** Reserved request for the DESTROY message */ 587 struct fuse_req *destroy_req; 588 589 /** Version counter for attribute changes */ 590 u64 attr_version; 591 592 /** Called on final put */ 593 void (*release)(struct fuse_conn *); 594 595 /** Super block for this connection. */ 596 struct super_block *sb; 597 598 /** Read/write semaphore to hold when accessing sb. */ 599 struct rw_semaphore killsb; 600 }; 601 602 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb) 603 { 604 return sb->s_fs_info; 605 } 606 607 static inline struct fuse_conn *get_fuse_conn(struct inode *inode) 608 { 609 return get_fuse_conn_super(inode->i_sb); 610 } 611 612 static inline struct fuse_inode *get_fuse_inode(struct inode *inode) 613 { 614 return container_of(inode, struct fuse_inode, inode); 615 } 616 617 static inline u64 get_node_id(struct inode *inode) 618 { 619 return get_fuse_inode(inode)->nodeid; 620 } 621 622 /** Device operations */ 623 extern const struct file_operations fuse_dev_operations; 624 625 extern const struct dentry_operations fuse_dentry_operations; 626 627 /** 628 * Inode to nodeid comparison. 629 */ 630 int fuse_inode_eq(struct inode *inode, void *_nodeidp); 631 632 /** 633 * Get a filled in inode 634 */ 635 struct inode *fuse_iget(struct super_block *sb, u64 nodeid, 636 int generation, struct fuse_attr *attr, 637 u64 attr_valid, u64 attr_version); 638 639 int fuse_lookup_name(struct super_block *sb, u64 nodeid, struct qstr *name, 640 struct fuse_entry_out *outarg, struct inode **inode); 641 642 /** 643 * Send FORGET command 644 */ 645 void fuse_queue_forget(struct fuse_conn *fc, struct fuse_forget_link *forget, 646 u64 nodeid, u64 nlookup); 647 648 struct fuse_forget_link *fuse_alloc_forget(void); 649 650 /* Used by READDIRPLUS */ 651 void fuse_force_forget(struct file *file, u64 nodeid); 652 653 /** 654 * Initialize READ or READDIR request 655 */ 656 void fuse_read_fill(struct fuse_req *req, struct file *file, 657 loff_t pos, size_t count, int opcode); 658 659 /** 660 * Send OPEN or OPENDIR request 661 */ 662 int fuse_open_common(struct inode *inode, struct file *file, bool isdir); 663 664 struct fuse_file *fuse_file_alloc(struct fuse_conn *fc); 665 struct fuse_file *fuse_file_get(struct fuse_file *ff); 666 void fuse_file_free(struct fuse_file *ff); 667 void fuse_finish_open(struct inode *inode, struct file *file); 668 669 void fuse_sync_release(struct fuse_file *ff, int flags); 670 671 /** 672 * Send RELEASE or RELEASEDIR request 673 */ 674 void fuse_release_common(struct file *file, int opcode); 675 676 /** 677 * Send FSYNC or FSYNCDIR request 678 */ 679 int fuse_fsync_common(struct file *file, loff_t start, loff_t end, 680 int datasync, int isdir); 681 682 /** 683 * Notify poll wakeup 684 */ 685 int fuse_notify_poll_wakeup(struct fuse_conn *fc, 686 struct fuse_notify_poll_wakeup_out *outarg); 687 688 /** 689 * Initialize file operations on a regular file 690 */ 691 void fuse_init_file_inode(struct inode *inode); 692 693 /** 694 * Initialize inode operations on regular files and special files 695 */ 696 void fuse_init_common(struct inode *inode); 697 698 /** 699 * Initialize inode and file operations on a directory 700 */ 701 void fuse_init_dir(struct inode *inode); 702 703 /** 704 * Initialize inode operations on a symlink 705 */ 706 void fuse_init_symlink(struct inode *inode); 707 708 /** 709 * Change attributes of an inode 710 */ 711 void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr, 712 u64 attr_valid, u64 attr_version); 713 714 void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr, 715 u64 attr_valid); 716 717 /** 718 * Initialize the client device 719 */ 720 int fuse_dev_init(void); 721 722 /** 723 * Cleanup the client device 724 */ 725 void fuse_dev_cleanup(void); 726 727 int fuse_ctl_init(void); 728 void fuse_ctl_cleanup(void); 729 730 /** 731 * Allocate a request 732 */ 733 struct fuse_req *fuse_request_alloc(unsigned npages); 734 735 struct fuse_req *fuse_request_alloc_nofs(unsigned npages); 736 737 /** 738 * Free a request 739 */ 740 void fuse_request_free(struct fuse_req *req); 741 742 /** 743 * Get a request, may fail with -ENOMEM, 744 * caller should specify # elements in req->pages[] explicitly 745 */ 746 struct fuse_req *fuse_get_req(struct fuse_conn *fc, unsigned npages); 747 struct fuse_req *fuse_get_req_for_background(struct fuse_conn *fc, 748 unsigned npages); 749 750 /* 751 * Increment reference count on request 752 */ 753 void __fuse_get_request(struct fuse_req *req); 754 755 /** 756 * Get a request, may fail with -ENOMEM, 757 * useful for callers who doesn't use req->pages[] 758 */ 759 static inline struct fuse_req *fuse_get_req_nopages(struct fuse_conn *fc) 760 { 761 return fuse_get_req(fc, 0); 762 } 763 764 /** 765 * Gets a requests for a file operation, always succeeds 766 */ 767 struct fuse_req *fuse_get_req_nofail_nopages(struct fuse_conn *fc, 768 struct file *file); 769 770 /** 771 * Decrement reference count of a request. If count goes to zero free 772 * the request. 773 */ 774 void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req); 775 776 /** 777 * Send a request (synchronous) 778 */ 779 void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req); 780 781 /** 782 * Send a request in the background 783 */ 784 void fuse_request_send_background(struct fuse_conn *fc, struct fuse_req *req); 785 786 void fuse_request_send_background_locked(struct fuse_conn *fc, 787 struct fuse_req *req); 788 789 /* Abort all requests */ 790 void fuse_abort_conn(struct fuse_conn *fc); 791 792 /** 793 * Invalidate inode attributes 794 */ 795 void fuse_invalidate_attr(struct inode *inode); 796 797 void fuse_invalidate_entry_cache(struct dentry *entry); 798 799 void fuse_invalidate_atime(struct inode *inode); 800 801 /** 802 * Acquire reference to fuse_conn 803 */ 804 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc); 805 806 void fuse_conn_kill(struct fuse_conn *fc); 807 808 /** 809 * Initialize fuse_conn 810 */ 811 void fuse_conn_init(struct fuse_conn *fc); 812 813 /** 814 * Release reference to fuse_conn 815 */ 816 void fuse_conn_put(struct fuse_conn *fc); 817 818 /** 819 * Add connection to control filesystem 820 */ 821 int fuse_ctl_add_conn(struct fuse_conn *fc); 822 823 /** 824 * Remove connection from control filesystem 825 */ 826 void fuse_ctl_remove_conn(struct fuse_conn *fc); 827 828 /** 829 * Is file type valid? 830 */ 831 int fuse_valid_type(int m); 832 833 /** 834 * Is current process allowed to perform filesystem operation? 835 */ 836 int fuse_allow_current_process(struct fuse_conn *fc); 837 838 u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id); 839 840 int fuse_update_attributes(struct inode *inode, struct kstat *stat, 841 struct file *file, bool *refreshed); 842 843 void fuse_flush_writepages(struct inode *inode); 844 845 void fuse_set_nowrite(struct inode *inode); 846 void fuse_release_nowrite(struct inode *inode); 847 848 u64 fuse_get_attr_version(struct fuse_conn *fc); 849 850 /** 851 * File-system tells the kernel to invalidate cache for the given node id. 852 */ 853 int fuse_reverse_inval_inode(struct super_block *sb, u64 nodeid, 854 loff_t offset, loff_t len); 855 856 /** 857 * File-system tells the kernel to invalidate parent attributes and 858 * the dentry matching parent/name. 859 * 860 * If the child_nodeid is non-zero and: 861 * - matches the inode number for the dentry matching parent/name, 862 * - is not a mount point 863 * - is a file or oan empty directory 864 * then the dentry is unhashed (d_delete()). 865 */ 866 int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid, 867 u64 child_nodeid, struct qstr *name); 868 869 int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file, 870 bool isdir); 871 872 /** 873 * fuse_direct_io() flags 874 */ 875 876 /** If set, it is WRITE; otherwise - READ */ 877 #define FUSE_DIO_WRITE (1 << 0) 878 879 /** CUSE pass fuse_direct_io() a file which f_mapping->host is not from FUSE */ 880 #define FUSE_DIO_CUSE (1 << 1) 881 882 ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov, 883 unsigned long nr_segs, size_t count, loff_t *ppos, 884 int flags); 885 long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg, 886 unsigned int flags); 887 long fuse_ioctl_common(struct file *file, unsigned int cmd, 888 unsigned long arg, unsigned int flags); 889 unsigned fuse_file_poll(struct file *file, poll_table *wait); 890 int fuse_dev_release(struct inode *inode, struct file *file); 891 892 bool fuse_write_update_size(struct inode *inode, loff_t pos); 893 894 int fuse_flush_mtime(struct file *file, bool nofail); 895 896 int fuse_do_setattr(struct inode *inode, struct iattr *attr, 897 struct file *file); 898 899 #endif /* _FS_FUSE_I_H */ 900