System-wide deadlock in removexattr from revisiond / APFS
We're experiencing a deadlock on certains systems when our software is installed, which is causing side effects in our process (and likely others) such as blocked queues and increased memory usage.
According to the spindump, revisiond appears to be holding an exclusive lock within the kernel.
Process: revisiond [426]
UUID: 5E9B9E04-984B-31AD-A4FF-A1A90B7D53A1
Path: /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/Support/revisiond
Codesigning ID: com.apple.revisiond
Shared Cache: 25AE5A2A-FE2A-3998-8D4E-F3C5C6E6CEB6 slid base address 0x189834000, slide 0x9834000 (System Primary)
Architecture: arm64e
Parent: launchd [1]
UID: 0
Sudden Term: Tracked
Memory Limit: 50MB
Jetsam Priority: 40
Footprint: 6225 KB
Time Since Fork: 1740319s
Num samples: 940 (1-940)
Num threads: 5
Note: 1 idle work queue thread omitted
[...]
Thread 0xc0616d 940 samples (1-940) priority 46 (base 4) last ran 241692.754s ago
940 start_wqthread + 8 (libsystem_pthread.dylib + 7068) [0x189d0ab9c]
940 _pthread_wqthread + 292 (libsystem_pthread.dylib + 11852) [0x189d0be4c]
940 _dispatch_workloop_worker_thread + 692 (libdispatch.dylib + 85356) [0x189b65d6c]
940 _dispatch_root_queue_drain_deferred_wlh + 292 (libdispatch.dylib + 87156) [0x189b66474]
940 _dispatch_lane_invoke + 440 (libdispatch.dylib + 45048) [0x189b5bff8]
940 _dispatch_lane_serial_drain + 944 (libdispatch.dylib + 42420) [0x189b5b5b4]
940 _dispatch_client_callout + 16 (libdispatch.dylib + 113364) [0x189b6cad4]
940 _dispatch_call_block_and_release + 32 (libdispatch.dylib + 7004) [0x189b52b5c]
940 ??? (revisiond + 168768) [0x10494d340]
940 ??? (revisiond + 165940) [0x10494c834]
940 ??? (revisiond + 40264) [0x10492dd48]
940 ??? (revisiond + 56680) [0x104931d68]
940 <patched truncated backtrace>
940 removexattr + 8 (libsystem_kernel.dylib + 23768) [0x189cd1cd8]
*940 ??? (kernel.release.t6000 + 15240) [0xfffffe000886fb88]
*940 ??? (kernel.release.t6000 + 1886348) [0xfffffe0008a3888c]
*940 ??? (kernel.release.t6000 + 7730436) [0xfffffe0008fcb504]
*940 ??? (kernel.release.t6000 + 2759592) [0xfffffe0008b0dba8]
*940 ??? (kernel.release.t6000 + 2808244) [0xfffffe0008b199b4]
*940 apfs_vnop_removexattr + 1044 (apfs + 474512) [0xfffffe000be8d4d0]
*940 decmpfs_cnode_set_vnode_state + 80 (kernel.release.t6000 + 2945816) [0xfffffe0008b3b318]
*940 IORWLockWrite + 184 (kernel.release.t6000 + 496184) [0xfffffe00088e5238]
*940 ??? (kernel.release.t6000 + 494624) [0xfffffe00088e4c20]
*940 ??? (kernel.release.t6000 + 619452) [0xfffffe00089033bc]
*940 ??? (kernel.release.t6000 + 624472) [0xfffffe0008904758]
The bulk of the other processes are waiting for that lock.
(suspended, blocked by krwlock for reading owned by revisiond [426] thread 0xc0616d)
(blocked by krwlock for writing owned by revisiond [426] thread 0xc0616d)
Around the time of the event, these messages were logged by revision:
2026-03-06 18:49:37.781673-0500 0x16b7 Error 0x7f92f364 426 14 revisiond: [com.apple.revisiond:default] [ERROR] CSCopyChunkIDsForToken failed for 41639
2026-03-06 18:49:37.781716-0500 0x16b7 Error 0x7f92f365 426 14 revisiond: [com.apple.revisiond:default] [ERROR] updateEntry for new entry <private> failed
2026-03-06 18:49:37.781738-0500 0x16b7 Error 0x7f92f366 426 14 revisiond: [com.apple.revisiond:default] [ERROR] no entry for '<private>'
2026-03-06 18:49:37.781754-0500 0x16b7 Error 0x7f92f367 426 14 revisiond: [com.apple.revisiond:default] [ERROR] failed assembleInfoForOffset for fsid 16777234 fileid 359684022 offset 0 size 14334 (path <private>)
Our agent uses Endpoint Security Framework to monitor events, and provide anti-tamper functionality for installed components and processes. While several EndpointSecurity calls appear in the spindump stack traces, we don't have any evidence that any calls from revisiond were blocked.
What we'd really like to to understand what that lock is (appears to be decompressing an object on an APFS volume), what revisiond and APFS are doing with it, and what might cause it to deadlock.
Of note, one of our processes is also waiting on that lock, one thread for reading and the other for writing.
This issue affects machines running several macOS versions (15.x, 26.x). The machine in the examples is running macOS 26.3 (25D125)