-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ECKD DASD - Read Tracks CCW x'DE' Fails When Chained From Prefix CCW #603
Comments
I added Prefix CCW to the Read Track chaining requirements and recompiled using Hercules Helper and it fixed the issue: case 0xDE:
/*---------------------------------------------------------------*/
/* READ TRACK */
/*---------------------------------------------------------------*/
/* Command reject if not within the domain of a Locate Record
that specifies a read tracks operation */
if (dev->ckdlcount == 0
|| (((dev->ckdloper & CKDOPER_CODE) != CKDOPER_RDTRKS)
&& ((dev->ckdloper & CKDOPER_CODE) != CKDOPER_RDTSET)))
{
ckd_build_sense( dev, SENSE_CR, 0, 0, FORMAT_0, MESSAGE_2 );
*unitstat = CSW_CE | CSW_DE | CSW_UC;
break;
}
/* Command reject if not chained from a Locate Record
command or from another Read Track command */
if (0
|| chained == 0
|| (1
&& prevcode != 0x47 // LOCATE RECORD
&& prevcode != 0x4B // LOCATE RECORD EXTENDED
&& prevcode != 0xDE // READ TRACK
&& prevcode != 0xE7 // PREFIX
) Best regards, |
Aaron, Am I correct in assuming that your correction in --- SDL-hyperion_4f007805/ckddasd.c 2023-11-11 16:56:04.337029153 +0100
+++ SDL-hyperion/ckddasd.c 2023-11-14 11:24:48.974347751 +0100
@@ -3208,6 +3208,7 @@
&& prevcode != 0x47 // LOCATE RECORD
&& prevcode != 0x4B // LOCATE RECORD EXTENDED
&& prevcode != 0xDE // READ TRACK
+ && prevcode != 0xE7 // PREFIX
)
)
{ I have already tested this correction of yours, hoping that perhaps it would also solve issue #608 which I created today, but it did not. However, your correction did not affect that test at all, so it didn't break things. Other than that, I must admit that I know way to little about DASD CCW programming to understand the issues and their solutions. Cheers, Peter |
Hi Peter, Yes, my change was applied to ckddasd.c. I'm certain in addition of the x'DE' there are other CCWs that would need fixing if chained to a Prefix. Although Fish did a great job fixing the Prefix CCW code, there was one very important requirement was left out: if you look at my comment of June 15 in issue #572 about recommendation of how Prefix should be implemented, "Set flag DX received for chaining requirements" and "Set flag LRE received for chaining requirements" were left out. The correct fix was after the 'Define_Extent' subroutine is called to set prevcode='63' and after "Locate_Record_Extended" subroutine is called to set prevcode=4B. This would have eliminated the need of having a reference to Prefix to any other CCW. I did make this change to my own version of ckddasd.c, but when I compile it, I get compilation warnings and Hercules Helper does not continue. I'll try to fix this at some future time. In your case, if you send me an I/O trace of the first level system for the failing devices, I maybe able to explain the cause of the problem and determine if it is related to this issue. Best regards, |
Aaron, I can't help with channel programming, but I can probably solve your build issues. Please zip and post the full log that Hercules-Helper produced for your failing build. Bill |
Hi Bill,
|
I understand that.
The log will show me/us what the compiler thinks about your code. Such as the exact error messages. On the surface from what you've posted, that seems like legit C. Bill |
Hi Aaron, I've added those three (I.e. still exhibiting issue #608 as before, somehow as expected. I'll next try to get an I/O trace from DASD 0A82 as you requested for that issue.) --- SDL-hyperion_4f007805/ckddasd.c 2023-11-11 16:56:04.337029153 +0100
+++ SDL-hyperion/ckddasd.c 2023-11-15 15:08:39.708625661 +0100
@@ -3322,6 +3322,7 @@
{
DefineExtent( dev, code, flags, chained, count, prevcode,
ccwseq, iobuf, more, unitstat, residual );
+ prevcode = 0x63;
}
else
{
@@ -3339,10 +3340,12 @@
ccwseq, iobuf, more, unitstat, residual );
if (*unitstat != (CSW_CE | CSW_DE))
break; // (error!)
+ prevcode = 0x63;
}
LocateRecordExtended( dev, code, flags, chained, count, prevcode,
ccwseq, iobuf, more, unitstat, residual );
+ prevcode = 0x48;
break; // Done!
case PFX_F_DE_PSF:
Does this match the source change you're wishing to implement ? I'm in the same position as Bill, having absolutely no clue as the the effect this change has. All I can testify is that it seems to have no effects, i.e. also no ill effects, on my testing as mentionned. So far I've only tried this on my most up-to-date Linux system, Ubuntu LTS 22.04, using CLANG compiler version 14.0.0 :
Perhaps Bill can assist you with a possible build problem. Cheers, Peter |
Hi Peter, Please change the If it did not resolve the error, either do a |
I have no idea what those constants mean. Before any of this is considered to be incorporated, you'll need to use symbolic equates and comment what's being done. Also providing some test cases would be encouraged. Bill |
My compilation issue got resolved by updating the |
This issue is resolved. |
Aaron! (@arfineman) Please don't close issues until the actual fix has actually been committed to the official repository! Just because the fix is in your local repository, doesn't mean it's in our publicly accessible repository! That is to say, technically, once you commit a fix, you should do a "push" to apply your local changes to the remote repository as well. Only then has the fix been officially resolved and the issue may be closed. But because you are not a developer (would you like to be one? Please?), you have no "write" (commit) access to our repository, and so therefore cannot push your changes. When this happens, your local Hercules that you use works fine, but the problem still exists for everyone else! (because the fix never got committed!) Thanks. Your fix has now been committed. |
Thank you, Fish. I'm starting to understand the Best regards, |
Hi Fish,
Did you make this correction? |
I apologize for not mentioning it, but yes, if you look at what was actually committed, you will see that change was included in the commit (ba93eef). |
Read Track is failing when chained to a Prefix command.
It appears code at label 0xDE is not checking for Prefix command. I'm sure there are other commands that are checking for LRE and not Prefix. But a format 0 Prefix with Define Extent valid bit should satisfy Define Extent chaining requirement and a format 1 Prefix must satisfy LRE chaining requirement.
Best regards,
This is a sample Read Track CCW chain with LRE that successfully executes:
This is a sample Read Track CCW chain with Prefix that fails:
The text was updated successfully, but these errors were encountered: