docs: def removeDisk(rh):
      """
      Remove a disk from a virtual machine.
  
      Input:
         Request Handle with the following properties:
            function         - 'CHANGEVM'
            subfunction      - 'REMOVEDISK'
            userid           - userid of the virtual machine
            parms['vaddr']   - Virtual address
  
      Output:
         Request Handle updated with the results.
         Return code - 0: ok, non-zero: error
      """
  
      rh.printSysLog("Enter changeVM.removeDisk")
  
      results = {'overallRC': 0, 'rc': 0, 'rs': 0}
  
      # Is image logged on
      loggedOn = False
      results = isLoggedOn(rh, rh.userid)
      if results['overallRC'] == 0:
          if results['rs'] == 0:
              loggedOn = True
  
              results = disableEnableDisk(
                  rh,
                  rh.userid,
                  rh.parms['vaddr'],
                  '-d')
              if results['overallRC'] != 0:
                  rh.printLn("ES", results['response'])
                  rh.updateResults(results)
  
      if results['overallRC'] == 0 and loggedOn:
          strCmd = "/sbin/vmcp detach " + rh.parms['vaddr']
          results = execCmdThruIUCV(rh, rh.userid, strCmd)
          if results['overallRC'] != 0:
              if re.search('(^HCP\w\w\w040E)', results['response']):
                  # Device does not exist, ignore the error
                  results = {'overallRC': 0, 'rc': 0, 'rs': 0, 'response': ''}
              else:
                  rh.printLn("ES", results['response'])
                  rh.updateResults(results)
  
      if results['overallRC'] == 0:
          # Remove the disk from the user entry.
          parms = [
              "-T", rh.userid,
              "-v", rh.parms['vaddr'],
              "-e", "0"]
  
          results = invokeSMCLI(rh, "Image_Disk_Delete_DM", parms)
          if results['overallRC'] != 0:
              if (results['overallRC'] == 8 and results['rc'] == 208 and
                      results['rs'] == 36):
                  # Disk does not exist, ignore the error
                  results = {'overallRC': 0, 'rc': 0, 'rs': 0, 'response': ''}
              else:
                  # SMAPI API failed.
                  rh.printLn("ES", results['response'])
                  rh.updateResults(results)    # Use results from invokeSMCLI
  
      else:
          # Unexpected error.  Message already sent.
          rh.updateResults(results)
  
      rh.printSysLog("Exit changeVM.removeDisk, rc: " +
          str(rh.results['overallRC']))
      return rh.results['overallRC']