cregit-Linux how code gets into the kernel

Release 4.10 fs/f2fs/hash.c

Directory: fs/f2fs
/*
 * fs/f2fs/hash.c
 *
 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
 *             http://www.samsung.com/
 *
 * Portions of this code from linux/fs/ext3/hash.c
 *
 * Copyright (C) 2002 by Theodore Ts'o
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/f2fs_fs.h>
#include <linux/cryptohash.h>
#include <linux/pagemap.h>

#include "f2fs.h"

/*
 * Hashing code copied from ext3
 */

#define DELTA 0x9E3779B9


static void TEA_transform(unsigned int buf[4], unsigned int const in[]) { __u32 sum = 0; __u32 b0 = buf[0], b1 = buf[1]; __u32 a = in[0], b = in[1], c = in[2], d = in[3]; int n = 16; do { sum += DELTA; b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b); b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d); } while (--n); buf[0] += b0; buf[1] += b1; }

Contributors

PersonTokensPropCommitsCommitProp
jaegeuk kimjaegeuk kim156100.00%1100.00%
Total156100.00%1100.00%


static void str2hashbuf(const unsigned char *msg, size_t len, unsigned int *buf, int num) { unsigned pad, val; int i; pad = (__u32)len | ((__u32)len << 8); pad |= pad << 16; val = pad; if (len > num * 4) len = num * 4; for (i = 0; i < len; i++) { if ((i % 4) == 0) val = pad; val = msg[i] + (val << 8); if ((i % 4) == 3) { *buf++ = val; val = pad; num--; } } if (--num >= 0) *buf++ = val; while (--num >= 0) *buf++ = pad; }

Contributors

PersonTokensPropCommitsCommitProp
jaegeuk kimjaegeuk kim16399.39%266.67%
leon romanovskyleon romanovsky10.61%133.33%
Total164100.00%3100.00%


f2fs_hash_t f2fs_dentry_hash(const struct qstr *name_info) { __u32 hash; f2fs_hash_t f2fs_hash; const unsigned char *p; __u32 in[8], buf[4]; const unsigned char *name = name_info->name; size_t len = name_info->len; if (is_dot_dotdot(name_info)) return 0; /* Initialize the default seed for the hash checksum functions */ buf[0] = 0x67452301; buf[1] = 0xefcdab89; buf[2] = 0x98badcfe; buf[3] = 0x10325476; p = name; while (1) { str2hashbuf(p, len, in, 4); TEA_transform(buf, in); p += 16; if (len <= 16) break; len -= 16; } hash = buf[0]; f2fs_hash = cpu_to_le32(hash & ~F2FS_HASH_COL_BIT); return f2fs_hash; }

Contributors

PersonTokensPropCommitsCommitProp
jaegeuk kimjaegeuk kim11675.82%457.14%
gu zhenggu zheng1912.42%114.29%
leon romanovskyleon romanovsky127.84%114.29%
namjae jeonnamjae jeon63.92%114.29%
Total153100.00%7100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
jaegeuk kimjaegeuk kim45992.35%562.50%
gu zhenggu zheng193.82%112.50%
leon romanovskyleon romanovsky132.62%112.50%
namjae jeonnamjae jeon61.21%112.50%
Total497100.00%8100.00%
Directory: fs/f2fs
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.