code: func scanOneLun(hostNumber int, lunNumber int) error {
  	filename := fmt.Sprintf("/sys/class/scsi_host/host%d/scan", hostNumber)
  	fd, err := os.OpenFile(filename, os.O_WRONLY, 0)
  	if err != nil {
  		return err
  	}
  	defer fd.Close()
  
  	// Channel/Target are always 0 for iSCSI
  	scanCmd := fmt.Sprintf("0 0 %d", lunNumber)
  	if written, err := fd.WriteString(scanCmd); err != nil {
  		return err
  	} else if 0 == written {
  		return fmt.Errorf("No data written to file: %s", filename)
  	}
  
  	klog.V(3).Infof("Scanned SCSI host %d LUN %d", hostNumber, lunNumber)
  	return nil
  }
docs: // scanOneLun scans a single LUN on one SCSI bus
  // Use this to avoid scanning the whole SCSI bus for all of the LUNs, which
  // would result in the kernel on this node discovering LUNs that it shouldn't
  // know about. Extraneous LUNs cause problems because they may get deleted
  // without us getting notified, since we were never supposed to know about
  // them. When LUNs are deleted without proper cleanup in the kernel, I/O errors
  // and timeouts result, which can noticeably degrade performance of future
  // operations.