code: protected static final ProtocolDataUnit createScsiResponsePdu(final SCSIStatus status,
          final int initiatorTaskTag, final int expectedDataTransferLength, final int responseDataSize) {
  
          // calculate residuals and flags
          final int residualCount = Math.abs(expectedDataTransferLength - responseDataSize);
          final boolean residualOverflow = expectedDataTransferLength < responseDataSize;
          final boolean residualUnderflow = expectedDataTransferLength > responseDataSize;
  
          return TargetPduFactory.createSCSIResponsePdu(false,// bidirectionalReadResidualOverflow
              false,// bidirectionalReadResidualUnderflow
              residualOverflow,// residualOverflow,
              residualUnderflow,// residualUnderflow,
              SCSIResponseParser.ServiceResponse.COMMAND_COMPLETED_AT_TARGET,// response
              status,// status
              initiatorTaskTag,// initiatorTaskTag
              0,// snackTag
              0,// expectedDataSequenceNumber
              0,// bidirectionalReadResidualCount
              residualCount,// residualCount
              ScsiResponseDataSegment.EMPTY_DATA_SEGMENT);// data segment
      }
docs: Creates a SCSI Response PDU with a length zero data segment. Objects created with this method can be
  used as
  replies in task terminating with {@link SCSIStatus#GOOD} which do not require additional data to be
  transfered,
  or for creating follow-up PDU with {@link SCSIStatus#CHECK_CONDITION} status sent after Data-In PDUs
  with sense
  data.
  
  @param status
  the SCSI status of the task
  @param initiatorTaskTag
  used by the initiator to identify the task
  @param expectedDataTransferLength
  total amount of payload data in bytes expected by the initiator
  @param responseDataSize
  actual amount of payload data in bytes sent by the target
  @return the SCSI Response PDU