[PATCH] ReiserFS 3 of 13

From: Hans Reiser (reiser@namesys.com)
Date: Wed Apr 10 2002 - 09:17:19 EST


attached mail follows:


This patch is to convert pap14030 panic into warning. While doing this,
a bug was uncovered, that when get_block() returns a failure, buffer
is still marked as mapped, and on subsequent access to this buffer
get_block() was not called anymore. This is also fixed.
 
--- linux-2.5.8-pre2/fs/reiserfs/inode.c.orig Mon Apr 8 14:08:06 2002
+++ linux-2.5.8-pre2/fs/reiserfs/inode.c Mon Apr 8 14:08:28 2002
@@ -752,6 +752,11 @@
                 goto research ;
             }
             retval = direct2indirect (&th, inode, &path, unbh, tail_offset);
+ if (retval) {
+ reiserfs_unmap_buffer(unbh);
+ reiserfs_free_block (&th, allocated_block_nr);
+ goto failure;
+ }
             /* it is important the mark_buffer_uptodate is done after
             ** the direct2indirect. The buffer might contain valid
             ** data newer than the data on disk (read by readpage, changed,
@@ -761,10 +766,7 @@
             ** the disk
             */
             mark_buffer_uptodate (unbh, 1);
- if (retval) {
- reiserfs_free_block (&th, allocated_block_nr);
- goto failure;
- }
+
             /* we've converted the tail, so we must
             ** flush unbh before the transaction commits
             */
--- linux-2.5.8-pre2.orig/fs/reiserfs/tail_conversion.c Mon Apr 8 14:00:50 2002
+++ linux-2.5.8-pre2/fs/reiserfs/tail_conversion.c Mon Apr 8 14:08:28 2002
@@ -49,9 +49,13 @@
     make_cpu_key (&end_key, inode, tail_offset, TYPE_INDIRECT, 4);
 
     // FIXME: we could avoid this
- if ( search_for_position_by_key (sb, &end_key, path) == POSITION_FOUND )
- reiserfs_panic (sb, "PAP-14030: direct2indirect: "
- "pasted or inserted byte exists in the tree");
+ if ( search_for_position_by_key (sb, &end_key, path) == POSITION_FOUND ) {
+ reiserfs_warning ("PAP-14030: direct2indirect: "
+ "pasted or inserted byte exists in the tree %K. "
+ "Use fsck to repair.\n", &end_key);
+ pathrelse(path);
+ return -EIO;
+ }
     
     p_le_ih = PATH_PITEM_HEAD (path);
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Apr 15 2002 - 22:00:16 EST