From 7f45dadd983b6e33df5074bcd38a910944e131ca Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Tue, 16 Oct 2007 23:30:59 -0700 Subject: [PATCH] --- yaml --- r: 70750 b: refs/heads/master c: f92b99b9dccb61760b345baf40ed37f59b91f8af h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/fuse/dev.c | 8 ++++++++ trunk/fs/fuse/fuse_i.h | 5 ++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 5a2da685b868..6d3c9e81b1c2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fdc1ca8abae72c5829e099fd35626b83ecb12666 +refs/heads/master: f92b99b9dccb61760b345baf40ed37f59b91f8af diff --git a/trunk/fs/fuse/dev.c b/trunk/fs/fuse/dev.c index 3ad22beb24c2..ebc36f525eee 100644 --- a/trunk/fs/fuse/dev.c +++ b/trunk/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); diff --git a/trunk/fs/fuse/fuse_i.h b/trunk/fs/fuse/fuse_i.h index 68ae87cbafab..9f4603beb9e8 100644 --- a/trunk/fs/fuse/fuse_i.h +++ b/trunk/fs/fuse/fuse_i.h @@ -20,7 +20,10 @@ #define FUSE_MAX_PAGES_PER_REQ 32 /** Maximum number of outstanding background requests */ -#define FUSE_MAX_BACKGROUND 10 +#define FUSE_MAX_BACKGROUND 12 + +/** Congestion starts at 75% of maximum */ +#define FUSE_CONGESTION_THRESHOLD (FUSE_MAX_BACKGROUND * 75 / 100) /** It could be as large as PATH_MAX, but would that have any uses? */ #define FUSE_NAME_MAX 1024