MODULE dmm$volume_up_down;
?? RIGHT := 110 ??
?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc rmc$mass_storage_class
*copyc iot$logical_unit
?? POP ??
*copyc dmp$search_avt_by_lun
*copyc jmp$resurrect_dead_jobs
*copyc mmp$volume_available
*copyc mtp$step_unstep_system
*copyc dmv$active_volume_table
*copyc dmv$number_unavailable_volumes
?? OLDTITLE ??
?? NEWTITLE := '[xdcl] DMP$VOLUME_UP', EJECT ??

  PROCEDURE [XDCL] dmp$volume_up
    (    lun: iot$logical_unit);

    VAR
      avti: dmt$active_volume_table_index,
      avt_entry_p: ^dmt$ms_active_vol_table_entry,
      found: boolean;

    dmp$search_avt_by_lun (lun, avti, found);
    IF NOT found THEN
      RETURN; {----->
    IFEND;

    avt_entry_p := ^dmv$active_volume_table.table_p^ [avti].mass_storage;
    IF avt_entry_p^.volume_unavailable THEN
      dmv$number_unavailable_volumes := dmv$number_unavailable_volumes - 1;
      avt_entry_p^.volume_unavailable := FALSE;
      avt_entry_p^.allocation_allowed := avt_entry_p^.previous_allocation_allowed;
    IFEND;

    jmp$resurrect_dead_jobs;
    mmp$volume_available;

  PROCEND dmp$volume_up;
?? OLDTITLE ??
?? NEWTITLE := '[xdcl] DMP$VOLUME_DOWN', EJECT ??

  PROCEDURE [XDCL] dmp$volume_down
    (    lun: iot$logical_unit;
     VAR critical: boolean);

    VAR
      avti: dmt$active_volume_table_index,
      avt_entry_p: ^dmt$ms_active_vol_table_entry,
      class: dmt$class,
      st: string (72),
      system_set: boolean,
      found: boolean;

    critical := FALSE;
    dmp$search_avt_by_lun (lun, avti, found);
    IF NOT found THEN
      RETURN; {----->
    IFEND;

    avt_entry_p := ^dmv$active_volume_table.table_p^ [avti].mass_storage;

{Step if critical device down; allow unstep
    system_set := avt_entry_p^.set_name = dmv$active_volume_table.table_p^ [1].mass_storage.set_name;
    class := avt_entry_p^.class;

    IF (avt_entry_p^.allocation_allowed) AND ((rmc$msc_system_critical_files IN class) OR
          ((rmc$msc_system_catalogs IN class) AND system_set)) THEN
      st := 'ERR=VEOS9300-A critical device has gone down: ';
      st (47, * ) := avt_entry_p^.recorded_vsn;
      mtp$step_unstep_system (syc$ic_disk_error, st);
      critical := TRUE;
      RETURN; {----->
    IFEND;

    IF avt_entry_p^.volume_unavailable THEN
      {Ignore request - already down
      RETURN; {----->
    IFEND;

    dmv$number_unavailable_volumes := dmv$number_unavailable_volumes + 1;
    avt_entry_p^.volume_unavailable := TRUE;
    avt_entry_p^.previous_allocation_allowed := avt_entry_p^.allocation_allowed;
    avt_entry_p^.allocation_allowed := FALSE;

  PROCEND dmp$volume_down;
?? OLDTITLE ??
MODEND dmm$volume_up_down
