1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-18 13:55:44 +02:00

README: update list of currently known kernel bugs

Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
Zygo Blaxell 2017-09-16 16:30:50 -04:00
parent 9f8bdcfd8c
commit b631986218

View File

@ -227,12 +227,16 @@ Bug fixes (sometimes included in older LTS kernels):
* 4.5: hang in the `INO_PATHS` ioctl used by Bees. * 4.5: hang in the `INO_PATHS` ioctl used by Bees.
* 4.5: use-after-free in the `FILE_EXTENT_SAME` ioctl used by Bees. * 4.5: use-after-free in the `FILE_EXTENT_SAME` ioctl used by Bees.
* 4.6: lost inodes after a rename, crash, and log tree replay
(triggered by the fsync() while writing `beescrawl.dat`).
* 4.7: *slow backref* bug no longer triggers a softlockup panic. It still * 4.7: *slow backref* bug no longer triggers a softlockup panic. It still
too long to resolve a block address to a root/inode/offset triple. too long to resolve a block address to a root/inode/offset triple.
* 4.10-rc1: reduced CPU time cost of the LOGICAL_INO ioctl and dedup * 4.10: reduced CPU time cost of the LOGICAL_INO ioctl and dedup
backref processing in general. backref processing in general.
* 4.13 integration trees: 053582a7d423 btrfs: add cond_resched() calls
when resolving backrefs
Unfixed kernel bugs (as of 4.5.7) with workarounds in Bees: Unfixed kernel bugs (as of 4.11.9) with workarounds in Bees:
* *slow backrefs* (aka toxic extents): If the number of references to a * *slow backrefs* (aka toxic extents): If the number of references to a
single shared extent within a single file grows above a few thousand, single shared extent within a single file grows above a few thousand,
@ -253,6 +257,19 @@ Unfixed kernel bugs (as of 4.5.7) with workarounds in Bees:
blocks or filesystems with many snapshots (although this limit is blocks or filesystems with many snapshots (although this limit is
far greater than the effective limit imposed by the *slow backref* bug). far greater than the effective limit imposed by the *slow backref* bug).
* `LOGICAL_INO` on compressed extents returns a list of root/inode/offset
tuples matching the extent bytenr of its argument. On uncompressed
extents, any r/i/o tuple whose extent offset does not match the
argument's extent offset is discarded, i.e. only the single 4K block
matching the argument is returned, so a complete map of the extent
references requires calling `LOGICAL_INO` for every single block of
the extent. This is undesirable behavior for Bees, which wants a
list of all extent refs referencing a data extent (i.e. Bees wants
the compressed-extent behavior in all cases).
* `LOGICAL_INO` is only called from one thread at any time per process.
This means at most one core is irretrievably stuck in this ioctl.
* `FILE_EXTENT_SAME` is arbitrarily limited to 16MB. This is less than * `FILE_EXTENT_SAME` is arbitrarily limited to 16MB. This is less than
128MB which is the maximum extent size that can be created by defrag 128MB which is the maximum extent size that can be created by defrag
or prealloc. Bees avoids feedback loops this can generate while or prealloc. Bees avoids feedback loops this can generate while
@ -265,22 +282,9 @@ Unfixed kernel bugs (as of 4.5.7) with workarounds in Bees:
to a temporary file and using the `FILE_EXTENT_SAME` ioctl to replace to a temporary file and using the `FILE_EXTENT_SAME` ioctl to replace
precisely the specified range of offending fragmented blocks. precisely the specified range of offending fragmented blocks.
* When writing BeesStringFile, a crash can cause the directory entry
`beescrawl.dat.tmp` to exist without a corresponding inode.
This directory entry cannot be renamed or removed; however, it does
not prevent the creation of a second directory entry with the same
name that functions normally, so it doesn't prevent Bees operation.
The orphan directory entry can be removed by deleting its subvol,
so place BEESHOME on a separate subvol so you can delete these orphan
directory entries when they occur (or use btrfs zero-log before mounting
the filesystem after a crash). Alternatively, place BEESHOME on a
non-btrfs filesystem.
* If the `fsync()` in `BeesTempFile::make_copy` is removed, the filesystem * If the `fsync()` in `BeesTempFile::make_copy` is removed, the filesystem
hangs within a few hours, requiring a reboot to recover. On the other hangs within a few hours, requiring a reboot to recover. On the other
hand, there may be net performance benefits to calling `fsync()` before hand, the `fsync()` only costs about 8% of overall performance.
or after each dedup. This needs further investigation.
Not really a bug, but a gotcha nonetheless: Not really a bug, but a gotcha nonetheless:
@ -291,6 +295,12 @@ Not really a bug, but a gotcha nonetheless:
children* until the FD is closed. Bees avoids this gotcha by closing children* until the FD is closed. Bees avoids this gotcha by closing
all of the FDs in its directory FD cache every 15 minutes. all of the FDs in its directory FD cache every 15 minutes.
* If a file is deleted while Bees is caching an open FD to the file,
Bees continues to scan the file. For very large files (e.g. VM
images), the deletion of the file can be delayed indefinitely.
To limit this delay, Bees closes all FDs in its file FD cache every
15 minutes.
Build Build
----- -----