[pnfs] [PATCH 05/16] nfs41: limit the number of new session retrys

William A. (Andy) Adamson androsadamson at gmail.com
Wed Jul 16 14:05:17 EDT 2008


On Wed, Jul 16, 2008 at 1:15 PM, J. Bruce Fields <bfields at fieldses.org> wrote:
> On Wed, Jul 16, 2008 at 12:29:54PM +0300, Benny Halevy wrote:
>> From: Andy Adamson <andros at netapp.com>
>>
>> Signed-off-by: Andy Adamson<andros at netapp.com>
>> Signed-off-by: Benny Halevy <bhalevy at panasas.com>
>> ---
>>  fs/nfs/nfs4_fs.h                       |    3 +++
>>  fs/nfs/nfs4proc.c                      |    3 +++
>>  include/linux/nfs41_session_recovery.h |    3 +++
>>  3 files changed, 9 insertions(+), 0 deletions(-)
>>
>> diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
>> index 81a418d..065de35 100644
>> --- a/fs/nfs/nfs4_fs.h
>> +++ b/fs/nfs/nfs4_fs.h
>> @@ -157,6 +157,9 @@ struct nfs4_state {
>>  struct nfs4_exception {
>>       long timeout;
>>       int retry;
>> +#ifdef CONFIG_NFS_V4_1
>> +     int num_tries;
>> +#endif /* CONFIG_NFS_V4_1 */
>>  };
>>
>>  struct nfs4_state_recovery_ops {
>> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
>> index 0e18ed5..4db0b13 100644
>> --- a/fs/nfs/nfs4proc.c
>> +++ b/fs/nfs/nfs4proc.c
>> @@ -3370,8 +3370,11 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
>>               case -NFS4ERR_RETRY_UNCACHED_REP:
>>               case -NFS4ERR_TOO_MANY_OPS:
>>               case -NFS4ERR_OP_NOT_IN_SESSION:
>> +                     if (exception->_trienums  > NFS41_MAX_SESSION_RECOVER)
>> +                             break;
>
> Out of curiosity--in one situations can you get into this loop?

This code  - commit 0e267306c62ecefe05181f07518dfc30d72e1105 - should
be removed.

The loop occurred when we didn't handle the NFS4ERR_STALE_CLIENTID
from create session - so the server was telling us that the clientid
needed to be reset but we kept on using it.

--->Andy
>
> --b.
>
>>                       ret = nfs41_new_session(server);
>>                       if (!ret) {
>> +                             exception->num_tries++;
>>                               exception->retry = 1;
>>                               break;
>>                       }
>> diff --git a/include/linux/nfs41_session_recovery.h b/include/linux/nfs41_session_recovery.h
>> index 773dab7..d58db55 100644
>> --- a/include/linux/nfs41_session_recovery.h
>> +++ b/include/linux/nfs41_session_recovery.h
>> @@ -11,6 +11,9 @@
>>
>>  #if defined(CONFIG_NFS_V4_1)
>>
>> +/* How many new sessions do we try upon error? */
>> +#define NFS41_MAX_SESSION_RECOVER            4
>> +
>>  /*
>>   * Session state bits
>>   */
>> --
>> 1.5.6.3
>>
>> _______________________________________________
>> pNFS mailing list
>> pNFS at linux-nfs.org
>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
>


More information about the pNFS mailing list