We assume that a block can be on only one storage in a DataNode.
That's why we pass in the DatanodeDescriptor rather than the
DatanodeStorageInfo.
TODO: remove this assumption in case we want to put a block on
more than one storage on a datanode (and because it's a difficult
assumption to really enforce)
DatanodeStorageInfo must be removed using the iterator to avoid
ConcurrentModificationException in the underlying storage