• Andy Adamson's avatar
    NFS filelayout:call GETDEVICEINFO after pnfs_layout_process completes · 8d40b0f1
    Andy Adamson authored
    Fix a filelayout GETDEVICEINFO call hang triggered from the LAYOUTGET
    pnfs_layout_process where the GETDEVICEINFO call is waiting for a
    session slot, and the LAYOUGET call is waiting for pnfs_layout_process
    to complete before freeing the slot GETDEVICEINFO is waiting for..
    
    This occurs in testing against the pynfs pNFS server where the
    the on-wire reply highest_slotid and slot id are zero, and the
    target high slot id is 8 (negotiated in CREATE_SESSION).
    
    The internal fore channel slot table max_slotid, the maximum allowed
    table slotid value, has been reduced via nfs41_set_max_slotid_locked
     from 8 to 1.  Thus there is one slot (slotid 0) available for use but
    it has not been freed by LAYOUTGET  proir to the GETDEVICEINFO request.
    
    In order to ensure that layoutrecall callbacks are processed in the
    correct order, nfs4_proc_layoutget processing needs to be finished
    e.g. pnfs_layout_process) before giving up the slot that identifies
    the layoutget (see referring_call_exists).
    
    Move the filelayout_check_layout nfs4_find_get_device call outside of
    the pnfs_layout_process call tree.
    Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    8d40b0f1
filelayout.c 33 KB