1. 24 Oct, 2010 19 commits
  2. 23 Oct, 2010 18 commits
  3. 19 Oct, 2010 3 commits
    • Trond Myklebust's avatar
      NFSv4: Don't call nfs4_reclaim_complete() on receiving NFS4ERR_STALE_CLIENTID · 6eaa6149
      Trond Myklebust authored
      If the server sends us an NFS4ERR_STALE_CLIENTID while the state management
      thread is busy reclaiming state, we do want to treat all state that wasn't
      reclaimed before the STALE_CLIENTID as if a network partition occurred (see
      the edge conditions described in RFC3530 and RFC5661).
      What we do not want to do is to send an nfs4_reclaim_complete(), since we
      haven't yet even started reclaiming state after the server rebooted.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org
      6eaa6149
    • Trond Myklebust's avatar
      NFSv4: Don't call nfs4_state_mark_reclaim_reboot() from error handlers · ae1007d3
      Trond Myklebust authored
      In the case of a server reboot, the state recovery thread starts by calling
      nfs4_state_end_reclaim_reboot() in order to avoid edge conditions when
      the server reboots while the client is in the middle of recovery.
      
      However, if the client has already marked the nfs4_state as requiring
      reboot recovery, then the above behaviour will cause the recovery thread to
      treat the open as if it was part of such an edge condition: the open will
      be recovered as if it was part of a lease expiration (and all the locks
      will be lost).
      Fix is to remove the call to nfs4_state_mark_reclaim_reboot from
      nfs4_async_handle_error(), and nfs4_handle_exception(). Instead we leave it
      to the recovery thread to do this for us.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org
      ae1007d3
    • Trond Myklebust's avatar
      NFSv4: Fix open recovery · b0ed9dbc
      Trond Myklebust authored
      NFSv4 open recovery is currently broken: since we do not clear the
      state->flags states before attempting recovery, we end up with the
      'can_open_cached()' function triggering. This again leads to no OPEN call
      being put on the wire.
      Reported-by: default avatarSachin Prabhu <sprabhu@redhat.com>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org
      b0ed9dbc