code: func (d *Driver) Remove(id string) error {
  	d.locker.Lock(id)
  	defer d.locker.Unlock(id)
  	if !d.DeviceSet.HasDevice(id) {
  		// Consider removing a non-existing device a no-op
  		// This is useful to be able to progress on container removal
  		// if the underlying device has gone away due to earlier errors
  		return nil
  	}
  
  	// This assumes the device has been properly Get/Put:ed and thus is unmounted
  	if err := d.DeviceSet.DeleteDevice(id, false); err != nil {
  		return fmt.Errorf("failed to remove device %s: %v", id, err)
  	}
  
  	// Most probably the mount point is already removed on Put()
  	// (see DeviceSet.UnmountDevice()), but just in case it was not
  	// let's try to remove it here as well, ignoring errors as
  	// an older kernel can return EBUSY if e.g. the mount was leaked
  	// to other mount namespaces. A failure to remove the container's
  	// mount point is not important and should not be treated
  	// as a failure to remove the container.
  	mp := path.Join(d.home, "mnt", id)
  	err := unix.Rmdir(mp)
  	if err != nil && !os.IsNotExist(err) {
  		logrus.WithField("storage-driver", "devicemapper").Warnf("unable to remove mount point %q: %s", mp, err)
  	}
  
  	return nil
  }
docs: // Remove removes a device with a given id, unmounts the filesystem, and removes the mount point.