After running several zfs promote and zfs destroy commands, the output of df/mount incorrectly list zvol name for / and /usr UFS filesystems. Below is the output of zfs list and df to compare. sys/zlib_BBD_CTF@starting_bxe prefixes to these UFS filesystems are incorrect. I didn't see any functionality issues with these although I wasn't comfortable. After rebooting, the output of df and mount became correct. % zfs list NAME USED AVAIL REFER MOUNTPOINT sys 15.6G 7.12G 262K /mnt/sys sys/local 4.39G 7.12G 2.20G /usr/local sys/obj 6.43G 7.12G 6.43G /usr/obj sys/ports 309M 7.12G 309M /usr/ports sys/ports-build 16.5M 7.12G 16.5M /ports sys/src-git-zlib 2.96G 7.12G 1.51G /usr/obj/freebsd sys/src2 742M 7.12G 742M /usr/src sys/zlib-dual-git 77.2M 7.12G 1.76G /mnt/sys/zlib-dual-git sys/zlib_BBD_CTF 729M 7.12G 729M /usr/obj/zlib % df -h Filesystem Size Used Avail Capacity Mounted on sys/zlib_BBD_CTF@starting_bxe/dev/ada0s1a 989M 779M 131M 86% / devfs 1.0K 1.0K 0B 100% /dev sys/zlib_BBD_CTF@starting_bxe/dev/ada0s1d 6.8G 2.6G 3.7G 41% /usr tmpfs 2.0G 28K 2.0G 0% /tmp tmpfs 2.0G 4.0K 2.0G 0% /usr/tmp sys 7.1G 262K 7.1G 0% /mnt/sys sys/obj 14G 6.4G 7.1G 47% /usr/obj sys/ports-build 7.1G 16M 7.1G 0% /ports sys/src2 7.8G 742M 7.1G 9% /usr/src sys/local 9.3G 2.2G 7.1G 24% /usr/local sys/ports 7.4G 309M 7.1G 4% /usr/ports sys/zlib_BBD_CTF 7.8G 729M 7.1G 9% /usr/obj/zlib sys/zlib-dual-git 8.9G 1.8G 7.1G 20% /mnt/sys/zlib-dual-git sys/src-git-zlib 8.6G 1.5G 7.1G 18% /usr/obj/freebsd
The code leading up to https://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c?view=markup#l3128 looks suspicious to me. Unless I'm misreading it, oldname is allocated but never filled with a name, so if the first byte is null then it will rename all mounts whose f_mntfromname starts with /.
(In reply to martin from comment #1) Good catch! Comparing dsl_dataset_promote_sync to dsl_dataset_rename_snapshot_sync_impl, it seems that the former is missing some snprintf-s.