<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]-->
<title>Samsung Enterprise Portal mySingle</title>
<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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {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;
        mso-believe-normal-left:yes;}
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
        {mso-style-priority:99;
        margin-top:3.75pt;
        margin-right:0in;
        margin-bottom:3.75pt;
        margin-left:0in;
        font-size:9.0pt;
        font-family:"Arial",sans-serif;}
span.EmailStyle19
        {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;}
--></style><![if mso 9]><style>p.MsoNormal
        {margin-left:7.5pt;}
</style><![endif]><!--[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" style="margin-left:7.5pt;margin-top:7.5pt;margin-right:7.5pt;margin-bottom:7.5pt">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Suman, Thank you for the feedback.  I will review your comments and make the appropriate changes.  I will try to send the updates out for review in the next
 two weeks. <o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Carolyn<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" style="margin:0in;margin-bottom:.0001pt"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> SUMAN PRAKASH B [mailto:suman.p@samsung.com]
<br>
<b>Sent:</b> Wednesday, January 27, 2016 9:58 AM<br>
<b>To:</b> nvmewin-request@lists.openfabrics.org; nvmewin@lists.openfabrics.org; Foster, Carolyn D <carolyn.d.foster@intel.com>; Robles, Raymond C <raymond.c.robles@intel.com><br>
<b>Cc:</b> judy.brock@ssi.samsung.com; tru.nguyen@ssi.samsung.com; MANOJ THAPLIYAL <m.thapliyal@samsung.com>; anshul@samsung.com<br>
<b>Subject:</b> Review comments for Namespace Management patch<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hi Carolyn,<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Please find below our Review comments and Queries.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p><strong><u><span style="font-size:12.0pt;font-family:"Arial",sans-serif">Review Comments:</span></u></strong><o:p></o:p></p>
<p><span style="font-size:10.0pt">1.  Function:  NVMeIoctlNamespaceMgmt()   Line no:  4005   File: nvmeStd.c<br>
In the NVMeIoctlNamespaceMgmt() function, the namesapce status verification can be done only incase of NAMESPACE_MANAGEMENT_DELETE as for NAMESPACE_MANAGEMENT_CREATE, the NSID value is reserved.<br>
NVMeGetNamespaceStatusAndSlot(pDevExt, currentNSID, &lunId); This function can be moved inside the below condition.<br>
   if (pNsMgmtDW10->SEL == NAMESPACE_MANAGEMENT_DELETE) { }</span><o:p></o:p></p>
<p> <o:p></o:p></p>
<p>2. Function:  NVMeIoctlNamespaceMgmt()   Line no:  4017   File: nvmeStd.c<br>
The DataBuffer(pNvmePtIoctl->DataBuffer) may not be allocated any memory as no data structure required for NAMESPACE_MANAGEMENT_DELETE operation.<br>
pNsCtrlsList = (PNVMe_CONTROLLER_LIST)&pNvmePtIoctl->DataBuffer; <o:p></o:p></p>
<p> It is good to allocate memory for pNsCtrlsList and free the memory after command completion.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>3. Function:  NVMeCompletionNsAttachment() Line No: 4138  File: nvmeStd.c<br>
It is safe to set SEL field  to <span style="font-size:10.0pt;font-family:Consolas;color:#6F008A">
NAMESPACE_MANAGEMENT_DELETE </span> in the pNsMgmtCmd structure.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>4. Function: NVMeIoctlNamespaceAttachment() Line no: 3931  File: nvmeStd.c<o:p></o:p></p>
<p>The StorPortNotification(BusChangeDetected, pDevExt); has been called twice while performing the NAMESPACE DELETE.<o:p></o:p></p>
<p>This is for the below sequence of operations.<o:p></o:p></p>
<p>    a. Create Namespace<o:p></o:p></p>
<p>    b. Attach Namespace<o:p></o:p></p>
<p>    c. Delete Namespace<o:p></o:p></p>
<p>The overall execution flow looks as below.<o:p></o:p></p>
<p>1) Namespace Delete command issued.<br>
2) Set:   pLunExt->slotStatus = OFFLINE;<br>
       pLunExt->offlineReason = DELETE_IN_PROGRESS;<br>
 <br>
3) StorPortNotification(BusChangeDetected, pDevExt); <o:p></o:p></p>
<p>4) Namespace Detach Command Issued<br>
5) Detach Command Success<o:p></o:p></p>
<p>6) Set: pLunExt->nsStatus = INACTIVE;<br>
        pLunExt->slotStatus = FREE;<br>
      pLunExt->ReadOnly = TRUE; <o:p></o:p></p>
