zfs_trunc() and zfs_putpage() deadlocks on dn_struct_rwlock (Doc ID 2271246.1)

Last updated on MAY 29, 2017

Applies to:

Solaris Operating System - Version 10 3/05 to 11.3 [Release 10.0 to 11.0]
Information in this document applies to any platform.

Symptoms

 A kernel dump or LIVE threadlist will show two threads in a deadlock condition as shown here:

 

THREAD STATE SOBJ COUNT
c4007ac94cc0 SLEEP CV 1
dbuf_dirty_impl+0x24c
dnode_free_range+0x158 <-- acquires dn_struct_rwlock
dmu_free_long_range_impl+0x134
dmu_free_long_range_intr+0x3c
zfs_trunc+0x6c
zfs_freesp+0x10c
zfs_space+0x168
fop_space+0x98
fcntl+0xf74
syscall_trap+0x228

 

THREAD STATE SOBJ COUNT
2a1026d5b80 SLEEP RWLOCK 1
rw_enter_sleep+0x16c
dbuf_read+0x48
dbuf_will_dirty+0x50
dmu_write_pages+0xe0 <-- acquires hold
zfs_putapage+0x2b8
pvn_vplist_dirty+0x3a4
zfs_putpage+0x270
fop_putpage+0x4c
fsflush_do_pages+0x344
fsflush+0x368
thread_start+4

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms