CAC 2018-01-15

Fix disk status

Command: M-> reregister root2 dska_00b

DBG(1788988763850)> ERR ERR: doPayloadChan expected IDCW 11 (13)
2126.7  disk_control: chan stat illeg chan instruct for dska_00 (channel A11).
                    rec 177, sect 377, main 77536000
                    subvol b, logical rec 0, logical sect 0
DBG(1788988890266)> ERR ERR: doPayloadChan expected IDCW 11 (13)
disk_table_: Physical device error. error reregistering dska_00b

/mnt/null/cac/Projects/Multics/test_restore_volume/attack_rc9

./dps8 boot_recovery.ini

source/library_dir_dir/system_library_1/source/bound_page_control.s.archive/disk_control.pl1

/* Process completion of detailed status read. */

               if /* case */ chantab.rsr then do;           /* If detailed status was just read ... */
                    if (string (io_status_word) & disk_data.status_mask) then
                                                            /* Don't print bad RSR's */
                         chantab.rsr = "0"b;                /* So clear this bit now. */
                    unspec (io_status_entry.detailed_status (*)) = unspec (chantab.detailed_status (*));
                                                            /* copy detail over */

                    io_status_word_ptr = addr (chantab.status);
                                                            /* Unsave previous error status. */
                    command = chantab.command;              /* And previous device command. */
                    call extract_status;                    /* Extract status info anew. */
                    call handle_error;                      /* Now handle the error. */

                    chantab.rsr = "0"b;                     /* Turn off the bit. */
               end;

/* INTERPRET_STATUS - Get interpretive info for status. */

interpret_status:
          proc;

               dedp = addr (disk_error_data$);
               if pvte.is_sv then
                    dskerap = addrel (dedp, disk_error_data (majstat).finterp);
               else dskerap = addrel (dedp, disk_error_data (majstat).interp);

Status bit definitions:

   source/library_dir_dir/system_library_1/source/bound_page_control.s.archive/disk_error_data.cds

          call set_majstat (1, "dev busy");
          call set_fmajstat (1, "dev busy");
          call set_majstat (2, "dev attention");
          call set_fmajstat (2, "dev attention");
          call set_majstat (3, "dev data alert");
          call set_fmajstat (3, "dev data alert");
          call set_majstat (4, "end of file");
          call set_fmajstat (4, "end of file");
          call set_majstat (5, "cmd reject");
          call set_fmajstat (5, "cmd reject");
          call set_majstat (8, "channel busy");
          call set_fmajstat (8, "channel busy");
          call set_majstat (10, "MPC attention");
          call set_fmajstat (10, "IPC-FIPS device attention");
          call set_majstat (11, "MPC data alert");
          call set_fmajstat (11, "IPC-FIPS device data alert");
          call set_majstat (13, "MPC cmd reject");
          call set_fmajstat (13, "IPC-FIPS cmd reject");
          call set_majstat (16, "power off");
          call set_fmajstat (16, "power off");
          call set_majstat (17, "chan stat");
          call set_fmajstat (17, "chan stat");
          call set_majstat (18, "central stat");
          call set_fmajstat (18, "central stat");
          call set_majstat (19, "I/O system fault");
          call set_fmajstat (19, "I/O system fault");
          call set_majstat (20, "nonzero tally residue");
          call set_fmajstat (20, "nonzero tally residue");
          call set_majstat (21, "Auto retries");
          call set_fmajstat (21, "Auto retries");
          call set_majstat (22, "EDAC performed");
          call set_fmajstat (22, "EDAC performed");
          call set_majstat (23, "Data parity");
          call set_fmajstat (23, "Data parity");

          call set_majstat (17, "chan stat");
          call set_fmajstat (17, "chan stat");
          call set_substat ("001000",     ONCE, "connect while busy",             "");
          call set_substat ("010000",     ONCE, "illeg chan instruct",            "");
          call set_substat ("011000",     ONCE, "incorrect DCW",                  "");
          call set_substat ("100000",     ONCE, "incomplete instruct seq",        "bad_path");
          call set_substat ("110000", NRETRIES, "PSI parity err",                 "bad_path");
          call set_substat ("111000", NRETRIES, "parity err, I/O bus to chan",    "bad_path");
          call set_substat ("XXXXXX", NRETRIES, "",                               "bad_path,rsr");

error parsing tables:
   disk_error_interp.incl.pl1

disk_control.pl1

extract_status:
          proc;

               if /* case */ io_status_word.power then do;
                    majstat = 16;
                    substat = ANY;
               end;
               else if io_status_word.channel_stat then do;
                    majstat = 17;
                    substat = io_status_word.channel_stat;
               end;
               else if io_status_word.central_stat then do;
                    majstat = 18;
                    substat = io_status_word.central_stat;
               end;
               else do;
                    majstat = bin (io_status_word.major, 4);
                    substat = io_status_word.sub;
               end;

          end extract_status;
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License