From: Oleg Drokin <green@linuxhacker.ru>

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) {

_