cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dentry.c (1465B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *  linux/fs/hpfs/dentry.c
      4 *
      5 *  Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999
      6 *
      7 *  dcache operations
      8 */
      9
     10#include "hpfs_fn.h"
     11
     12/*
     13 * Note: the dentry argument is the parent dentry.
     14 */
     15
     16static int hpfs_hash_dentry(const struct dentry *dentry, struct qstr *qstr)
     17{
     18	unsigned long	 hash;
     19	int		 i;
     20	unsigned l = qstr->len;
     21
     22	if (l == 1) if (qstr->name[0]=='.') goto x;
     23	if (l == 2) if (qstr->name[0]=='.' || qstr->name[1]=='.') goto x;
     24	hpfs_adjust_length(qstr->name, &l);
     25	/*if (hpfs_chk_name(qstr->name,&l))*/
     26		/*return -ENAMETOOLONG;*/
     27		/*return -ENOENT;*/
     28	x:
     29
     30	hash = init_name_hash(dentry);
     31	for (i = 0; i < l; i++)
     32		hash = partial_name_hash(hpfs_upcase(hpfs_sb(dentry->d_sb)->sb_cp_table,qstr->name[i]), hash);
     33	qstr->hash = end_name_hash(hash);
     34
     35	return 0;
     36}
     37
     38static int hpfs_compare_dentry(const struct dentry *dentry,
     39		unsigned int len, const char *str, const struct qstr *name)
     40{
     41	unsigned al = len;
     42	unsigned bl = name->len;
     43
     44	hpfs_adjust_length(str, &al);
     45	/*hpfs_adjust_length(b->name, &bl);*/
     46
     47	/*
     48	 * 'str' is the nane of an already existing dentry, so the name
     49	 * must be valid. 'name' must be validated first.
     50	 */
     51
     52	if (hpfs_chk_name(name->name, &bl))
     53		return 1;
     54	if (hpfs_compare_names(dentry->d_sb, str, al, name->name, bl, 0))
     55		return 1;
     56	return 0;
     57}
     58
     59const struct dentry_operations hpfs_dentry_operations = {
     60	.d_hash		= hpfs_hash_dentry,
     61	.d_compare	= hpfs_compare_dentry,
     62};