Move the touch_buffer() from bread into getblk(). Fair enough. The touch_buffer() call tells the VM "please don't evict this page, I'm about to use it". Doing it in getblk() will provide better coverage than doing it in bread(). I would actually prefer to do it in get_hash_table(), but that's a minor detail. ===================================== --- 2.4.19-pre6/fs/buffer.c~aa-040-touch_buffer Fri Apr 5 01:07:47 2002 +++ 2.4.19-pre6-akpm/fs/buffer.c Fri Apr 5 01:08:16 2002 @@ -1028,8 +1028,10 @@ struct buffer_head * getblk(kdev_t dev, struct buffer_head * bh; bh = get_hash_table(dev, block, size); - if (bh) + if (bh) { + touch_buffer(bh); return bh; + } if (!grow_buffers(dev, block, size)) free_more_memory(); @@ -1192,7 +1194,6 @@ struct buffer_head * bread(kdev_t dev, i struct buffer_head * bh; bh = getblk(dev, block, size); - touch_buffer(bh); if (buffer_uptodate(bh)) return bh; ll_rw_block(READ, 1, &bh);