]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
5981 Deadlock in dmu_objset_find_dp
authorAndriy Gapon <avg@FreeBSD.org>
Wed, 24 Jun 2015 14:49:49 +0000 (14:49 +0000)
committerAndriy Gapon <avg@FreeBSD.org>
Wed, 24 Jun 2015 14:49:49 +0000 (14:49 +0000)
commitdc121a264dda44e9a0551374ae3baf8fa08ec0e4
tree26e27fbbf247ff93266db95c2adc1d5f7a3d3e99
parentbf5e38bb9f3e88fcd478fef12eb00a1c1766ccf0
5981 Deadlock in dmu_objset_find_dp

illumos/illumos-gate@1d3f896f5469c69c1339890ec3d68e9feddb0343

https://www.illumos.org/issues/5981
  When dmu_objset_find_dp gets called with a read lock held, it fans out
  the work to the task queue. Each task in turn acquires its own read
  lock before calling the callback. If during this process anyone tries
  to a acquire a write lock, it will stall all read lock requests.Thus
  the tasks will never finish, the read lock of the caller will never
  get freed and the write lock never acquired.  deadlock.

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Author: Arne Jansen <jansen@webgods.de>
uts/common/fs/zfs/dmu_objset.c
uts/common/fs/zfs/dsl_pool.c
uts/common/fs/zfs/rrwlock.c
uts/common/fs/zfs/sys/dsl_pool.h
uts/common/fs/zfs/sys/rrwlock.h