aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/fuse_i.h
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2006-06-25 08:48:54 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-25 13:01:19 -0400
commita4d27e75ffb7b8ecb7eed0c7db0df975525f3fd7 (patch)
tree2353706a33196438547ed4651afd9f2d81dd96e8 /fs/fuse/fuse_i.h
parentf9a2842e5612b93fa20a624a8baa6c2a7ecea504 (diff)
[PATCH] fuse: add request interruption
Add synchronous request interruption. This is needed for file locking operations which have to be interruptible. However filesystem may implement interruptibility of other operations (e.g. like NFS 'intr' mount option). Signed-off-by: Miklos Szeredi <miklos@szeredi.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fuse/fuse_i.h')
-rw-r--r--fs/fuse/fuse_i.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index fd65e75e1622..c862df58da92 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -131,6 +131,7 @@ enum fuse_req_state {
131 FUSE_REQ_PENDING, 131 FUSE_REQ_PENDING,
132 FUSE_REQ_READING, 132 FUSE_REQ_READING,
133 FUSE_REQ_SENT, 133 FUSE_REQ_SENT,
134 FUSE_REQ_WRITING,
134 FUSE_REQ_FINISHED 135 FUSE_REQ_FINISHED
135}; 136};
136 137
@@ -144,9 +145,15 @@ struct fuse_req {
144 fuse_conn */ 145 fuse_conn */
145 struct list_head list; 146 struct list_head list;
146 147
148 /** Entry on the interrupts list */
149 struct list_head intr_entry;
150
147 /** refcount */ 151 /** refcount */
148 atomic_t count; 152 atomic_t count;
149 153
154 /** Unique ID for the interrupt request */
155 u64 intr_unique;
156
150 /* 157 /*
151 * The following bitfields are either set once before the 158 * The following bitfields are either set once before the
152 * request is queued or setting/clearing them is protected by 159 * request is queued or setting/clearing them is protected by
@@ -165,6 +172,9 @@ struct fuse_req {
165 /** Request is sent in the background */ 172 /** Request is sent in the background */
166 unsigned background:1; 173 unsigned background:1;
167 174
175 /** The request has been interrupted */
176 unsigned interrupted:1;
177
168 /** Data is being copied to/from the request */ 178 /** Data is being copied to/from the request */
169 unsigned locked:1; 179 unsigned locked:1;
170 180
@@ -262,6 +272,9 @@ struct fuse_conn {
262 /** Number of requests currently in the background */ 272 /** Number of requests currently in the background */
263 unsigned num_background; 273 unsigned num_background;
264 274
275 /** Pending interrupts */
276 struct list_head interrupts;
277
265 /** Flag indicating if connection is blocked. This will be 278 /** Flag indicating if connection is blocked. This will be
266 the case before the INIT reply is received, and if there 279 the case before the INIT reply is received, and if there
267 are too many outstading backgrounds requests */ 280 are too many outstading backgrounds requests */
@@ -320,6 +333,9 @@ struct fuse_conn {
320 /** Is create not implemented by fs? */ 333 /** Is create not implemented by fs? */
321 unsigned no_create : 1; 334 unsigned no_create : 1;
322 335
336 /** Is interrupt not implemented by fs? */
337 unsigned no_interrupt : 1;
338
323 /** The number of requests waiting for completion */ 339 /** The number of requests waiting for completion */
324 atomic_t num_waiting; 340 atomic_t num_waiting;
325 341