# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.566 -> 1.567 # drivers/block/ll_rw_blk.c 1.102 -> 1.103 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/09/18 axboe@burns.home.kernel.dk 1.567 # impose sane limits on queue restrictions. that means: # # o q->max_sectors must be able to at least span a page # o q->max_phys_segments and q->max_hw_segments must be at least 1 # o q->max_segment_size must be at least page sized # o q->seg_boundary_mask must be at least PAGE_CACHE_SIZE-1 # -------------------------------------------- # diff -Nru a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c --- a/drivers/block/ll_rw_blk.c Wed Sep 18 13:29:04 2002 +++ b/drivers/block/ll_rw_blk.c Wed Sep 18 13:29:04 2002 @@ -204,6 +204,11 @@ **/ void blk_queue_max_sectors(request_queue_t *q, unsigned short max_sectors) { + if ((max_sectors << 9) < PAGE_CACHE_SIZE) { + max_sectors = 1 << (PAGE_CACHE_SHIFT - 9); + printk("%s: set to minimum %d\n", __FUNCTION__, max_sectors); + } + q->max_sectors = max_sectors; } @@ -219,6 +224,11 @@ **/ void blk_queue_max_phys_segments(request_queue_t *q, unsigned short max_segments) { + if (!max_segments) { + max_segments = 1; + printk("%s: set to minimum %d\n", __FUNCTION__, max_segments); + } + q->max_phys_segments = max_segments; } @@ -235,6 +245,11 @@ **/ void blk_queue_max_hw_segments(request_queue_t *q, unsigned short max_segments) { + if (!max_segments) { + max_segments = 1; + printk("%s: set to minimum %d\n", __FUNCTION__, max_segments); + } + q->max_hw_segments = max_segments; } @@ -249,6 +264,11 @@ **/ void blk_queue_max_segment_size(request_queue_t *q, unsigned int max_size) { + if (max_size < PAGE_CACHE_SIZE) { + max_size = PAGE_CACHE_SIZE; + printk("%s: set to minimum %d\n", __FUNCTION__, max_size); + } + q->max_segment_size = max_size; } @@ -275,6 +295,11 @@ **/ void blk_queue_segment_boundary(request_queue_t *q, unsigned long mask) { + if (mask < PAGE_CACHE_SIZE - 1) { + mask = PAGE_CACHE_SIZE - 1; + printk("%s: set to minimum %lx\n", __FUNCTION__, mask); + } + q->seg_boundary_mask = mask; }