• David Howells's avatar
    afs: Handle better the server returning excess or short data · 6db3ac3c
    David Howells authored
    When an AFS server is given an FS.FetchData{,64} request to read data from
    a file, it is permitted by the protocol to return more or less than was
    requested.  kafs currently relies on the latter behaviour in readpage{,s}
    to handle a partial page at the end of the file (we just ask for a whole
    page and clear space beyond the short read).
    
    However, we don't handle all cases.  Add:
    
     (1) Handle excess data by discarding it rather than aborting.  Note that
         we use a common static buffer to discard into so that the decryption
         algorithm advances the PCBC state.
    
     (2) Handle a short read that affects more than just the last page.
    
    Note that if a read comes up unexpectedly short of long, it's possible that
    the server's copy of the file changed - in which case the data version
    number will have been incremented and the callback will have been broken -
    in which case all the pages currently attached to the inode will be zapped
    anyway at some point.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    6db3ac3c
file.c 12.2 KB