Patchwork ubifs: Correct data corruption range

login
register
mail settings
Submitter Mats Kärrman
Date Aug. 21, 2013, 1:24 p.m.
Message ID <ED3E0BCACD909541BA94A34C4A164D4C4FCDE5DF@post.tritech.se>
Download mbox | patch
Permalink /patch/268807/
State New
Headers show

Comments

Mats Kärrman - Aug. 21, 2013, 1:24 p.m.
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>
Artem Bityutskiy - Oct. 26, 2013, 10:35 a.m.
On Wed, 2013-08-21 at 13:24 +0000, Mats Kärrman wrote:
> 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>

Picked to linux-ubifs.git, thanks!

Patch

diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c
index 6e025e0..cc1febd 100644
--- a/fs/ubifs/debug.c
+++ b/fs/ubifs/debug.c
@@ -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");