int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) { int err = cifs_revalidate(dentry); if (!err) generic_fillattr(dentry->d_inode, stat); return err; }
int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) { int err = cifs_revalidate(dentry); if (!err) { generic_fillattr(dentry->d_inode, stat); stat->blksize = CIFS_MAX_MSGSIZE; } return err; }
static loff_t cifs_llseek(struct file *file, loff_t offset, int origin) { /* origin == SEEK_END => we must revalidate the cached file length */ if (origin == SEEK_END) { int retval; /* some applications poll for the file length in this strange way so we must seek to end on non-oplocked files by setting the revalidate time to zero */ CIFS_I(file->f_path.dentry->d_inode)->time = 0; retval = cifs_revalidate(file->f_path.dentry); if (retval < 0) return (loff_t)retval; } return generic_file_llseek_unlocked(file, offset, origin); }
static int cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) { int isValid = 1; if (direntry->d_inode) { if (cifs_revalidate(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) { int isValid = 1; /* lock_kernel(); *//* surely we do not want to lock the kernel for a whole network round trip which could take seconds */ if (direntry->d_inode) { if (cifs_revalidate(direntry)) { /* unlock_kernel(); */ return 0; } } else { cFYI(1, ("In cifs_d_revalidate with no inode but name = %s and dentry 0x%p", direntry->d_name.name, direntry)); } /* unlock_kernel(); */ return isValid; }