[PATCH] reiserfs: fix key decrementing
authorVladimir Saveliev <vs@namesys.com>
Thu, 12 Apr 2007 06:28:44 +0000 (23:28 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 12 Apr 2007 22:31:42 +0000 (15:31 -0700)
This patch fixes a bug in function decrementing a key of stat data item.

Offset of reiserfs keys are compared as signed values.  To set key offset
to maximal possible value maximal signed value has to be used.

This bug is responsible for severe reiserfs filesystem corruption which
shows itself as warning vs-13060.  reiserfsck fixes this corruption by
filesystem tree rebuilding.

Signed-off-by: Vladimir Saveliev <vs@namesys.com>
Cc: <reiserfs-dev@namesys.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/reiserfs/item_ops.c

index b9b423b22a8b1dcf6dab19723a4f8bfa64e0e4a3..9475557ab499434b8c7d9e74a2abebd2114d8d62 100644 (file)
@@ -23,7 +23,7 @@ static void sd_decrement_key(struct cpu_key *key)
 {
        key->on_disk_key.k_objectid--;
        set_cpu_key_k_type(key, TYPE_ANY);
-       set_cpu_key_k_offset(key, (loff_t) (-1));
+       set_cpu_key_k_offset(key, (loff_t)(~0ULL >> 1));
 }
 
 static int sd_is_left_mergeable(struct reiserfs_key *key, unsigned long bsize)