<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.Default, li.Default, div.Default
        {mso-style-name:Default;
        margin:0in;
        margin-bottom:.0001pt;
        text-autospace:none;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;
        color:black;}
p.p1, li.p1, div.p1
        {mso-style-name:p1;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;
        font-weight:normal;
        font-style:normal;}
span.s1
        {mso-style-name:s1;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;
        font-weight:normal;
        font-style:normal;}
span.EmailStyle25
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1352026242;
        mso-list-type:hybrid;
        mso-list-template-ids:230586122 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">Hi Tom, thank you for the feedback, I will review your comments and make appropriate changes.  I will try to get the updates out in the next two weeks.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Carolyn<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="color:#1F497D"><o:p> </o:p></span></a></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Thomas Freeman [mailto:thomas.freeman@hgst.com]
<br>
<b>Sent:</b> Friday, January 29, 2016 8:41 AM<br>
<b>To:</b> Foster, Carolyn D <carolyn.d.foster@intel.com>; nvmewin@lists.openfabrics.org<br>
<b>Subject:</b> RE: HGST's review of patch for namespace management<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Carolyn,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">During my testing, I saw a few more items that should be addressed. I know a few of these are not changes you made, but they are issues I saw while stepping through the code.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:14.0pt;color:#1F497D">nvmeInit.c<o:p></o:p></span></b></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeSetFeaturesCompletion:Line 1459</span></i><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">should set   </span><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">pAE->DriverState.NumQueuesSet = TRUE;</span><span style="color:#843C0C">
</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeSetFeaturesCompletion:line 1496<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">Check should validate that the SCT is GENERIC_COMMAND_STATUS<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeSetFeaturesCompletion:line 1500<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">Also need to check for </span><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">SC==INVALID_NAMESPACE_OR_FORMAT</span><span style="color:#1F497D">. In my testing, that is the value I saw
 going down this path<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeSetFeaturesCompletion:line 1513<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">For the case where NS Mgmt is not supported, nsStatus should be set to ATTACHED<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">if (!pAE->controllerIdentifyData.OACS.SupportsNamespaceMgmtAndAttachment) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                        pLunExt->nsStatus = ATTACHED;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New";color:#843C0C"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeSetFeaturesCompletion:line 1518
