Hi~
I have modified bread() in buffer.c at Linux kernel 2.2.17.
Only modified bread() in buffer.c.
Modified bread is similar to original bread().
Differece in bread() is that modified bread() prefetch one block.
Origianl bread : fetch request block
Modified bread : fetch request block + prefetch one block
Source complie is no error but when kernel is booting,
show kernel panic message.
(kernel panic: VFS: Unable to mount root fs on 03:07)
what's wrong my source.
please tell me answer.
thanks for your help.
/* source */
struct buffer_head * bread(kdev_t dev, int block, int size)
{
struct buffer_head * bh;
struct buffer_head * ph;
struct buffer_head * result;
int prefetch = 0;
int bhMiss = 1;
if (block < 0)
return NULL;
bh = getblk(dev, block, size);
if ( buffer_uptodate(bh) ) {
bhMiss = 0;
result = bh;
}
else ll_rw_block(READ, 1, &bh);
ph = getblk(dev, block + 1, size);
if ( buffer_uptodate(ph) ) {
prefetch = 0;
}
else {
prefetch = 1;
ll_rw_block(READ, 1, &ph);
}
if ( bhMiss = 1 ) {
wait_on_buffer(bh);
if ( buffer_uptodate(bh) ) {
result = bh;
}
else {
brelse(bh);
result = (struct buffer_head *)NULL;
}
}
/* OutofRange value 0 : block + 1 > total blocks in file system
*/
/* OutofRange value 1 : block + 1 <= total blocks in file
system */
if ( prefetch == 1 && OutofRange == 0) {
wait_on_buffer(ph);
}
brelse(ph);
return result;
Quote:}