<p>7)  pDevExt->visibleLuns--;<br>
8) StorPortNotification(BusChangeDetected, pDevExt);<o:p></o:p></p>
<p>9) Delete Command Issued<br>
10)Delete Command Success<br>
11) Set Lun Extn Table to zero<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>The same behavior observed while executing NAMESPACE DETACH command.<o:p></o:p></p>
<p>This is for the below sequence of operations.<o:p></o:p></p>
<p>    a. Create Namespace<o:p></o:p></p>
<p>    b. Attach Namespace<o:p></o:p></p>
<p>    c. Detach Namespace<o:p></o:p></p>
<p>The overall execution flow looks  as below.<o:p></o:p></p>
<p>1) Namespace Detach command issued.<br>
2) Set:   pLunExt->slotStatus = OFFLINE;<br>
       pLunExt->offlineReason = DETACH_IN_PROGRESS;<br>
 <br>
3) StorPortNotification(BusChangeDetected, pDevExt); <o:p></o:p></p>
<p>4) Detach Command Success<o:p></o:p></p>
<p>5) Set: pLunExt->nsStatus = INACTIVE;<br>
        pLunExt->slotStatus = FREE;<br>
       pLunExt->ReadOnly = TRUE; <o:p></o:p></p>
<p>       pLunExt->OfflineReason = NOT_OFFLINE; <o:p></o:p></p>
<p>6)  pDevExt->visibleLuns--;<br>
7) StorPortNotification(BusChangeDetected, pDevExt); <o:p></o:p></p>
<p>This StorPortNotification() call of multiple times can be avoided.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p><strong><u><span style="font-size:12.0pt;font-family:"Arial",sans-serif">Queries:</span></u></strong><o:p></o:p></p>
<p>1) Looks like The Identify namespace, set feature/get feature commands during the init state machine have been sent to  inactive namespaces also.
<o:p></o:p></p>
<p>For example one of the below check condition, leads to the above issue. This has to be taken care in all the scenario.<o:p></o:p></p>
<p>Function: NVMeSetFeaturesCompletion()   Line no:  1631  File: nvmeInit.c<br>
  if (pAE->DriverState.TtlLbaRangeExamined ==<br>
    pAE->DriverState.NumKnownNamespaces) {<br>
                /* We have called identify namespace as well as get/set<br>
                 * features for each of the NN namespaces that exist.<br>
                 * Move on to the next state in the state machine.<br>
                 */<br>
                pAE->visibleLuns = pAE->DriverState.VisibleNamespacesExamined;<br>
                pAE->DriverState.NextDriverState = NVMeWaitOnSetupQueues;<br>
            }<o:p></o:p></p>
<p>Could you please confirm is it required to issue commands to the inactive namespaces also? If not, we can keep track of active namespaces and issue commands to only those namespaces.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>2) Function: NVMeCompletionNsAttachment() Line no: 4099  File: nvmeStd.c<o:p></o:p></p>
<p><br>
Could you please confirm if its a Identify Controller or Identify Namespace commands?<o:p></o:p></p>
<p>If this is Identify Controller command, the NSID need not be set and CNS should be mentioned.<o:p></o:p></p>
<p>If this is Identify Namespace command, then size of PRP preparation should not be
<span style="font-size:10.0pt;font-family:Consolas;color:blue">sizeof</span><span style="font-size:10.0pt;font-family:Consolas;color:teal">(</span><span style="font-size:10.0pt;font-family:Consolas;color:#2B91AF">ADMIN_IDENTIFY_CONTROLLER</span><span style="font-size:10.0pt;font-family:Consolas;color:teal">)
 at line no: 4102</span><o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Thanks,<o:p></o:p></p>
<p>Suman<o:p></o:p></p>
<p> <o:p></o:p></p>
<p><br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Fri, 15 Jan 2016 23:57:26 +0000<br>
From: "Foster, Carolyn D" <<a href="mailto:carolyn.d.foster@intel.com">carolyn.d.foster@intel.com</a>><br>
To: "<a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a>" <<a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a>><br>
Subject: [nvmewin] Patch with changes for Namespace Management<br>
Message-ID:<br>
 <<a href="mailto:B3A485AFDDB1DD4598621E85E8EB67A83C26A801@FMSMSX105.amr.corp.intel.com">B3A485AFDDB1DD4598621E85E8EB67A83C26A801@FMSMSX105.amr.corp.intel.com</a>><br>
 <br>