<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">In the case where NS mgmt is not supported, nsStatus will be "INVALID"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">} else if ((INACTIVE == pLunExt->nsStatus) || (INVALID == pLunExt->nsStatus))</span><span style="font-size:10.0pt;font-family:"Courier New";color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeAccessLbaRangeEntry:line 2361<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">size should be a full page, not sizeof LBA RANGE entry<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:14.0pt;color:#1F497D">nvmeStd.c<o:p></o:p></span></b></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeIoctlSetGetFeatures:line 3197<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">dataBufferSize should be set to a full page (LBA RANGE)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Also, this is required to be contiguous memory. I don't think we can guarantee that with the IOCTL databuffer.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">During testing (with devices that do and do not support NS Mgmt), I ran into issues when I had 0 namespaces or a single detached namespace.  Below are some of my suggestions on possible ways to address this<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:14.0pt;color:#1F497D">nvmeInit.c<o:p></o:p></span></b></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMESetFeaturesCompletion:line 1490<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D">When there are no namespaces (NumKnowNamespaces is 0), after setting int coalescing and number of queues, there is no need to get LBA range types. Go directly to NVMeWaitOnSetupQueues<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">if (pAE->DriverState.TtlLbaRangeExamined < pAE->DriverState.NumKnownNamespaces) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                            pAE->DriverState.NextDriverState = NVMeWaitOnSetFeatures;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                       } else {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                           /* There are no valid luns, so skip set features steps that */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                           /* are issued to namespaces */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                            pAE->DriverState.NextDriverState = NVMeWaitOnSetupQueues;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">                        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeInitCallback:line 1808</span></i><span style="color:#1F497D">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">In my testing, going down this path left the controller disabled. Instead of calling FatalError, go to NVMeWaitOnSetFeatures.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">if (pAE->controllerIdentifyData.NN == 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">   pAE->DriverState.NextDriverState = NVMeWaitOnSetFeatures;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">   pAE->visibleLuns = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><i><span style="color:#1F497D">NVMeInitCallback:line 1884</span></i><span style="color:#1F497D">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">After processing the attached and existing NS lists, if there are no NS's, skip the step to review Identify NS's and go directly to NVMeWaitOnSetFeatures.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">   if (pAE->DriverState.NumKnownNamespaces == 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">       pAE->DriverState.NextDriverState = NVMeWaitOnSetFeatures;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">  } else {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">       pAE->DriverState.NextDriverState = NVMeWaitOnIdentifyNS; 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:#843C0C">   }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:90%"><b><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Tom Freeman</span></b><b><span style="font-size:12.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D"><o:p></o:p></span></b></p>
<p class="MsoNormal" style="line-height:90%"><b><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Software Engineer, Device Manager and Driver Development</span></b><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">HGST, a Western Digital company</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D"><a href="mailto:thomas.freeman@hgst.com">thomas.freeman@hgst.com</a></span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">507-322-2311<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="color:#1F497D"><img border="0" width="172" height="56" id="_x0000_i1025" src="cid:image001.png@01D15A74.09631690" alt="HGST_Logo_email"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;line-height:90%">
<span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">3605 Hwy 52 N 
</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><br>
</span><span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Rochester, MN 55901</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><br>
<a href="https://hgst.jiveon.com/external-link.jspa?url=http://www.hgst.com/" target="_blank"><span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif">www.hgst.com</span></a><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> <a href="mailto:nvmewin-bounces@lists.openfabrics.org">
nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Thomas Freeman<br>
<b>Sent:</b> Wednesday, January 27, 2016 12:53 PM<br>
<b>To:</b> Foster, Carolyn D <<a href="mailto:carolyn.d.foster@intel.com">carolyn.d.foster@intel.com</a>>;
<a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> [nvmewin] HGST's review of patch for namespace management<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Carolyn,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">I have some additional comments <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">nvmeInit.c:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">NVMeInitCallback: line 1808:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">NN is unsigned so the ”<=” should be replaced with  “==”
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">if (pAE->controllerIdentifyData.NN == 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">nvmeStd.c:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">NVMeIoctlIdentify: line 3060<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">According to the NVMe 1.2 spec, when CNS is 2, “A list of 1024 namespace IDs is returned”. So<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Databuffersize should be set to 4k.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">NVMeIoctlIdentify: line 3060<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">databuffersize needs to be set for other values of cns (e.g. 0x10) or it will fail call to NVMePreparePRP's<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">NVMeCompletionNsAttachment: line 4061;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The code works as is, but for correctness  sizeof(ADMIN_IDENTIFY_NAMESPACE) should be specified.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Also, I’m seeing some incorrect behavior with SCSI Report Luns<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Here are the steps and the results I’m seeing<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Create Namespaces 1,2,3,4,5. Attach only NSID 1.<o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Disable/re-enable the device<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Attach NSID’s 3 & 5 (now 1,2,3,4,5 are existing NSIDs, 1,3,5 are attached NSIDs)<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Report LUNs results: Length 0x38, Lun List 0, 2, 4, 0, 0, 0, 0 –
</span><span style="color:#C55A11">Should be 0x18/0, 2, 4</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">5.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Disable/re-enable the device<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">6.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Report LUNs results: Length 0x28 Lun list 0,1,2,0,0 –
</span><span style="color:#C55A11">Should be 0x18/0,1,2</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="mso-list:Ignore">7.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]><span style="color:#1F497D">Namespace delete of NSID 1.</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="mso-list:Ignore">8.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]><span style="color:#1F497D">Report LUNs results: Length 0x20 Lun list 1,2,0,0 – Invalid. First LUN must be 0. From the SNTL 1.5 spec
<i>“</i></span><i>The list shall contain logical unit numbers corresponding to namespaces present on the device with a Namespace Capacity (NCAP) field of the Identify Namespace Structure set to greater than 0h. Logical unit numbers shall begin with 0 and have
 a maximum value of NN-1, where NN is the Number of Namespaces field within Identify Controller Data Structure. “</i><o:p></o:p></p>
