On 11/18/2010 12:09 AM, Jeff Layton wrote:
> On Wed, 17 Nov 2010 23:53:34 +0530
> Suresh Jayaraman <[email protected]> wrote:
> 
>> Currently, the attribute cache timeout for CIFS is hardcoded to 1 second. 
>> This
>> means that the client might have to issue a QPATHINFO/QFILEINFO call every 1
>> second to verify if something has changes, which seems too expensive. On the
>> other hand, if the timeout is hardcoded to a higher value, workloads that
>> expect strict cache coherency might see unexpected results.
>>
>> Making attribute cache timeout as a tunable will allow us to make a tradeoff
>> between performance and cache metadata correctness depending on the
>> application/workload needs.
>>
>> Add 'actimeo' tunable that can be used to tune the attribute cache timeout.
>> The default timeout is set to 1 second.
>>
>> Also, display actimeo option value in /proc/mounts.
>>
>> Cc: Jeff Layton <[email protected]>
>> Signed-off-by: Suresh Jayaraman <[email protected]>
>> ---
>>  fs/cifs/cifs_fs_sb.h |    1 +
>>  fs/cifs/cifsfs.c     |    1 +
>>  fs/cifs/cifsglob.h   |    5 +++++
>>  fs/cifs/connect.c    |   10 ++++++++++
>>  fs/cifs/inode.c      |    6 +++---
>>  5 files changed, 20 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
>> index ff7d299..f30700d 100644
>> --- a/fs/cifs/inode.c
>> +++ b/fs/cifs/inode.c
>> @@ -1648,6 +1648,7 @@ static bool
>>  cifs_inode_needs_reval(struct inode *inode)
>>  {
>>      struct cifsInodeInfo *cifs_i = CIFS_I(inode);
>> +    struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
>>  
>>      if (cifs_i->clientCanCacheRead)
>>              return false;
>> @@ -1658,12 +1659,11 @@ cifs_inode_needs_reval(struct inode *inode)
>>      if (cifs_i->time == 0)
>>              return true;
>>  
>> -    /* FIXME: the actimeo should be tunable */
>> -    if (time_after_eq(jiffies, cifs_i->time + HZ))
>> +    if (time_after_eq(jiffies, cifs_i->time + (cifs_sb->actimeo * HZ)))
> 
>       Problem:
> 
>       Suppose (cifs_i->time + (cifs_sb->actimeo * HZ)) carries you
>       past two sign bit changes. At that point, it may look like
>       the resulting time is in the past, not the future.

Good catch.

>       You actually do need to impose a limit here. I suggest looking
>       very closely at time_before/time_after macros. It'll also be
>       easier to deal storing actimeo in terms of jiffies instead of
>       seconds.

>       Finally, this value needs to be displayed in /proc/mounts.
> 

Did you mean displaying values in jiffies in /proc/mounts? Wouldn't it
be confusing for users to see such a higher numbers (usually) when they
had used a simple 2 digit number for e.g. during mount?



-- 
Suresh Jayaraman
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to