Content-Type: text/plain; charset="us-ascii"<br>
<br>
Hi all,<br>
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.<br>
<br>
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.<br>
<br>
Password is intelnvme<br>
<br>
<br>
Please let me know if you have any questions.<br>
<br>
Carolyn Foster<br>
<br>
<br>
<br>
This patch includes changes to support Namespace management, including create, delete,<br>
attach and detach namespace operations.  The new functionality in this patch was tested<br>
using proprietary tools.  We tested on Server 2008 R2, Server 2012 R2 and Windows 8.1<br>
<br>
<br>
******************<br>
Design Assumptions<br>
******************<br>
<br>
1. The numbering of namespaces need not be consecutive.<br>
2. The namespace ID can be any number between 1 and 2^32.<br>
3. A namespace is considered "active" only when it is created and attached to this controller.<br>
4. A detached namespace, or one that is just created but not yet attached is considered "inactive".<br>
5. A non-existent, or deleted namespace is considered "invalid".<br>
6. An active namespace will result in one (and only one) "Online" LUN.<br>
7. Assuming single-host, and single-controller NVMe system.<br>
<br>
*********************<br>
Architecture Overview<br>
*********************<br>
<br>
There are four new IOCTLs for namespace management, Create, Delete, Attach and Detach.  An attached<br>
namespace will result in a visible LUN to the Windows OS.  The LUN extension table has been updated<br>
to have a Namespace status:<br>
<br>
typedef enum _NS_STATUS<br>
{<br>
    INVALID = 0,    //Namespace ID does not exist (not known to controller).<br>
    INACTIVE,       //Namespace is created, but not attached to controller.<br>
    ATTACHED        //Namespace is created and attached to controller.<br>
} NS_STATUS;<br>
<br>
In order to properly build the LUN extension table during initialization, we made changes to identify<br>
all namespaces, and to determine each namespace's status.  These changes include new states in the<br>
Init State Machine NVMeRnningWaitOnListAttachedNs and NVMeRunningWaitOnListExistingNs.  The updated<br>
state machine steps are as follows:<br>
<br>
1. Send an Identify Namespace command with CNS set to 02h. This should return a list of all active (created and attached) namespaces.<br>
2. Go through the list and update LUN extension entries accordingly, one entry for each namespace. Set all LUN status to online.<br>
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.<br>
4. Go through the list.<br>
5. If a corresponding LUN entry exists, skip this step, as this must have been an active namespace that was covered in previous steps.<br>
LUN extension entries are populated as follows:<br>
<br>
When a namespace is created:<br>
- namespaceId is set.<br>
- nsStatus is set to "INACTIVE"<br>
- slotStatus is set to "FREE"<br>
- identifyData is partially set<br>
<br>
When a namespace is attached:<br>
- drive is pulled for namespace identify<br>
- identifyData is set accordingly<br>
- nsStatus is set to "ATTACHED"<br>
- slotStatus is set to "ONLINE"<br>
- ReadOnly is set to FALSE<br>
<br>
When a namespace is detached:<br>
- nsStatus is set to "INACTIVE"<br>
- slotStatus is set to "FREE"<br>
- ReadOnly is set to TRUE<br>
<br>
When a namespace is deleted:<br>
- The entire LUN extension entry is set to 0.<br>
<br>
There are also new reasons for the LUN to be offline:<br>
<br>
typedef enum _LUN_OFFLINE_REASON<br>
{<br>
    NOT_OFFLINE,<br>
    FORMAT_IN_PROGRESS,<br>
    DETACH_IN_PROGRESS,<br>
    DELETE_IN_PROGRESS<br>
    // Add more as needed<br>
} LUN_OFFLINE_REASON;<br>
<br>
When delete or detach requests are made, the driver will call StorportDeviceBusy to pause incoming requests,<br>
and the LUN is marked as offline with the appropriate reason.  When a user tries to delete an attached namespace,<br>
the driver will first send a detach command, and then the delete command.<br>
<br>
*****************<br>
Known Limitations<br>
*****************<br>
<br>
1. If no namepsaces are present, the driver will fail to load.<br>
2. If an error happens on any one namespace during initialization the driver will fail to load.<br>
<br>
The handling for these two scenarios could be strengthened and improved, which we did not get to in this patch.<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://lists.openfabrics.org/pipermail/nvmewin/attachments/20160115/6e282642/attachment.html">http://lists.openfabrics.org/pipermail/nvmewin/attachments/20160115/6e282642/attachment.html</a>><br>
-------------- next part --------------<br>
A non-text attachment was scrubbed...<br>
Name: IntelNamespaceManagementV1.zip<br>
Type: application/x-zip-compressed<br>
Size: 222253 bytes<br>
Desc: IntelNamespaceManagementV1.zip<br>
URL: <<a href="http://lists.openfabrics.org/pipermail/nvmewin/attachments/20160115/6e282642/attachment.bin">http://lists.openfabrics.org/pipermail/nvmewin/attachments/20160115/6e282642/attachment.bin</a>><br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
nvmewin mailing list<br>
<a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<a href="http://lists.openfabrics.org/mailman/listinfo/nvmewin">http://lists.openfabrics.org/mailman/listinfo/nvmewin</a><br>
<br>
<br>
End of nvmewin Digest, Vol 49, Issue 3<br>
**************************************<br>
<br>
<p>&nbsp;</p><p>&nbsp;</p><o:p></o:p></p>
<p class="MsoNormal" style="margin:0in;margin-bottom:.0001pt"><img border="0" id="_x0000_i1025" src="http://ext.samsung.net/mailcheck/SeenTimeChecker?do=28bccb0e7a1e0d06003ec0f993c867c045ed77d46f93657db8a3fd6b4a260c0ed33a9d35f6e1735f20a30c65ae77ad69c7b41e955949e5c8a728c55b39cc59eacf878f9a26ce15a0"><o:p></o:p></p>
</div>
</body>
</html>