Re: [PATCH] reiserfscore/hashes.c

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

 



On 11/06/2012 04:49 PM, Michael W. Bombardieri wrote:
Hi Edward,

I was browsing the git repository for reiserfs...
https://git.kernel.org/?p=linux/kernel/git/jeffm/reiserfsprogs.git;a=summary
This code is entirely new to me.

I have a patch which simplifies the yura_hash function in
reiserfscore/hashes.c. Here is what it does:

1. Remove temporary variable 'c'
2. Remove two nested loops which always set pow=1

I tested this using the following code on i386 and amd64.

int
main(void)
{
     char *test[] = {
         "a",
         "bb",
         "ccc",
         "dddd",
         "eeeee",
         "ffffff",
         "ggggggg",
         "red leather",
         "yellow leather",
         NULL
     };
     size_t n;
     int i;
     u32 x;

     for (i = 0; test[i] != NULL; i++) {
         n = strlen(test[i]);
         printf("input=\"%s\" len=%u ", test[i], n);
         x = yura_hash(test[i], (int)n);
         printf("hash=%lu\n", x);
     }
     return (0);
}

The results between my version and the original
yura_hash are identical:

input="a" len=1 hash=4084352
input="bb" len=2 hash=4148480
input="ccc" len=3 hash=4802688
input="dddd" len=4 hash=11472896
input="eeeee" len=5 hash=79455104
input="ffffff" len=6 hash=772077312
input="ggggggg" len=7 hash=3531332224
input="red leather" len=11 hash=959593472
input="yellow leather" len=14 hash=410631168

I'm not sure if the yura_hash function is used
heavily, or at all. I'm sending this patch in
case you are interested to take a look.


Hello Michael,

Your changes look OK to me.

TBH, I don't like the fact that the pow is set to 1 by such tricky ways in
the mentioned nested loops: it might indicate mistakes in the original
code.

Generally I think that this hash is not heavily used: everyone uses either
r5, or tea hash, so...
Aсked-by: Edward Shishkin <edward.shishkin@xxxxxxxxx>

Thanks,
Edward.
P.S. This is a git repository of Jeff Mahoney, the reiserfs maintainer, so
don't forget cc him ;)



- Michael


--- hashes.c	Tue Nov  6 23:21:09 2012
+++ hashes_new.c	Tue Nov  6 23:26:26 2012
@@ -175,37 +175,26 @@
u32 yura_hash (const signed char *msg, int len)
  {
-    int j, pow;
-    u32 a, c;
-    int i;
-
-    for (pow=1,i=1; i < len; i++) pow = pow * 10;
-
-    if (len == 1)
-	a = msg[0]-48;
-    else
-	a = (msg[0] - 48) * pow;
-
-    for (i=1; i < len; i++) {
-	c = msg[i] - 48;
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10;
-	a = a + c * pow;
-    }
-
-    for (; i < 40; i++) {
-	c = '0' - 48;
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10;
-	a = a + c * pow;
-    }
-
-    for (; i < 256; i++) {
-	c = i;
-	for (pow=1,j=i; j < len-1; j++) pow = pow * 10;
-	a = a + c * pow;
-    }
-
-    a = a << 7;
-    return a;
+	int i, j, pow;
+	u32 a;
+
+	a = msg[0] - 48;
+	if (len != 1) {
+		for (i = 1, pow = 1; i < len; i++)
+			pow *= 10;
+		a *= pow;
+	}
+	for (i = 1; i < len; i++) {
+		for (j = i, pow = 1; j < len - 1; j++)
+			pow *= 10;
+		a += pow * (msg[i] - 48);
+	}
+	for (; i < 40; i++)
+		a += '0' - 48;
+	for (; i < 256; i++)
+		a += i;
+	a <<= 7;
+	return a;
  }

--
To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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