xref: /OK3568_Linux_fs/kernel/fs/hfs/sysdep.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *  linux/fs/hfs/sysdep.c
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 1996  Paul H. Hargrove
5*4882a593Smuzhiyun  * (C) 2003 Ardis Technologies <roman@ardistech.com>
6*4882a593Smuzhiyun  * This file may be distributed under the terms of the GNU General Public License.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * This file contains the code to do various system dependent things.
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/namei.h>
12*4882a593Smuzhiyun #include "hfs_fs.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* dentry case-handling: just lowercase everything */
15*4882a593Smuzhiyun 
hfs_revalidate_dentry(struct dentry * dentry,unsigned int flags)16*4882a593Smuzhiyun static int hfs_revalidate_dentry(struct dentry *dentry, unsigned int flags)
17*4882a593Smuzhiyun {
18*4882a593Smuzhiyun 	struct inode *inode;
19*4882a593Smuzhiyun 	int diff;
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 	if (flags & LOOKUP_RCU)
22*4882a593Smuzhiyun 		return -ECHILD;
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 	inode = d_inode(dentry);
25*4882a593Smuzhiyun 	if(!inode)
26*4882a593Smuzhiyun 		return 1;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	/* fix up inode on a timezone change */
29*4882a593Smuzhiyun 	diff = sys_tz.tz_minuteswest * 60 - HFS_I(inode)->tz_secondswest;
30*4882a593Smuzhiyun 	if (diff) {
31*4882a593Smuzhiyun 		inode->i_ctime.tv_sec += diff;
32*4882a593Smuzhiyun 		inode->i_atime.tv_sec += diff;
33*4882a593Smuzhiyun 		inode->i_mtime.tv_sec += diff;
34*4882a593Smuzhiyun 		HFS_I(inode)->tz_secondswest += diff;
35*4882a593Smuzhiyun 	}
36*4882a593Smuzhiyun 	return 1;
37*4882a593Smuzhiyun }
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun const struct dentry_operations hfs_dentry_operations =
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun 	.d_revalidate	= hfs_revalidate_dentry,
42*4882a593Smuzhiyun 	.d_hash		= hfs_hash_dentry,
43*4882a593Smuzhiyun 	.d_compare	= hfs_compare_dentry,
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun 
46