From: Oleg Drokin reiserfs shouldn't be holding a ref against a buffer when running set_blocksize(): it means that truncate_inode_pages() cannot free that page. Which is not fatal - the page will drift aimlessly down the LRU until the VM nails it. But it's better this way. fs/reiserfs/super.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) diff -puN fs/reiserfs/super.c~reiserfs-pinned-buffer-fix fs/reiserfs/super.c --- 25/fs/reiserfs/super.c~reiserfs-pinned-buffer-fix 2003-11-02 01:32:52.000000000 -0800 +++ 25-akpm/fs/reiserfs/super.c 2003-11-02 01:32:52.000000000 -0800 @@ -942,6 +942,7 @@ static int read_super_block (struct supe { struct buffer_head * bh; struct reiserfs_super_block * rs; + int fs_blocksize; bh = sb_bread (s, offset / s->s_blocksize); @@ -961,8 +962,9 @@ static int read_super_block (struct supe // // ok, reiserfs signature (old or new) found in at the given offset // - sb_set_blocksize (s, sb_blocksize(rs)); + fs_blocksize = sb_blocksize(rs); brelse (bh); + sb_set_blocksize (s, fs_blocksize); bh = sb_bread (s, offset / s->s_blocksize); if (!bh) { _