<p class="MsoListParagraph"><o:p> </o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">9.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#1F497D">Disable/re-enable the device<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#1F497D"><span style="mso-list:Ignore">10.<span style="font:7.0pt "Times New Roman"">  
</span></span></span><![endif]><span style="color:#1F497D">Report LUNs results: Length 0x20 Lun list 0,1,0,0 –</span><span style="color:#C55A11"> Should be 0x10/0,1</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:90%"><b><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Tom Freeman</span></b><b><span style="font-size:12.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D"><o:p></o:p></span></b></p>
<p class="MsoNormal" style="line-height:90%"><b><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Software Engineer, Device Manager and Driver Development</span></b><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">HGST, a Western Digital company</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><a href="mailto:thomas.freeman@hgst.com"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif">thomas.freeman@hgst.com</span></a><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:10.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">507-322-2311<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="line-height:90%"><span style="color:#1F497D"><img border="0" width="172" height="56" id="Picture_x0020_1" src="cid:image001.png@01D15A74.09631690" alt="HGST_Logo_email"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;line-height:90%">
<span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">3605 Hwy 52 N 
</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><br>
</span><span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif;color:#1F497D">Rochester, MN 55901</span><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><br>
</span><a href="https://hgst.jiveon.com/external-link.jspa?url=http://www.hgst.com/" target="_blank"><span style="font-size:8.0pt;line-height:90%;font-family:"Arial",sans-serif">www.hgst.com</span></a><span style="font-size:12.0pt;line-height:90%;font-family:"Times New Roman",serif;color:#1F497D"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> <a href="mailto:nvmewin-bounces@lists.openfabrics.org">
nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Foster, Carolyn D<br>
<b>Sent:</b> Friday, January 15, 2016 5:57 PM<br>
<b>To:</b> <a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> [nvmewin] Patch with changes for Namespace Management<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi all,<o:p></o:p></p>
<p class="MsoNormal">This patch includes changes to support Namespace Management updates from the NVMe specification 1.2.  This patch implements some fixes for handling non-continuous namespaces, adds handling for attached and detached namespaces, and implements
 new IOCTLs to create, delete, attach and detach namespaces.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have made a detailed overview of the changes in the text file in the attached zip file, the contents are also copied here below. 
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Password is intelnvme<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Please let me know if you have any questions.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Carolyn Foster<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This patch includes changes to support Namespace management, including create, delete,
<o:p></o:p></p>
<p class="MsoNormal">attach and detach namespace operations.  The new functionality in this patch was tested
<o:p></o:p></p>
<p class="MsoNormal">using proprietary tools.  We tested on Server 2008 R2, Server 2012 R2 and Windows 8.1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">******************<o:p></o:p></p>
<p class="MsoNormal">Design Assumptions<o:p></o:p></p>
<p class="MsoNormal">******************<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1. The numbering of namespaces need not be consecutive.<o:p></o:p></p>
<p class="MsoNormal">2. The namespace ID can be any number between 1 and 2^32.<o:p></o:p></p>
<p class="MsoNormal">3. A namespace is considered “active” only when it is created and attached to this controller.<o:p></o:p></p>
<p class="MsoNormal">4. A detached namespace, or one that is just created but not yet attached is considered “inactive”.
<o:p></o:p></p>
<p class="MsoNormal">5. A non-existent, or deleted namespace is considered “invalid”.<o:p></o:p></p>
<p class="MsoNormal">6. An active namespace will result in one (and only one) “Online” LUN.<o:p></o:p></p>
<p class="MsoNormal">7. Assuming single-host, and single-controller NVMe system.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">*********************<o:p></o:p></p>
<p class="MsoNormal">Architecture Overview<o:p></o:p></p>
<p class="MsoNormal">*********************<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There are four new IOCTLs for namespace management, Create, Delete, Attach and Detach.  An attached
<o:p></o:p></p>
<p class="MsoNormal">namespace will result in a visible LUN to the Windows OS.  The LUN extension table has been updated
<o:p></o:p></p>
<p class="MsoNormal">to have a Namespace status:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">typedef enum _NS_STATUS<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">    INVALID = 0,    //Namespace ID does not exist (not known to controller).<o:p></o:p></p>
<p class="MsoNormal">    INACTIVE,       //Namespace is created, but not attached to controller.<o:p></o:p></p>
<p class="MsoNormal">    ATTACHED        //Namespace is created and attached to controller.<o:p></o:p></p>
<p class="MsoNormal">} NS_STATUS;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In order to properly build the LUN extension table during initialization, we made changes to identify
<o:p></o:p></p>
<p class="MsoNormal">all namespaces, and to determine each namespace’s status.  These changes include new states in the
<o:p></o:p></p>
<p class="MsoNormal">Init State Machine NVMeRnningWaitOnListAttachedNs and NVMeRunningWaitOnListExistingNs.  The updated
<o:p></o:p></p>
<p class="MsoNormal">state machine steps are as follows:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1. Send an Identify Namespace command with CNS set to 02h. This should return a list of all active (created and attached) namespaces.<o:p></o:p></p>
<p class="MsoNormal">2. Go through the list and update LUN extension entries accordingly, one entry for each namespace. Set all LUN status to online.<o:p></o:p></p>
<p class="MsoNormal">3. Send an Identify Namespace command with CNS set to 10h. This should return a list of all existing namespaces in the system, active and inactive.<o:p></o:p></p>
<p class="MsoNormal">4. Go through the list. <o:p></o:p></p>
<p class="MsoNormal">5. If a corresponding LUN entry exists, skip this step, as this must have been an active namespace that was covered in previous steps.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">LUN extension entries are populated as follows:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When a namespace is created:<o:p></o:p></p>
<p class="MsoNormal">- namespaceId is set.<o:p></o:p></p>
<p class="MsoNormal">- nsStatus is set to “INACTIVE”<o:p></o:p></p>
<p class="MsoNormal">- slotStatus is set to “FREE”<o:p></o:p></p>
<p class="MsoNormal">- identifyData is partially set<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When a namespace is attached:<o:p></o:p></p>
<p class="MsoNormal">- drive is pulled for namespace identify<o:p></o:p></p>
<p class="MsoNormal">- identifyData is set accordingly<o:p></o:p></p>
<p class="MsoNormal">- nsStatus is set to “ATTACHED”<o:p></o:p></p>
<p class="MsoNormal">- slotStatus is set to “ONLINE”<o:p></o:p></p>
<p class="MsoNormal">- ReadOnly is set to FALSE<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When a namespace is detached:<o:p></o:p></p>
<p class="MsoNormal">- nsStatus is set to “INACTIVE”<o:p></o:p></p>
<p class="MsoNormal">- slotStatus is set to “FREE”<o:p></o:p></p>
<p class="MsoNormal">- ReadOnly is set to TRUE<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When a namespace is deleted:<o:p></o:p></p>
<p class="MsoNormal">- The entire LUN extension entry is set to 0.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There are also new reasons for the LUN to be offline:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">typedef enum _LUN_OFFLINE_REASON<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">    NOT_OFFLINE,<o:p></o:p></p>
<p class="MsoNormal">    FORMAT_IN_PROGRESS,<o:p></o:p></p>
<p class="MsoNormal">    DETACH_IN_PROGRESS,<o:p></o:p></p>
<p class="MsoNormal">    DELETE_IN_PROGRESS<o:p></o:p></p>
<p class="MsoNormal">    // Add more as needed<o:p></o:p></p>
<p class="MsoNormal">} LUN_OFFLINE_REASON;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When delete or detach requests are made, the driver will call StorportDeviceBusy to pause incoming requests,
<o:p></o:p></p>
<p class="MsoNormal">and the LUN is marked as offline with the appropriate reason.  When a user tries to delete an attached namespace,
<o:p></o:p></p>
<p class="MsoNormal">the driver will first send a detach command, and then the delete command.  
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">*****************<o:p></o:p></p>
<p class="MsoNormal">Known Limitations<o:p></o:p></p>
<p class="MsoNormal">*****************<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1. If no namepsaces are present, the driver will fail to load.<o:p></o:p></p>
<p class="MsoNormal">2. If an error happens on any one namespace during initialization the driver will fail to load.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The handling for these two scenarios could be strengthened and improved, which we did not get to in this patch.<o:p></o:p></p>
<p class="p1"><strong>Western Digital Corporation (and its subsidiaries) E-mail Confidentiality Notice & Disclaimer:</strong><o:p></o:p></p>
<p class="p1"><span class="s1">This e-mail and any files transmitted with it may contain confidential or legally privileged information of WDC and/or its affiliates, and are intended solely for the use of the individual or entity to which they are addressed.
 If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited. If you have received this e-mail in error, please notify the sender immediately and delete the e-mail
 in its entirety from your system.</span><o:p></o:p></p>
<p class="p1"><strong>Western Digital Corporation (and its subsidiaries) E-mail Confidentiality Notice & Disclaimer:</strong><o:p></o:p></p>
<p class="p1"><span class="s1">This e-mail and any files transmitted with it may contain confidential or legally privileged information of WDC and/or its affiliates, and are intended solely for the use of the individual or entity to which they are addressed.
 If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited. If you have received this e-mail in error, please notify the sender immediately and delete the e-mail
 in its entirety from your system.</span><o:p></o:p></p>
</div>
</body>
</html>