• Christoph Hellwig's avatar
    nfs4: fix stateid handling for the NFS v4.2 operations · 4bdf87eb
    Christoph Hellwig authored
    The newly added NFS v4.2 operations (ALLOCATE, DEALLOCATE, SEEK and CLONE)
    use a helper called nfs42_set_rw_stateid to select a stateid that is sent
    to the server.  But they don't set the inode and state fields in the
    nfs4_exception structure, and this don't partake in the stateid recovery
    protocol.  Because of this they will simply return errors insted of trying
    to recover a stateid when the server return a BAD_STATEID error.
    
    Additionally CLONE has the problem that it operates on two files and thus
    two stateids, and thus needs to call the exception handler twice to
    recover stateids.
    
    While we're at it stop grabbing an addititional reference to the open
    context in all these operations - having the file open guarantees that
    the open context won't go away.
    
    All this can be produces with the generic/168 and generic/170 tests in
    xfstests which stress the CLONE stateid handling.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    4bdf87eb
nfs42proc.c 10.2 KB