Fix Details
-----------
Problem report (GH Issue) upstream in ZFS on Linux:
https://github.com/zfsonlinux/zfs/issues/4816 ("Looping in zfs_zget()")
With very similar stack trace (syscall -> shrink ->
zfs_{inactive/rmnode/purgedir/zget})
https://github.com/zfsonlinux/zfs/issues/4816#issuecomment-229532796
Proposed patch in the Issue (not the right/final solution):
https://github.com/zfsonlinux/zfs/issues/4816#issuecomment-229537558
https://github.com/zfsonlinux/zfs/pull/4822 ("Allow zfs_purgedir() to
skip inodes undergoing eviction")
However, that proposed patch is not the right/final solution:
https://github.com/zfsonlinux/zfs/pull/4822#issuecomment-230938382
https://github.com/zfsonlinux/zfs/pull/4822#issuecomment-232208224
Instead, these proposed patches are actually the right/final solution:
https://github.com/zfsonlinux/zfs/pull/4827 ("xattr dir doesn't get
purged during iput")
The two patches are merged upstream:
https://github.com/zfsonlinux/zfs/pull/4827#issuecomment-232207013
1) ddae16a xattr dir doesn't get purged during ipu
2) 31b6111 Kill zp->z_xattr_parent to prevent pinning
Available in the 0.7.0 release:
$ git describe --contains ddae16a 31b6111
zfs-0.7.0-rc1~102
zfs-0.7.0-rc1~101
Thus Ubuntu only needs these patches on Xenial (zfs-linux < 0.7.0):
$ rmadison zfs-linux
zfs-linux | 0.6.5.6-0ubuntu8 | xenial/universe | source
zfs-linux | 0.6.5.6-0ubuntu27 | xenial-updates | source
zfs-linux | 0.7.5-1ubuntu15 | bionic | source
zfs-linux | 0.7.5-1ubuntu16.6 | bionic-updates | source
zfs-linux | 0.7.12-1ubuntu5 | disco | source
zfs-linux | 0.8.1-1ubuntu8 | eoan | source
There's a later commit that changes/"reverts" the
commit ddae16a ("xattr dir doesn't get purged during ipu"),
but it's not a bug fix, but rather a refactor/feature.
https://github.com/zfsonlinux/zfs/pull/4838
With commit dfbc86309fd8 (below).
The commit ids are not mentioned in further commits upstream.
$ git log --oneline --grep ddae16a ddae16a^..origin/master
dfbc86309fd8 Use native inode->i_nlink instead of znode->z_links
$ git log --oneline --grep 31b6111 ddae16a^..origin/master
$
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to zfs-linux in Ubuntu.
https://bugs.launchpad.net/bugs/1839521
Title:
Xenial: ZFS deadlock in shrinker path with xattrs
Status in zfs-linux package in Ubuntu:
Invalid
Status in zfs-linux source package in Xenial:
In Progress
Status in zfs-linux source package in Bionic:
Invalid
Status in zfs-linux source package in Disco:
Invalid
Status in zfs-linux source package in Eoan:
Invalid
Bug description:
[Impact]
* Xenial's ZFS can deadlock in the memory shrinker path
after removing files with extended attributes (xattr).
* Extended attributes are enabled by default, but are
_not_ used by default, which reduces the likelyhood.
* It's very difficult/rare to reproduce this problem,
due to file/xattr/remove/shrinker/lru order/timing
circumstances required. (weeks for a reporter user)
but a synthetic test-case has been found for tests.
[Test Case]
* A synthetic reproducer is available for this LP,
with a few steps to touch/setfattr/rm/drop_caches
plus a kernel module to massage the disposal list.
* In the original ZFS module:
the xattr dir inode is not purged immediately on
file removal, but possibly purged _two_ shrinker
invocations later. This allows for other thread
started before file remove to call zfs_zget() on
the xattr child inode and iput() it, so it makes
to the same disposal list as the xattr dir inode.
* In the modified ZFS module:
the xattr dir inode is purged immediately on file
removal not possibly later on shrinker invocation,
so the problem window above doesn't exist anymore.
[Regression Potential]
* Low. The patches are confined to extended attributes
in ZFS, specifically node removal/purge, and another
change how an xattr child inode tracks its xattr dir
(parent) inode, so that it can be purged immediately
on removal.
* The ZFS test-suite has been run on original/modified
zfs-dkms package/kernel modules, with no regressions.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1839521/+subscriptions
--
Mailing list: https://launchpad.net/~kernel-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~kernel-packages
More help : https://help.launchpad.net/ListHelp