diff options
-rw-r--r-- | drivers/block/ll_rw_blk.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 234fdcfbdf01..6c98cf042714 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c | |||
@@ -1912,6 +1912,15 @@ static struct request *get_request(request_queue_t *q, int rw, struct bio *bio, | |||
1912 | } | 1912 | } |
1913 | 1913 | ||
1914 | get_rq: | 1914 | get_rq: |
1915 | /* | ||
1916 | * Only allow batching queuers to allocate up to 50% over the defined | ||
1917 | * limit of requests, otherwise we could have thousands of requests | ||
1918 | * allocated with any setting of ->nr_requests | ||
1919 | */ | ||
1920 | if (rl->count[rw] >= (3 * q->nr_requests / 2)) { | ||
1921 | spin_unlock_irq(q->queue_lock); | ||
1922 | goto out; | ||
1923 | } | ||
1915 | rl->count[rw]++; | 1924 | rl->count[rw]++; |
1916 | rl->starved[rw] = 0; | 1925 | rl->starved[rw] = 0; |
1917 | if (rl->count[rw] >= queue_congestion_on_threshold(q)) | 1926 | if (rl->count[rw] >= queue_congestion_on_threshold(q)) |