HomeFreeBSD

Return required size when encode_fh size too small

Description

Return required size when encode_fh size too small

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: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Alyssa Ross <hi@alyssa.is>
Closes #11995

Details

Provenance
Alyssa Ross <hi@alyssa.is>Authored on May 7 2021, 10:08 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on May 10 2021, 7:13 PM
Parents
rG0db64e903643: Simplify/fix dnode_move() for dn_zfetch
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rGf15ec889a9b5: Return required size when encode_fh size too small (authored by Alyssa Ross <hi@alyssa.is>).May 10 2021, 7:13 PM