/* * Directory operations for SnapFS filesystem */ #define DEBUG_SUBSYSTEM S_SNAP #include #include #include #include #include #include #include #include #include #include "snapfs_internal.h" /* called when a cache lookup succeeds */ /* XXX PJB: the intent here is to make sure that inodes which are currently primary inodes under .snap directories are dropped when they are COWED. It seems hard to me to get semantics that are equally good as for mounted snap_clone file systems, but we should try to get close */ static int currentfs_dentry_revalidate(struct dentry *de, int flag) { // struct inode *inode = de->d_inode; ENTRY; /* unless an ancestor is a .snap directory there is nothing to do */ #if 0 if ( !currentfs_is_under_dotsnap(dentry) ) { EXIT; return 1; } /* XXX PJB get this to work guys! */ if ( de->d_parent == "dotsnap inode" && inode_is_newer_than(find_time_by_name(de->d_parent->d_name.name))){ 1. drop this dentry 2. make sure the VFS does a new lookup 3. probably all you need to do is return 0; } #else RETURN(1); #endif } struct dentry_operations currentfs_dentry_ops = { d_revalidate: currentfs_dentry_revalidate };