[FIXED?] reiser4: problem with key inconsistency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all.
It seems I do have the long-awaited fix.

The symptoms of the problem: kernel starts to issue complaints
about key inconsistency with the suggestions to check the partition
with fsck. Fsck sometimes finds corruptions, but sometimes reports
that file system is consistent.

Please apply the attached patch to reiser4 stuff for 3.6.2, or
download reiser4-for-3.6.4 (which already contains this patch), and
let me know if the problem has not gone:
http://sourceforge.net/projects/reiser4/files/reiser4-for-linux-3.x/

Please, don't rush to deploy production systems on reiser4: it can
take up to 80 hours to reproduce the problem with high workload.

Thank you for your help.
Edward.
Update dkeys of the pair of nodes, which took participation
in the "implicit shift" during squalloc on the twig level in
flush time.

Signed-off-by: Edward Shishkin <edward.shishkin@xxxxxxxxx>
---
 fs/reiser4/flush.c |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

--- linux-3.6.2_.orig/fs/reiser4/flush.c
+++ linux-3.6.2_/fs/reiser4/flush.c
@@ -450,6 +450,7 @@ static int znode_check_flushprepped(znod
 {
 	return jnode_check_flushprepped(ZJNODE(node));
 }
+static void update_znode_dkeys(znode * left, znode * right);
 
 /* Flush position functions */
 static void pos_init(flush_pos_t *pos);
@@ -1525,6 +1526,7 @@ static int squeeze_right_twig(znode * le
 	int ret = SUBTREE_MOVED;
 	coord_t coord;		/* used to iterate over items */
 	reiser4_key stop_key;
+	reiser4_tree *tree;
 
 	assert("jmacd-2008", !node_is_empty(right));
 	coord_init_first_unit(&coord, right);
@@ -1552,6 +1554,18 @@ static int squeeze_right_twig(znode * le
 
 		ON_DEBUG(shift_check(vp, left, coord.node));
 	}
+	/*
+	 * @left and @right nodes participated in the
+	 * implicit shift, determined by the pair of
+	 * functions:
+	 * . squalloc_extent() - append units to the @left
+	 * . squalloc_right_twig_cut() - cut the units from @right
+	 * so update their delimiting keys
+	 */
+	tree = znode_get_tree(left);
+	write_lock_dk(tree);
+	update_znode_dkeys(left, right);
+	write_unlock_dk(tree);
 
 	if (node_is_empty(coord.node))
 		ret = SQUEEZE_SOURCE_EMPTY;

[Index of Archives]     [Linux File System Development]     [Linux BTRFS]     [Linux NFS]     [Linux Filesystems]     [Ext4 Filesystem]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Resources]

  Powered by Linux