code: func lookupVolume(ctx context.Context, store *drivers.Store, driverName, volumeName string) (volume.Volume, error) {
  	if driverName == "" {
  		driverName = volume.DefaultDriverName
  	}
  	vd, err := store.GetDriver(driverName)
  	if err != nil {
  		return nil, errors.Wrapf(err, "error while checking if volume %q exists in driver %q", volumeName, driverName)
  	}
  	v, err := vd.Get(volumeName)
  	if err != nil {
  		err = errors.Cause(err)
  		if _, ok := err.(net.Error); ok {
  			if v != nil {
  				volumeName = v.Name()
  				driverName = v.DriverName()
  			}
  			return nil, errors.Wrapf(err, "error while checking if volume %q exists in driver %q", volumeName, driverName)
  		}
  
  		// At this point, the error could be anything from the driver, such as "no such volume"
  		// Let's not check an error here, and instead check if the driver returned a volume
  		logrus.WithError(err).WithField("driver", driverName).WithField("volume", volumeName).Debug("Error while looking up volume")
  	}
  	return v, nil
  }
docs: // lookupVolume gets the specified volume from the specified driver.
  // This will only return errors related to communications with the driver.
  // If the driver returns an error that is not communication related the
  //   error is logged but not returned.
  // If the volume is not found it will return `nil, nil``
  // TODO(@cpuguy83): plumb through the context to lower level components