Re: [PATCH] reiserfscore/hashes.c

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 11/6/12 2:47 PM, Edward Shishkin wrote:
> 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:

Hi Michael -

Can you send the patch directly to me (or the list) so I can just git
am it? It should have a subject like [PATCH] reiserfscore: clarify
yura_hash or something.

- -Jeff

>> 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


- -- 
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQIcBAEBAgAGBQJQpCtsAAoJEB57S2MheeWyonwP/iFfh06TBivRigIsKui1lEsR
Qu440GPB96WBr6TGSCcEgRb9GirVy0yPx/lNTmpyi2m27hn2RivMEgy6r8uVx+4K
S7+FRaZ7ysKhmrcX44KBsoIvvDqKIFaOpaTpGWlPK5kfYnRZJ47y0hSWyQgL1C2x
Bx2iiGo06wvUIv/tCSKcL95+wWHBYHbd7ouxZ3zZU4orrP40rtxjSxNJoa3PUrhE
gNUZfnksQjlYWu5voNbbyR2RXfx5DCZrbag/Wjkr0/VaFv+SDi1vWKaFuYHA4K60
VfsJdJ08xqkPRczCNE+KrqhobDM6hDDisnSek1fWQF3nOLnrF+Gz6FsvhZ2WKkrj
sLHP304B+Apcx1S8+exaq58Yap0k24WwCQ8brT6CobgSBcwNph0OhC7FdHVnmvtg
0VqGc6KVQMcWw6x7ktuXpN5zm7RilFDzdSCL2Np/a0ohsVKYB+LACmeMn01rOjrt
hMZ44Ac+b0WdomwCVvp38f7P2TBLckpglWwyUVwaK0fcPi0Tv5bznKC4wXYiMIVu
uuoDxHBLt1AFUoQB3ND4/PfCHHzThJreVpROd3U50lgJBkIRm6+E5PSUKyixZOjO
DRGqhaSHV8Hf4vs3x9I3VSQog94cBTwscg/cnCQZZ4KBNVSffA8DdC4f5AkSazZg
TZPsbMbSPKhaIICEmoJ7
=p/We
-----END PGP SIGNATURE-----
--
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