2005-04-16 15:20:36 -07:00
/*
* linux / fs / hfs / sysdep . c
*
* Copyright ( C ) 1996 Paul H . Hargrove
* ( C ) 2003 Ardis Technologies < roman @ ardistech . com >
* This file may be distributed under the terms of the GNU General Public License .
*
* This file contains the code to do various system dependent things .
*/
2011-01-07 17:49:57 +11:00
# include <linux/namei.h>
2005-04-16 15:20:36 -07:00
# include "hfs_fs.h"
/* dentry case-handling: just lowercase everything */
2012-06-10 16:03:43 -04:00
static int hfs_revalidate_dentry ( struct dentry * dentry , unsigned int flags )
2005-04-16 15:20:36 -07:00
{
2011-01-07 17:49:57 +11:00
struct inode * inode ;
2005-04-16 15:20:36 -07:00
int diff ;
2012-06-10 16:03:43 -04:00
if ( flags & LOOKUP_RCU )
2011-01-07 17:49:57 +11:00
return - ECHILD ;
2015-03-17 22:25:59 +00:00
inode = d_inode ( dentry ) ;
2005-04-16 15:20:36 -07:00
if ( ! inode )
return 1 ;
/* fix up inode on a timezone change */
diff = sys_tz . tz_minuteswest * 60 - HFS_I ( inode ) - > tz_secondswest ;
if ( diff ) {
2023-10-04 14:52:26 -04:00
struct timespec64 ts = inode_get_ctime ( inode ) ;
2023-07-05 15:01:13 -04:00
2023-10-04 14:52:26 -04:00
inode_set_ctime ( inode , ts . tv_sec + diff , ts . tv_nsec ) ;
ts = inode_get_atime ( inode ) ;
inode_set_atime ( inode , ts . tv_sec + diff , ts . tv_nsec ) ;
ts = inode_get_mtime ( inode ) ;
inode_set_mtime ( inode , ts . tv_sec + diff , ts . tv_nsec ) ;
2005-04-16 15:20:36 -07:00
HFS_I ( inode ) - > tz_secondswest + = diff ;
}
return 1 ;
}
2009-02-20 05:55:13 +00:00
const struct dentry_operations hfs_dentry_operations =
2005-04-16 15:20:36 -07:00
{
. d_revalidate = hfs_revalidate_dentry ,
. d_hash = hfs_hash_dentry ,
. d_compare = hfs_compare_dentry ,
} ;