diff -urN ref/drivers/block/blkpg.c read_ahead/drivers/block/blkpg.c --- ref/drivers/block/blkpg.c Mon May 7 19:24:01 2001 +++ read_ahead/drivers/block/blkpg.c Mon May 7 19:00:20 2001 @@ -224,7 +224,7 @@ case BLKRASET: if(!capable(CAP_SYS_ADMIN)) return -EACCES; - if(!dev || arg > 0xff) + if(!dev || (int) arg > 0) return -EINVAL; read_ahead[MAJOR(dev)] = arg; return 0; diff -urN ref/drivers/md/lvm.c read_ahead/drivers/md/lvm.c --- ref/drivers/md/lvm.c Mon May 7 19:24:01 2001 +++ read_ahead/drivers/md/lvm.c Mon May 7 19:23:26 2001 @@ -243,9 +243,13 @@ #include "lvm-internal.h" -#define LVM_CORRECT_READ_AHEAD( a) \ - if ( a < LVM_MIN_READ_AHEAD || \ - a > LVM_MAX_READ_AHEAD) a = LVM_MAX_READ_AHEAD; +#define LVM_CORRECT_READ_AHEAD(a) \ +do { \ + if ((a) < LVM_MIN_READ_AHEAD || \ + (a) > LVM_MAX_READ_AHEAD) \ + (a) = LVM_DEFAULT_READ_AHEAD; \ + read_ahead[MAJOR_NR] = (a); \ +} while(0) #ifndef WRITEA # define WRITEA WRITE @@ -935,6 +939,7 @@ (long) arg > LVM_MAX_READ_AHEAD) return -EINVAL; lv_ptr->lv_read_ahead = (long) arg; + read_ahead[MAJOR_NR] = lv_ptr->lv_read_ahead; break; diff -urN ref/fs/block_dev.c read_ahead/fs/block_dev.c --- ref/fs/block_dev.c Mon May 7 19:24:01 2001 +++ read_ahead/fs/block_dev.c Mon May 7 18:33:00 2001 @@ -87,10 +87,10 @@ blocks = 1; } else { /* Read-ahead before write */ - blocks = read_ahead[MAJOR(dev)] / (BUFFERED_BLOCKSIZE >> 9) / 2; + blocks = read_ahead[MAJOR(dev)] / (BUFFERED_BLOCKSIZE >> 9); + blocks++; if (block + blocks > size) blocks = size - block; if (blocks > NBUF) blocks=NBUF; - if (!blocks) blocks = 1; for(i=1; i