code: func getDevicePrefixRefCount(mounter mount.Interface, deviceNamePrefix string) (int, error) {
  	mps, err := mounter.List()
  	if err != nil {
  		return -1, err
  	}
  
  	// Find the number of references to the device.
  	refCount := 0
  	for i := range mps {
  		if strings.HasPrefix(mps[i].Path, deviceNamePrefix) {
  			refCount++
  		}
  	}
  	return refCount, nil
  }
docs: // getDevicePrefixRefCount: given a prefix of device path, find its reference count from /proc/mounts
  // returns the reference count to the device and error code
  // for services like iscsi construct multiple device paths with the same prefix pattern.
  // this function aggregates all references to a service based on the prefix pattern
  // More specifically, this prefix semantics is to aggregate disk paths that belong to the same iSCSI target/iqn pair.
  // an iSCSI target could expose multiple LUNs through the same IQN, and Linux iSCSI initiator creates disk paths that start the same prefix but end with different LUN number
  // When we decide whether it is time to logout a target, we have to see if none of the LUNs are used any more.
  // That's where the prefix based ref count kicks in. If we only count the disks using exact match, we could log other disks out.