aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/fuse_i.h
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-09-09 16:10:39 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-09 17:03:48 -0400
commit7c352bdf048811b8128019ffc1e886161e09c11c (patch)
tree74c48298b67d37295433d9b2bb08d590a5f97a78 /fs/fuse/fuse_i.h
parent8254798199332966e2ab647380c990193af7e854 (diff)
[PATCH] FUSE: don't allow restarting of system calls
This patch removes ability to interrupt and restart operations while there hasn't been any side-effect. The reason: applications. There are some apps it seems that generate signals at a fast rate. This means, that if the operation cannot make enough progress between two signals, it will be restarted for ever. This bug actually manifested itself with 'krusader' trying to open a file for writing under sshfs. Thanks to Eduard Czimbalmos for the report. The problem can be solved just by making open() uninterruptible, because in this case it was the truncate operation that slowed down the progress. But it's better to solve this by simply not allowing interrupts at all (except SIGKILL), because applications don't expect file operations to be interruptible anyway. As an added bonus the code is simplified somewhat. 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.h12
1 files changed, 1 insertions, 11 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index d7647289d8a1..24d761518d86 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -410,27 +410,17 @@ void fuse_reset_request(struct fuse_req *req);
410struct fuse_req *fuse_get_request(struct fuse_conn *fc); 410struct fuse_req *fuse_get_request(struct fuse_conn *fc);
411 411
412/** 412/**
413 * Reserve a preallocated request, only interruptible by SIGKILL
414 */
415struct fuse_req *fuse_get_request_nonint(struct fuse_conn *fc);
416
417/**
418 * Decrement reference count of a request. If count goes to zero put 413 * Decrement reference count of a request. If count goes to zero put
419 * on unused list (preallocated) or free reqest (not preallocated). 414 * on unused list (preallocated) or free reqest (not preallocated).
420 */ 415 */
421void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req); 416void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req);
422 417
423/** 418/**
424 * Send a request (synchronous, interruptible) 419 * Send a request (synchronous)
425 */ 420 */
426void request_send(struct fuse_conn *fc, struct fuse_req *req); 421void request_send(struct fuse_conn *fc, struct fuse_req *req);
427 422
428/** 423/**
429 * Send a request (synchronous, non-interruptible except by SIGKILL)
430 */
431void request_send_nonint(struct fuse_conn *fc, struct fuse_req *req);
432
433/**
434 * Send a request with no reply 424 * Send a request with no reply
435 */ 425 */
436void request_send_noreply(struct fuse_conn *fc, struct fuse_req *req); 426void request_send_noreply(struct fuse_conn *fc, struct fuse_req *req);