UBIFS: correct data corruption range
authorMats Kärrman <Mats.Karrman@tritech.se>
Wed, 21 Aug 2013 13:24:49 +0000 (13:24 +0000)
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Sat, 26 Oct 2013 10:33:38 +0000 (11:33 +0100)
With power-cut emulation, it is possible that sometimes no data at all is
corrupted and that confusing messages are printed due to errors in the
computation of data corruption range.

[1] The start of the range should be [0..len-1], not [0..len].
[2] The end of the range should always be at least 1 greater than the start.

Signed-off-by: Mats Karrman <mats.karrman@tritech.se>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
fs/ubifs/debug.c

index 6e025e02ffde80c924bec1b90b4fe62b7d163121..cc1febd8fadf730ddd2e2dfb78315798508aa408 100644 (file)
@@ -2563,9 +2563,9 @@ static int corrupt_data(const struct ubifs_info *c, const void *buf,
        unsigned int from, to, ffs = chance(1, 2);
        unsigned char *p = (void *)buf;
 
-       from = prandom_u32() % (len + 1);
-       /* Corruption may only span one max. write unit */
-       to = min(len, ALIGN(from, c->max_write_size));
+       from = prandom_u32() % len;
+       /* Corruption span max to end of write unit */
+       to = min(len, ALIGN(from + 1, c->max_write_size));
 
        ubifs_warn("filled bytes %u-%u with %s", from, to - 1,
                   ffs ? "0xFFs" : "random data");