aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/dev.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2007-10-16 23:30:59 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 08:43:03 -0700
commitf92b99b9dccb61760b345baf40ed37f59b91f8af (patch)
tree1460ac391186be79beb79a6d4030cc387239681c /fs/fuse/dev.c
parentfdc1ca8abae72c5829e099fd35626b83ecb12666 (diff)
downloadkernel_samsung_smdk4412-f92b99b9dccb61760b345baf40ed37f59b91f8af.zip
kernel_samsung_smdk4412-f92b99b9dccb61760b345baf40ed37f59b91f8af.tar.gz
kernel_samsung_smdk4412-f92b99b9dccb61760b345baf40ed37f59b91f8af.tar.bz2
fuse: update backing_dev_info congestion state
Set the read and write congestion state if the request queue is close to blocking, and clear it when it's not. This prevents unnecessary blocking in readahead and (when writable mmaps are allowed) writeback. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/fuse/dev.c')
-rw-r--r--fs/fuse/dev.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 3ad22be..ebc36f5 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -224,6 +224,10 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
fc->blocked = 0;
wake_up_all(&fc->blocked_waitq);
}
+ if (fc->num_background == FUSE_CONGESTION_THRESHOLD) {
+ clear_bdi_congested(&fc->bdi, READ);
+ clear_bdi_congested(&fc->bdi, WRITE);
+ }
fc->num_background--;
}
spin_unlock(&fc->lock);
@@ -378,6 +382,10 @@ static void request_send_nowait(struct fuse_conn *fc, struct fuse_req *req)
fc->num_background++;
if (fc->num_background == FUSE_MAX_BACKGROUND)
fc->blocked = 1;
+ if (fc->num_background == FUSE_CONGESTION_THRESHOLD) {
+ set_bdi_congested(&fc->bdi, READ);
+ set_bdi_congested(&fc->bdi, WRITE);
+ }
queue_request(fc, req);
spin_unlock(&fc->lock);