static int cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) { if (nd && (nd->flags & LOOKUP_RCU)) return -ECHILD; if (direntry->d_inode) { if (cifs_revalidate_dentry(direntry)) return 0; else return 1; } /* * This may be nfsd (or something), anyway, we can't see the * intent of this. So, since this can be for creation, drop it. */ if (!nd) return 0; /* * Drop the negative dentry, in order to make sure to use the * case sensitive name which is specified by user if this is * for creation. */ if (nd->flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET)) return 0; if (time_after(jiffies, direntry->d_time + HZ) || !lookupCacheEnabled) return 0; return 1; }
static int cifs_d_revalidate(struct dentry *direntry, unsigned int flags) { if (flags & LOOKUP_RCU) return -ECHILD; if (direntry->d_inode) { if (cifs_revalidate_dentry(direntry)) return 0; else { /* * If the inode wasn't known to be a dfs entry when * the dentry was instantiated, such as when created * via ->readdir(), it needs to be set now since the * attributes will have been updated by * cifs_revalidate_dentry(). */ if (IS_AUTOMOUNT(direntry->d_inode) && !(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) { spin_lock(&direntry->d_lock); direntry->d_flags |= DCACHE_NEED_AUTOMOUNT; spin_unlock(&direntry->d_lock); } return 1; } } /* * This may be nfsd (or something), anyway, we can't see the * intent of this. So, since this can be for creation, drop it. */ if (!flags) return 0; /* * Drop the negative dentry, in order to make sure to use the * case sensitive name which is specified by user if this is * for creation. */ if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET)) return 0; if (time_after(jiffies, direntry->d_time + HZ) || !lookupCacheEnabled) return 0; return 1; }
static int cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) { int isValid = 1; if (direntry->d_inode) { if (cifs_revalidate_dentry(direntry)) return 0; } else { cFYI(1, "neg dentry 0x%p name = %s", direntry, direntry->d_name.name); if (time_after(jiffies, direntry->d_time + HZ) || !lookupCacheEnabled) { d_drop(direntry); isValid = 0; } } return isValid; }
static int cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) { if (nd && (nd->flags & LOOKUP_RCU)) return -ECHILD; if (direntry->d_inode) { if (cifs_revalidate_dentry(direntry)) return 0; else { /* * Forcibly invalidate automounting directory inodes * (remote DFS directories) so to have them * instantiated again for automount */ if (IS_AUTOMOUNT(direntry->d_inode)) return 0; return 1; } } /* * This may be nfsd (or something), anyway, we can't see the * intent of this. So, since this can be for creation, drop it. */ if (!nd) return 0; /* * Drop the negative dentry, in order to make sure to use the * case sensitive name which is specified by user if this is * for creation. */ if (nd->flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET)) return 0; if (time_after(jiffies, direntry->d_time + HZ) || !lookupCacheEnabled) return 0; return 1; }