Skip to content
  • Alyssa Ross's avatar
    Return required size when encode_fh size too small · c074a7de
    Alyssa Ross authored
    
    
    Quoting <linux/exportfs.h>:
    
    > encode_fh() should return the fileid_type on success and on error
    > returns 255 (if the space needed to encode fh is greater than
    > @max_len*4 bytes). On error @max_len contains the minimum size (in 4
    > byte unit) needed to encode the file handle.
    
    ZFS was not setting max_len in the case where the handle was too
    small.  As a result of this, the `t_name_to_handle_at.c' example in
    name_to_handle_at(2) did not work on ZFS.
    
    zfsctl_fid() will itself set max_len if called with a fid that is too
    small, so if we give zfs_fid() that behavior as well, the fix is quite
    easy: if the handle is too small, just use a zero-size fid instead of
    the handle.
    
    Tested by running t_name_to_handle_at on a normal file, a directory, a
    .zfs directory, and a snapshot.
    
    Thanks-to: Puck Meerburg <puck@puckipedia.com>
    Reviewed-by: default avatarBrian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: default avatarTony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: default avatarAlyssa Ross <hi@alyssa.is>
    Closes #11995 
    c074a7de