-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"zfs diff" fails with "Unable to determine path or stats for object ...: File exists" on encrypted filesystems #8931
Comments
@chungy I wasn't able to reproduce this issue using 0.8.1 on Fedora 30 using the reproducer you provided. Are you able to reproduce this consistently on Arch? $ zfs diff tank/temp/encr@alice
M /tank/temp/encr/
+ /tank/temp/encr/bob
+ /tank/temp/encr/bob/<xattrdir>
+ /tank/temp/encr/bob/<xattrdir>/security.selinux |
Yes, it happens consistently on Arch. |
While playing with zfs on Clear Linux, I tried the reproduction steps. Not reproduced.
|
Any chance this is another side effect of the slow path use without SIMD? 5.1.1 has the GPL_ONLY FPU export thing going... |
I believe I have been able to reproduce this on Debian with 0.8.1 installed from the Github repo. It seems to be related to the number of files in a snapshot. I discovered this after installing root@mlbry03:/home/hbarta# zfs create rpool/home/hbarta/test
root@mlbry03:/home/hbarta# chown hbarta.hbarta test
root@mlbry03:/home/hbarta# zfs snap rpool/home/hbarta/test@create hbarta@mlbry03:~/test$ for i in {1..100}; do for j in {1..100}; do echo $i $j > ${i}.${j}.txt; done; done
hbarta@mlbry03:~/test$ find .|wc -l
10001
hbarta@mlbry03:~/test$ root@mlbry03:/home/hbarta# zfs diff rpool/home/hbarta/test@create|wc -l
1
Unable to determine path or stats for object 3 in rpool/home/hbarta/test@zfs-diff-14831-00000001000ed5dd: File exists
root@mlbry03:/home/hbarta# This is on a Lenovo Y50 (I7 processor, 16GB RAM and 120GB cheap SATA SSD.) Install is per instructions at https://github.com/zfsonlinux/zfs/wiki/Debian-Buster-Encrypted-Root-on-ZFS, scripted using https://github.com/HankB/Linux_ZFS_Root/blob/master/Debian/install_Debian_to_ZFS_root.sh Edit.0: I was able to reproduce this on a Virtualbox VM as well. Linux mlbry03 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2 (2019-08-28) x86_64 GNU/Linux
hbarta@mlbry03:~/test$ /sbin/modinfo zfs | grep version
version: 0.8.1-4
srcversion: FA9BDA7077DD9A40222C4B8
vermagic: 4.19.0-6-amd64 SMP mod_unload modversions
hbarta@mlbry03:~/test$
``` |
Trying to 'zfs diff' a snapshot with large dnodes will incorrectly try to access its interior slots when dnodesize > sizeof(dnode_phys_t). This is normally not an issue because the interior slots are zero-filled, which report_dnode() handles calling report_free_dnode_range(). However this is not the case for encrypted large dnodes or filesystem using many SA based xattrs where the extra data past the legacy dnode size boundary is interpreted as a dnode_phys_t. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Tom Caputi <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: loli10K <[email protected]> Closes #7678 Closes #8931 Closes #9343
Trying to 'zfs diff' a snapshot with large dnodes will incorrectly try to access its interior slots when dnodesize > sizeof(dnode_phys_t). This is normally not an issue because the interior slots are zero-filled, which report_dnode() handles calling report_free_dnode_range(). However this is not the case for encrypted large dnodes or filesystem using many SA based xattrs where the extra data past the legacy dnode size boundary is interpreted as a dnode_phys_t. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Tom Caputi <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: loli10K <[email protected]> Closes openzfs#7678 Closes openzfs#8931 Closes openzfs#9343
Trying to 'zfs diff' a snapshot with large dnodes will incorrectly try to access its interior slots when dnodesize > sizeof(dnode_phys_t). This is normally not an issue because the interior slots are zero-filled, which report_dnode() handles calling report_free_dnode_range(). However this is not the case for encrypted large dnodes or filesystem using many SA based xattrs where the extra data past the legacy dnode size boundary is interpreted as a dnode_phys_t. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Tom Caputi <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: loli10K <[email protected]> Closes openzfs#7678 Closes openzfs#8931 Closes openzfs#9343
Trying to 'zfs diff' a snapshot with large dnodes will incorrectly try to access its interior slots when dnodesize > sizeof(dnode_phys_t). This is normally not an issue because the interior slots are zero-filled, which report_dnode() handles calling report_free_dnode_range(). However this is not the case for encrypted large dnodes or filesystem using many SA based xattrs where the extra data past the legacy dnode size boundary is interpreted as a dnode_phys_t. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Tom Caputi <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: loli10K <[email protected]> Closes #7678 Closes #8931 Closes #9343
This is happening to me still
Its not encrypted (that i know of?), sorry just reread the title. not sure how do dig deeper here. |
System information
Describe the problem you're observing
When running against an encrypted dataset, the
zfs diff
command fails to complete its task, outputting a message at the end such as:Unable to determine path or stats for object $objid in $dataset: File exists
Describe how to reproduce the problem
Have an encrypted dataset, key loaded and mounted, with a snapshot and with data changed after the snapshot, run the
zfs diff
command against the snapshot.Example:
The text was updated successfully, but these errors were encountered: