162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci *  linux/fs/hfs/sysdep.c
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 1996  Paul H. Hargrove
562306a36Sopenharmony_ci * (C) 2003 Ardis Technologies <roman@ardistech.com>
662306a36Sopenharmony_ci * This file may be distributed under the terms of the GNU General Public License.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * This file contains the code to do various system dependent things.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/namei.h>
1262306a36Sopenharmony_ci#include "hfs_fs.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* dentry case-handling: just lowercase everything */
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistatic int hfs_revalidate_dentry(struct dentry *dentry, unsigned int flags)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	struct inode *inode;
1962306a36Sopenharmony_ci	int diff;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	if (flags & LOOKUP_RCU)
2262306a36Sopenharmony_ci		return -ECHILD;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	inode = d_inode(dentry);
2562306a36Sopenharmony_ci	if(!inode)
2662306a36Sopenharmony_ci		return 1;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	/* fix up inode on a timezone change */
2962306a36Sopenharmony_ci	diff = sys_tz.tz_minuteswest * 60 - HFS_I(inode)->tz_secondswest;
3062306a36Sopenharmony_ci	if (diff) {
3162306a36Sopenharmony_ci		struct timespec64 ctime = inode_get_ctime(inode);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci		inode_set_ctime(inode, ctime.tv_sec + diff, ctime.tv_nsec);
3462306a36Sopenharmony_ci		inode->i_atime.tv_sec += diff;
3562306a36Sopenharmony_ci		inode->i_mtime.tv_sec += diff;
3662306a36Sopenharmony_ci		HFS_I(inode)->tz_secondswest += diff;
3762306a36Sopenharmony_ci	}
3862306a36Sopenharmony_ci	return 1;
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciconst struct dentry_operations hfs_dentry_operations =
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	.d_revalidate	= hfs_revalidate_dentry,
4462306a36Sopenharmony_ci	.d_hash		= hfs_hash_dentry,
4562306a36Sopenharmony_ci	.d_compare	= hfs_compare_dentry,
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
48