• David Howells's avatar
    afs: Fix AFSFetchStatus decoder to provide OpenAFS compatibility · 684b0f68
    David Howells authored
    The OpenAFS server's RXAFS_InlineBulkStatus implementation has a bug
    whereby if an error occurs on one of the vnodes being queried, then the
    errorCode field is set correctly in the corresponding status, but the
    interfaceVersion field is left unset.
    
    Fix kAFS to deal with this by evaluating the AFSFetchStatus blob against
    the following cases when called from FS.InlineBulkStatus delivery:
    
     (1) If InterfaceVersion == 0 then:
    
         (a) If errorCode != 0 then it indicates the abort code for the
             corresponding vnode.
    
         (b) If errorCode == 0 then the status record is invalid.
    
     (2) If InterfaceVersion == 1 then:
    
         (a) If errorCode != 0 then it indicates the abort code for the
             corresponding vnode.
    
         (b) If errorCode == 0 then the status record is valid and can be
         	 parsed.
    
     (3) If InterfaceVersion is anything else then the status record is
         invalid.
    
    Fixes: dd9fbcb8 ("afs: Rearrange status mapping")
    Reported-by: default avatarJeffrey Altman <jaltman@auristor.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    684b0f68
fsclient.c 55.5 KB