CIFS: Force reval dentry if LOOKUP_REVAL flag is set
Mark inode for force revalidation if LOOKUP_REVAL flag is set. This tells the client to actually send a QueryInfo request to the server to obtain the latest metadata in case a directory or a file were changed remotely. Only do that if the client doesn't have a lease for the file to avoid unneeded round trips to the server. Cc: <stable@vger.kernel.org> Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
c82e5ac7fe
commit
0b3d0ef984
|
@ -738,10 +738,16 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
||||||
static int
|
static int
|
||||||
cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
|
cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
|
||||||
{
|
{
|
||||||
|
struct inode *inode;
|
||||||
|
|
||||||
if (flags & LOOKUP_RCU)
|
if (flags & LOOKUP_RCU)
|
||||||
return -ECHILD;
|
return -ECHILD;
|
||||||
|
|
||||||
if (d_really_is_positive(direntry)) {
|
if (d_really_is_positive(direntry)) {
|
||||||
|
inode = d_inode(direntry);
|
||||||
|
if ((flags & LOOKUP_REVAL) && !CIFS_CACHE_READ(CIFS_I(inode)))
|
||||||
|
CIFS_I(inode)->time = 0; /* force reval */
|
||||||
|
|
||||||
if (cifs_revalidate_dentry(direntry))
|
if (cifs_revalidate_dentry(direntry))
|
||||||
return 0;
|
return 0;
|
||||||
else {
|
else {
|
||||||
|
@ -752,7 +758,7 @@ cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
|
||||||
* attributes will have been updated by
|
* attributes will have been updated by
|
||||||
* cifs_revalidate_dentry().
|
* cifs_revalidate_dentry().
|
||||||
*/
|
*/
|
||||||
if (IS_AUTOMOUNT(d_inode(direntry)) &&
|
if (IS_AUTOMOUNT(inode) &&
|
||||||
!(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
|
!(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
|
||||||
spin_lock(&direntry->d_lock);
|
spin_lock(&direntry->d_lock);
|
||||||
direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
|
direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
|
||||||
|
|
Loading…
Reference in New Issue