So I think I've found where the vdev is selected for writes to take place.  In 
src/lib/libzpool/metaslab.c there is a function metaslab_alloc_dva().  The vdev 
that is selected to write to is vdev_t vd.  I'm not entirely sure how it is 
selected, but I have the guid of the vdev that I don't want written to:

#define READ_ONLY_GUID 0x123456789
if(vd->vdev_guid == READ_ONLY_GUID) {
  // code to select another vdev
}

I've temporarily stuck in some debug statements to see what's going on and I've 
noticed that slabs are allocated on import.  I was under the impression only 
the vdev labels (which I don't think are objects and were written to directly) 
were affected at this point.  Not entirely sure why slabs are being allocated 
here?

~Mike
-- 
This message posted from opensolaris.org

Reply via email to