]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFV r329803:
authorAlexander Motin <mav@FreeBSD.org>
Thu, 22 Feb 2018 03:54:59 +0000 (03:54 +0000)
committerAlexander Motin <mav@FreeBSD.org>
Thu, 22 Feb 2018 03:54:59 +0000 (03:54 +0000)
commitdd9ceab333a640a25d17ba2374fdd2270876db23
tree443eeb82f410114a1c440fa6bdfec1a91747d75c
parent4ab039b57f437e5a9ddbaedd167583dcf8f84142
parent4195015764f853a7cae9d55091ee8ea4f339353e
MFV r329803:
9080 recursive enter of vdev_indirect_rwlock from vdev_indirect_remap()

illumos/illumos-gate@bdfded42e66b9fc1395ff2401aa2952f7c44ae34

A scenario came up where a callback executed by vdev_indirect_remap() on a vdev, calls
vdev_indirect_remap() on the same vdev and tries to reacquire vdev_indirect_rwlock that
was already acquired from the first call to vdev_indirect_remap(). The specific scenario,
is that we want to remap a block pointer that is snapshoted but its dataset's remap_deadlist
is not cached. So in order to add it we issue a read through a vdev_indirect_remap() on the
same vdev, which brings up the aforementioned issue.

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Author: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c