^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 1) /*
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 2) * linux/fs/hfs/sysdep.c
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 3) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 4) * Copyright (C) 1996 Paul H. Hargrove
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 5) * (C) 2003 Ardis Technologies <roman@ardistech.com>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 6) * This file may be distributed under the terms of the GNU General Public License.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 7) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 8) * This file contains the code to do various system dependent things.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 9) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 10)
34286d6662308 (Nicholas Piggin 2011-01-07 17:49:57 +1100 11) #include <linux/namei.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 12) #include "hfs_fs.h"
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 13)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 14) /* dentry case-handling: just lowercase everything */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 15)
0b728e1911cbe (Al Viro 2012-06-10 16:03:43 -0400 16) static int hfs_revalidate_dentry(struct dentry *dentry, unsigned int flags)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 17) {
34286d6662308 (Nicholas Piggin 2011-01-07 17:49:57 +1100 18) struct inode *inode;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 19) int diff;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 20)
0b728e1911cbe (Al Viro 2012-06-10 16:03:43 -0400 21) if (flags & LOOKUP_RCU)
34286d6662308 (Nicholas Piggin 2011-01-07 17:49:57 +1100 22) return -ECHILD;
34286d6662308 (Nicholas Piggin 2011-01-07 17:49:57 +1100 23)
2b0143b5c986b (David Howells 2015-03-17 22:25:59 +0000 24) inode = d_inode(dentry);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 25) if(!inode)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 26) return 1;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 27)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 28) /* fix up inode on a timezone change */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 29) diff = sys_tz.tz_minuteswest * 60 - HFS_I(inode)->tz_secondswest;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 30) if (diff) {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 31) inode->i_ctime.tv_sec += diff;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 32) inode->i_atime.tv_sec += diff;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 33) inode->i_mtime.tv_sec += diff;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 34) HFS_I(inode)->tz_secondswest += diff;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 35) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 36) return 1;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 37) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 38)
e16404ed0f3f3 (Al Viro 2009-02-20 05:55:13 +0000 39) const struct dentry_operations hfs_dentry_operations =
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 40) {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 41) .d_revalidate = hfs_revalidate_dentry,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 42) .d_hash = hfs_hash_dentry,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 43) .d_compare = hfs_compare_dentry,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 44) };
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 45)