aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/fuse_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/fuse/fuse_i.h')
-rw-r--r--fs/fuse/fuse_i.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index c0481e48d161..4b094fbc9c7f 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -15,6 +15,7 @@
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/backing-dev.h> 16#include <linux/backing-dev.h>
17#include <linux/mutex.h> 17#include <linux/mutex.h>
18#include <linux/rwsem.h>
18 19
19/** Max number of pages that can be used in a single read request */ 20/** Max number of pages that can be used in a single read request */
20#define FUSE_MAX_PAGES_PER_REQ 32 21#define FUSE_MAX_PAGES_PER_REQ 32
@@ -25,6 +26,9 @@
25/** Congestion starts at 75% of maximum */ 26/** Congestion starts at 75% of maximum */
26#define FUSE_CONGESTION_THRESHOLD (FUSE_MAX_BACKGROUND * 75 / 100) 27#define FUSE_CONGESTION_THRESHOLD (FUSE_MAX_BACKGROUND * 75 / 100)
27 28
29/** Bias for fi->writectr, meaning new writepages must not be sent */
30#define FUSE_NOWRITE INT_MIN
31
28/** It could be as large as PATH_MAX, but would that have any uses? */ 32/** It could be as large as PATH_MAX, but would that have any uses? */
29#define FUSE_NAME_MAX 1024 33#define FUSE_NAME_MAX 1024
30 34
@@ -73,6 +77,19 @@ struct fuse_inode {
73 77
74 /** Files usable in writepage. Protected by fc->lock */ 78 /** Files usable in writepage. Protected by fc->lock */
75 struct list_head write_files; 79 struct list_head write_files;
80
81 /** Writepages pending on truncate or fsync */
82 struct list_head queued_writes;
83
84 /** Number of sent writes, a negative bias (FUSE_NOWRITE)
85 * means more writes are blocked */
86 int writectr;
87
88 /** Waitq for writepage completion */
89 wait_queue_head_t page_waitq;
90
91 /** List of writepage requestst (pending or sent) */
92 struct list_head writepages;
76}; 93};
77 94
78/** FUSE specific file data */ 95/** FUSE specific file data */
@@ -242,6 +259,12 @@ struct fuse_req {
242 /** File used in the request (or NULL) */ 259 /** File used in the request (or NULL) */
243 struct fuse_file *ff; 260 struct fuse_file *ff;
244 261
262 /** Inode used in the request or NULL */
263 struct inode *inode;
264
265 /** Link on fi->writepages */
266 struct list_head writepages_entry;
267
245 /** Request completion callback */ 268 /** Request completion callback */
246 void (*end)(struct fuse_conn *, struct fuse_req *); 269 void (*end)(struct fuse_conn *, struct fuse_req *);
247 270
@@ -504,6 +527,11 @@ void fuse_init_symlink(struct inode *inode);
504void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr, 527void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
505 u64 attr_valid, u64 attr_version); 528 u64 attr_valid, u64 attr_version);
506 529
530void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
531 u64 attr_valid);
532
533void fuse_truncate(struct address_space *mapping, loff_t offset);
534
507/** 535/**
508 * Initialize the client device 536 * Initialize the client device
509 */ 537 */
@@ -522,6 +550,8 @@ void fuse_ctl_cleanup(void);
522 */ 550 */
523struct fuse_req *fuse_request_alloc(void); 551struct fuse_req *fuse_request_alloc(void);
524 552
553struct fuse_req *fuse_request_alloc_nofs(void);
554
525/** 555/**
526 * Free a request 556 * Free a request
527 */ 557 */
@@ -558,6 +588,8 @@ void request_send_noreply(struct fuse_conn *fc, struct fuse_req *req);
558 */ 588 */
559void request_send_background(struct fuse_conn *fc, struct fuse_req *req); 589void request_send_background(struct fuse_conn *fc, struct fuse_req *req);
560 590
591void request_send_background_locked(struct fuse_conn *fc, struct fuse_req *req);
592
561/* Abort all requests */ 593/* Abort all requests */
562void fuse_abort_conn(struct fuse_conn *fc); 594void fuse_abort_conn(struct fuse_conn *fc);
563 595
@@ -600,3 +632,8 @@ u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id);
600 632
601int fuse_update_attributes(struct inode *inode, struct kstat *stat, 633int fuse_update_attributes(struct inode *inode, struct kstat *stat,
602 struct file *file, bool *refreshed); 634 struct file *file, bool *refreshed);
635
636void fuse_flush_writepages(struct inode *inode);
637
638void fuse_set_nowrite(struct inode *inode);
639void fuse_release_nowrite(struct inode *inode);