Removing unneeded mutex for reading vq_pending_tree size

Locking mutex &vq->vq_lock in vdev_mirror_pending is unneeded:

* no data is modified
* only vq_pending_tree is read
* in case garbage is returned (eg. vq_pending_tree being updated
  while the read is made) the worst case would be that a single
  read could be queued on a mirror side which more busy than thought

The benefit of this change is streamlining of the code path since
it is taken for *every* mirror member on *every* read.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1739
This commit is contained in:
GregorKopka 2013-09-19 16:42:17 +02:00 committed by Brian Behlendorf
parent 77831e1738
commit f9f3f1ef98

View File

@ -89,14 +89,7 @@ static const zio_vsd_ops_t vdev_mirror_vsd_ops = {
static int
vdev_mirror_pending(vdev_t *vd)
{
vdev_queue_t *vq = &vd->vdev_queue;
int pending;
mutex_enter(&vq->vq_lock);
pending = avl_numnodes(&vq->vq_pending_tree);
mutex_exit(&vq->vq_lock);
return (pending);
return avl_numnodes(&vd->vdev_queue.vq_pending_tree);
}
static mirror_map_t *