--- block_dev.c.orig Mon Mar 13 17:57:27 2000 +++ block_dev.c Tue Mar 14 15:43:06 2000 @@ -14,7 +14,7 @@ extern int *blksize_size[]; #define MAX_BUF_PER_PAGE (PAGE_SIZE / 512) -#define NBUF 64 +#define NBUF 512 ssize_t block_write(struct file * filp, const char * buf, size_t count, loff_t *ppos) @@ -194,8 +194,12 @@ rblocks = blocks = (left + offset + blocksize - 1) >> blocksize_bits; bhb = bhe = buflist; if (filp->f_reada) { - if (blocks < read_ahead[MAJOR(dev)] / (blocksize >> 9)) - blocks = read_ahead[MAJOR(dev)] / (blocksize >> 9); + blocks += read_ahead[MAJOR(dev)] / (blocksize >> 9); + if (block + blocks > size) { + blocks = size - block; + if (blocks == 0) + return 0; + } if (rblocks > blocks) blocks = rblocks;