From: Jeff Layton Date: Wed, 26 Mar 2014 14:24:23 +0000 (-0700) Subject: cifs: fix actimeo=0 corner case when cifs_i->time == jiffies X-Git-Tag: firefly_0821_release~176^2~3921^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a87c9ad956676d84d459739fc14ec5a3c3565717;p=firefly-linux-kernel-4.4.55.git cifs: fix actimeo=0 corner case when cifs_i->time == jiffies actimeo=0 is supposed to be a special case that ensures that inode attributes are always refetched from the server instead of trusting the cache. The cifs code however uses time_in_range() to determine whether the attributes have timed out. In the case where cifs_i->time equals jiffies, this leads to the cifs code not refetching the inode attributes when it should. Fix this by explicitly testing for actimeo=0, and handling it as a special case. Reported-and-tested-by: Tetsuo Handa Signed-off-by: Jeff Layton Signed-off-by: Steve French --- diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index aadc2b68678b..a22d667f1069 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -1737,6 +1737,9 @@ cifs_inode_needs_reval(struct inode *inode) if (cifs_i->time == 0) return true; + if (!cifs_sb->actimeo) + return true; + if (!time_in_range(jiffies, cifs_i->time, cifs_i->time + cifs_sb->actimeo)) return true;