2005-04-17 02:20:36 +04: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 09:49:57 +03:00
# include <linux/namei.h>
2005-04-17 02:20:36 +04:00
# include "hfs_fs.h"
/* dentry case-handling: just lowercase everything */
2012-06-11 00:03:43 +04:00
static int hfs_revalidate_dentry ( struct dentry * dentry , unsigned int flags )
2005-04-17 02:20:36 +04:00
{
2011-01-07 09:49:57 +03:00
struct inode * inode ;
2005-04-17 02:20:36 +04:00
int diff ;
2012-06-11 00:03:43 +04:00
if ( flags & LOOKUP_RCU )
2011-01-07 09:49:57 +03:00
return - ECHILD ;
2015-03-18 01:25:59 +03:00
inode = d_inode ( dentry ) ;
2005-04-17 02:20:36 +04: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 21:52:26 +03:00
struct timespec64 ts = inode_get_ctime ( inode ) ;
2023-07-05 22:01:13 +03:00
2023-10-04 21:52:26 +03: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-17 02:20:36 +04:00
HFS_I ( inode ) - > tz_secondswest + = diff ;
}
return 1 ;
}
2009-02-20 08:55:13 +03:00
const struct dentry_operations hfs_dentry_operations =
2005-04-17 02:20:36 +04:00
{
. d_revalidate = hfs_revalidate_dentry ,
. d_hash = hfs_hash_dentry ,
. d_compare = hfs_compare_dentry ,
} ;