1. 22 Jul, 2009 37 commits
  2. 21 Jul, 2009 3 commits
    • Trond Myklebust's avatar
      NFSv4: Fix a problem whereby a buggy server can oops the kernel · d953126a
      Trond Myklebust authored
      We just had a case in which a buggy server occasionally returns the wrong
      attributes during an OPEN call. While the client does catch this sort of
      condition in nfs4_open_done(), and causes the nfs4_atomic_open() to return
      -EISDIR, the logic in nfs_atomic_lookup() is broken, since it causes a
      fallback to an ordinary lookup instead of just returning the error.
      
      When the buggy server then returns a regular file for the fallback lookup,
      the VFS allows the open, and bad things start to happen, since the open
      file doesn't have any associated NFSv4 state.
      
      The fix is firstly to return the EISDIR/ENOTDIR errors immediately, and
      secondly to ensure that we are always careful when dereferencing the
      nfs_open_context state pointer.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      d953126a
    • Trond Myklebust's avatar
      NFSv4: Fix an NFSv4 mount regression · fccba804
      Trond Myklebust authored
      Commit 008f55d0 (nfs41: recover lease in
      _nfs4_lookup_root) forces the state manager to always run on mount. This is
      a bug in the case of NFSv4.0, which doesn't require us to send a
      setclientid until we want to grab file state.
      
      In any case, this is completely the wrong place to be doing state
      management. Moving that code into nfs4_init_session...
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      fccba804
    • Trond Myklebust's avatar
      NFSv4: Fix an Oops in nfs4_free_lock_state · b64aec8d
      Trond Myklebust authored
      The oops http://www.kerneloops.org/raw.php?rawid=537858&msgid= appears to
      be due to the nfs4_lock_state->ls_state field being uninitialised. This
      happens if the call to nfs4_free_lock_state() is triggered at the end of
      nfs4_get_lock_state().
      
      The fix is to move the initialisation of ls_state into the allocator.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      b64aec8d