<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:x = "urn:schemas-microsoft-com:office:excel" xmlns:m = "http://schemas.microsoft.com/office/2004/12/omml"><HEAD><TITLE>Samsung Enterprise Portal mySingle</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE id=mysingle_style type=text/css>P {
MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
TD {
MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
LI {
MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
BODY {
FONT-SIZE: 9pt; FONT-FAMILY: Arial, arial; MARGIN: 10px; LINE-HEIGHT: 1.4
}
</STYLE>
<META content=IE=5 http-equiv=X-UA-Compatible>
<META content=IE=5 http-equiv=X-UA-Compatible>
<META name=GENERATOR content="MSHTML 11.00.9600.18212"></HEAD>
<BODY>
<P><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri">Thanks Tom and Ray.</SPAN></P>
<P><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri">I will submit the next patch on 9th May.</SPAN></P>
<P><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"></SPAN> </P>
<P><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri">- Suman</SPAN></P>
<P><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri"></SPAN> </P>
<P> </P>
<P>------- <B>Original Message</B> -------</P>
<P><B>Sender</B> : Thomas Freeman<thomas.freeman@hgst.com></P>
<P><B>Date</B> : Apr 29, 2016 23:22 (GMT+05:30)</P>
<P><B>Title</B> : RE: [nvmewin] Patch with changes for disk Read only support</P>
<P> </P>
<META name=Generator content=ActiveSquare>
<STYLE>v\:* {
BEHAVIOR: url(#default#VML)
}
o\:* {
BEHAVIOR: url(#default#VML)
}
w\:* {
BEHAVIOR: url(#default#VML)
}
.shape {
BEHAVIOR: url(#default#VML)
}
</STYLE>
<STYLE>@font-face {
font-family: Cambria Math;
}
@font-face {
font-family: Calibri;
}
@page WordSection1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; }
P.MsoNormal {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-believe-normal-left: yes
}
LI.MsoNormal {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-believe-normal-left: yes
}
DIV.MsoNormal {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-believe-normal-left: yes
}
A:link {
TEXT-DECORATION: underline; COLOR: #0563c1; mso-style-priority: 99
}
SPAN.MsoHyperlink {
TEXT-DECORATION: underline; COLOR: #0563c1; mso-style-priority: 99
}
A:visited {
TEXT-DECORATION: underline; COLOR: #954f72; mso-style-priority: 99
}
SPAN.MsoHyperlinkFollowed {
TEXT-DECORATION: underline; COLOR: #954f72; mso-style-priority: 99
}
P {
FONT-SIZE: 9pt; FONT-FAMILY: "Arial",sans-serif; MARGIN: 3.75pt 0in; mso-style-priority: 99
}
P.MsoListParagraph {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-style-priority: 34
}
LI.MsoListParagraph {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-style-priority: 34
}
DIV.MsoListParagraph {
FONT-SIZE: 12pt; FONT-FAMILY: "Times New Roman",serif; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-style-priority: 34
}
P.p1 {
FONT-SIZE: 9pt; FONT-FAMILY: "Arial",sans-serif; MARGIN: 3.75pt 0in; mso-style-priority: 99; mso-style-name: p1
}
LI.p1 {
FONT-SIZE: 9pt; FONT-FAMILY: "Arial",sans-serif; MARGIN: 3.75pt 0in; mso-style-priority: 99; mso-style-name: p1
}
DIV.p1 {
FONT-SIZE: 9pt; FONT-FAMILY: "Arial",sans-serif; MARGIN: 3.75pt 0in; mso-style-priority: 99; mso-style-name: p1
}
SPAN.apple-style-span {
mso-style-name: apple-style-span
}
SPAN.EmailStyle21 {
FONT-FAMILY: "Calibri",sans-serif; FONT-WEIGHT: normal; COLOR: #1f497d; FONT-STYLE: normal; mso-style-type: personal
}
SPAN.s1 {
mso-style-name: s1
}
SPAN.EmailStyle23 {
FONT-FAMILY: "Calibri",sans-serif; FONT-WEIGHT: normal; COLOR: #1f497d; FONT-STYLE: normal; mso-style-type: personal
}
SPAN.EmailStyle24 {
FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d; mso-style-type: personal
}
SPAN.EmailStyle25 {
FONT-FAMILY: "Calibri",sans-serif; FONT-WEIGHT: normal; COLOR: #002060; FONT-STYLE: normal; mso-style-type: personal
}
SPAN.EmailStyle27 {
FONT-FAMILY: "Calibri",sans-serif; FONT-WEIGHT: normal; COLOR: #1f497d; FONT-STYLE: normal; mso-style-type: personal-reply
}
.MsoChpDefault {
FONT-SIZE: 10pt; mso-style-type: export-only
}
DIV.WordSection1 {
page: WordSection1
}
</STYLE>
<META content=IE=5 http-equiv=X-UA-Compatible><X-BODY lang=EN-US style="MARGIN: 7.5pt" link="#0563C1" vlink="#954F72">
<DIV class=WordSection1>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>I accept the change. <o:p></o:p></SPAN></P>
<DIV>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Tom Freeman<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Software Engineer, Device Manager and Driver Development<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Western Digital Corporation<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>e. Thomas.freeman@hgst.com<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>o. +1-507-322-2311<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><IMG id=_x0000_i1030 src="cid:BGFC2LL5XOK0@namo.co.kr" width=150 height=47><o:p></o:p></SPAN></P></DIV>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<DIV>
<DIV style="BORDER-TOP: #e1e1e1 1pt solid; BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; PADDING-BOTTOM: 0in; PADDING-TOP: 3pt; PADDING-LEFT: 0in; BORDER-LEFT: medium none; PADDING-RIGHT: 0in">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>From:</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> nvmewin [mailto:nvmewin-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Robles, Raymond C<BR><B>Sent:</B> Friday, April 29, 2016 12:47 PM<BR><B>To:</B> suman.p@samsung.com; nvmewin@lists.openfabrics.org<BR><B>Cc:</B> PRAKASH BABU VEMULA <prakash.v@samsung.com>; ANSHUL SHARMA <anshul@samsung.com>; MANOJ THAPLIYAL <m.thapliyal@samsung.com><BR><B>Subject:</B> Re: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #002060'>Hi Suman,<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #002060'>I was waiting to hear back from Tom (HGST) on your latest changes. Once I get confirmation, we can close out this patch.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #002060'>Thanks… Ray<o:p></o:p></SPAN></P>
<DIV>
<DIV style="BORDER-TOP: #e1e1e1 1pt solid; BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; PADDING-BOTTOM: 0in; PADDING-TOP: 3pt; PADDING-LEFT: 0in; BORDER-LEFT: medium none; PADDING-RIGHT: 0in">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>From:</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> SUMAN PRAKASH B [mailto:suman.p@samsung.com] <BR><B>Sent:</B> Friday, April 29, 2016 3:50 AM<BR><B>To:</B> Robles, Raymond C <raymond.c.robles@intel.com>; nvmewin@lists.openfabrics.org<BR><B>Cc:</B> PRAKASH BABU VEMULA <prakash.v@samsung.com>; MANOJ THAPLIYAL <m.thapliyal@samsung.com>; ANSHUL SHARMA <anshul@samsung.com><BR><B>Subject:</B> Re: Re: RE: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p> </o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Hi Ray,</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Since Intel and HGST have reviewed the code, and I have incorporated the review comments provided by HGST, can we close out this patch?</SPAN><o:p></o:p></P>
<P><SPAN class=apple-style-span><SPAN style='FONT-SIZE: 11.5pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>We will be ready with our next patch by next week.</SPAN></SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Thanks,</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Suman</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P>------- <B>Original Message</B> -------<o:p></o:p></P>
<P><B>Sender</B> : SUMAN PRAKASH B<<A href="mailto:suman.p@samsung.com">suman.p@samsung.com</A>> Senior Chief Engineer/SSIR-SSD Solutions/Samsung Electronics<o:p></o:p></P>
<P><B>Date</B> : Apr 27, 2016 20:09 (GMT+05:30)<o:p></o:p></P>
<P><B>Title</B> : Re: RE: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Hi All,</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>I am sending the updated patch incorporating feedback from Tom. The changes are listed below. The password is samsungnvme</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>1. In SntiCompletionCallbackRoutine(), if the NVMe command Get Log Page fails, (SCT != Generic_command_status || SC != Successful completion), the buffer pSrbExt->pDatBuffer is freed.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>2. In SntiTranslateModeSenseResponse(), replaced </SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> Lun = pLunExt->namespaceId - 1;<BR> pDevExt->pLunExtensionTable[Lun]->IsNamespaceReadOnly = TRUE;</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>with</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> pLunExt->IsNamespaceReadOnly = TRUE;</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>3. In SntiReturnAllModePages(), following code is removed, as the same copy occurs in SntiTranslateModeSenseResponse() </SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> if (GET_DATA_BUFFER(pSrb) != NULL) {<BR> StorPortCopyMemory((PVOID)GET_DATA_BUFFER(pSrb),<BR> (PVOID)(pSrbExt->modeSenseBuf), GET_DATA_LENGTH(pSrb));<BR> }</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'> <o:p></o:p></SPAN></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Please let me know if you have any questions.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Thanks,<BR>Suman</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P>------- <B>Original Message</B> -------<o:p></o:p></P>
<P><B>Sender</B> : Foster, Carolyn D<<A href="mailto:carolyn.d.foster@intel.com">carolyn.d.foster@intel.com</A>><o:p></o:p></P>
<P><B>Date</B> : Apr 22, 2016 20:49 (GMT+05:30)<o:p></o:p></P>
<P><B>Title</B> : RE: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></P>
<P> <o:p></o:p></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Hi Suman, I don’t have any additional feedback for this patch. <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Carolyn<A name=_MailEndCompose></A><o:p></o:p></SPAN></P>
<DIV>
<DIV style="BORDER-TOP: #e1e1e1 1pt solid; BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; PADDING-BOTTOM: 0in; PADDING-TOP: 3pt; PADDING-LEFT: 0in; BORDER-LEFT: medium none; PADDING-RIGHT: 0in">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>From:</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> nvmewin [<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> Thursday, April 21, 2016 9:18 AM<BR><B>To:</B> <A href="mailto:suman.p@samsung.com">suman.p@samsung.com</A>; <A href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</A><BR><B>Subject:</B> Re: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p> </o:p></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Hi Suman,<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Thank you for the quick response. I agree with your comments.<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Thank you,<o:p></o:p></SPAN></P>
<DIV>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Tom Freeman<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Software Engineer, Device Manager and Driver Development<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Western Digital Corporation<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>e. <A href="mailto:Thomas.freeman@hgst.com">Thomas.freeman@hgst.com</A><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>o. +1-507-322-2311<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><IMG id=_x0000_i1025 border=0 src="cid:N3WZA6X7LP7K@namo.co.kr" width=150 height=47><o:p></o:p></SPAN></P></DIV>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<DIV>
<DIV style="BORDER-TOP: #e1e1e1 1pt solid; BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; PADDING-BOTTOM: 0in; PADDING-TOP: 3pt; PADDING-LEFT: 0in; BORDER-LEFT: medium none; PADDING-RIGHT: 0in">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>From:</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> SUMAN PRAKASH B [<A href="mailto:suman.p@samsung.com">mailto:suman.p@samsung.com</A>] <BR><B>Sent:</B> Thursday, April 21, 2016 9:55 AM<BR><B>To:</B> Thomas Freeman <<A href="mailto:thomas.freeman@hgst.com">thomas.freeman@hgst.com</A>>; <A href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</A><BR><B>Cc:</B> <A href="mailto:anshul@samsung.com">anshul@samsung.com</A>; <A href="mailto:prakash.v@samsung.com">prakash.v@samsung.com</A>; MANOJ THAPLIYAL <<A href="mailto:m.thapliyal@samsung.com">m.thapliyal@samsung.com</A>><BR><B>Subject:</B> Re: RE: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p> </o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Hi Tom,</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Thanks for the comments. Please find my replies below:</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style="FONT-SIZE: 11pt; COLOR: black">1. For mode sense with 0x3f, you set the WP in the response header. Shouldn WP also be set if any of those pages(0x8, 0xa, 0x1a, 0x1c) are individually requested?</SPAN><o:p></o:p></P>
<P><STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>[Suman] </SPAN></STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>Below is our observations:</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>a. During driver install/device enable from dev manager/hot insert, the mode pages 0x8 and 0x3f are invoked.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>b. During online/offline of disk, only 0x3f is invoked.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>So as per our understanding, during disk initialization, not all the mode pages will be called. But driver gets the mode page 0x3f every time during disk initialization. Also for Detection during run time, when driver returns SCSI_SENSE_DATA_PROTECT for sense data, driver gets the mode page 0x3f consistently. So we feel, setting the WP bit for mode page 0x3f will suffice.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>2. snti.c:8242</SPAN><o:p></o:p></P>
<P><STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>[Suman]</SPAN></STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> Agreed. We will use pLunExt->IsNamespaceReadOnly = TRUE;</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>3. Along with the new member, IsNamespaceReadOnly, the nvme_lun_extension also has ReadOnly. It seems like the setting of WP should take into account the value of both members. </SPAN><SPAN style='FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P><STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>[Suman]</SPAN></STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> The OFA driver supports only the first lba range type for a namespace, though spec supports 64 lba range types per NS. This has to be corrected first.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>Also we have to decide if the disk should be exposed as Read Only if any of the LBA range type is read only or only if the LBA 0 is read only.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>I feel this should be taken as a separate patch since this involves too many changes.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>4. If the NVMe command Get Log Page fails, (SCT != Generic_command_status || SC != Successful completion), the buffer pSrbExt->pDatBuffer is not freed. This corresponds to the allocation at snti.c:6530. </SPAN><o:p></o:p></P>
<P><STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>[Suman]</SPAN></STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> Agreed.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>5. snti.c:6539: I think the following can be eliminated. The same copy occurs during SntiTranslateModeSenseResponse - snti.c:8272.</SPAN><o:p></o:p></P>
<P><STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>[Suman]</SPAN></STRONG><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'> Agreed.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: blue'>Please let us know your opinion.</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Regards,</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: black'>Suman</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P>------- <B>Original Message</B> -------<o:p></o:p></P>
<P><B>Sender</B> : Thomas Freeman<<A href="mailto:thomas.freeman@hgst.com">thomas.freeman@hgst.com</A>><o:p></o:p></P>
<P><B>Date</B> : Apr 20, 2016 21:59 (GMT+05:30)<o:p></o:p></P>
<P><B>Title</B> : RE: [nvmewin] Patch with changes for disk Read only support<o:p></o:p></P>
<P> <o:p></o:p></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Hi Suman,<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>After reviewing the code, I have a few questions/comments:<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoListParagraph style="MARGIN-BOTTOM: 7.5pt; MARGIN-LEFT: 25.5pt; MARGIN-RIGHT: 15pt; TEXT-INDENT: -0.25in; mso-margin-top-alt: 7.5pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>1.</SPAN><SPAN style="FONT-SIZE: 7pt; COLOR: #1f497d"> </SPAN><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>For mode sense with 0x3f, you set the WP in the response header. Shouldn WP also be set if any of those pages(0x8, 0xa, 0x1a, 0x1c) are individually requested?<o:p></o:p></SPAN></P>
<P class=MsoListParagraph style="MARGIN-BOTTOM: 7.5pt; MARGIN-LEFT: 25.5pt; MARGIN-RIGHT: 15pt; mso-margin-top-alt: 7.5pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>2. snti.c:8242<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Lun = pLunExt->namespaceId - 1;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>pDevExt->pLunExtensionTable[Lun]->IsNamespaceReadOnly = TRUE;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>These 2 lines can be replaced with <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>pLunExt->IsNamespaceReadOnly = TRUE;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.1in; MARGIN-RIGHT: 0.1in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Also, the original code is not a reliable way to determine the LUN id. <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Here is an example where there doesn't work. The device has attached namespaces 1,3 & 4 and Existing namespaces of 1, 2, 3 & 4. LUNs 0-3 will correspond to namespaces 1,3,4,2. For namespace 3, the calculation NSID-1=lun will incorrectly give you LUNid of 2. <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>3. Along with the new member, IsNamespaceReadOnly, the nvme_lun_extension also has ReadOnly. It seems like the setting of WP should take into account the value of both members. <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>4. If the NVMe command Get Log Page fails, (SCT != Generic_command_status || SC != Successful completion), the buffer pSrbExt->pDatBuffer is not freed. This corresponds to the allocation at snti.c:6530. <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>5. snti.c:6539: I think the following can be eliminated. The same copy occurs during SntiTranslateModeSenseResponse - snti.c:8272.<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>if (GET_DATA_BUFFER(pSrb) != NULL) {<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'> StorPortCopyMemory((PVOID)GET_DATA_BUFFER(pSrb),<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 7.5pt; MARGIN-RIGHT: 7.5pt; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'> (PVOID)(pSrbExt->modeSenseBuf), GET_DATA_LENGTH(pSrb));<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'> }<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'>Let me know if you have questions,<o:p></o:p></SPAN></P>
<DIV>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Tom Freeman<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Software Engineer, Device Manager and Driver Development<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>Western Digital Corporation<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>e. <A href="mailto:Thomas.freeman@hgst.com">Thomas.freeman@hgst.com</A><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 10pt; FONT-FAMILY: "Arial",sans-serif; COLOR: #1f497d'>o. +1-507-322-2311<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><IMG id=Picture_x0020_5 border=0 src="cid:4CBBEM6S04A2@namo.co.kr" width=150 height=47><o:p></o:p></SPAN></P></DIV>
<P class=MsoNormal><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif; COLOR: #1f497d'><o:p> </o:p></SPAN></P>
<DIV>
<DIV style="BORDER-TOP: #e1e1e1 1pt solid; BORDER-RIGHT: medium none; BORDER-BOTTOM: medium none; PADDING-BOTTOM: 0in; PADDING-TOP: 3pt; PADDING-LEFT: 0in; BORDER-LEFT: medium none; PADDING-RIGHT: 0in">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>From:</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> nvmewin [<A href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</A>] <B>On Behalf Of </B>SUMAN PRAKASH B<BR><B>Sent:</B> Tuesday, April 19, 2016 8:45 AM<BR><B>To:</B> <A href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</A><BR><B>Cc:</B> <A href="mailto:sukka.kim@samsung.com">sukka.kim@samsung.com</A>; <A href="mailto:prakash.v@samsung.com">prakash.v@samsung.com</A>; <A href="mailto:anshul@samsung.com">anshul@samsung.com</A>; MANOJ THAPLIYAL <<A href="mailto:m.thapliyal@samsung.com">m.thapliyal@samsung.com</A>>; <A href="mailto:tru.nguyen@ssi.samsung.com">tru.nguyen@ssi.samsung.com</A><BR><B>Subject:</B> [nvmewin] Patch with changes for disk Read only support<o:p></o:p></SPAN></P></DIV></DIV>
<P class=MsoNormal><o:p> </o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Hi all,<BR><BR>This patch includes changes for supporting NVMe Disk read only mode.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>I have made a detailed overview of the changes in the attached doc file(the contents are also copied here below) and the attached zip file contains the source code.</SPAN><o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Password is samsungnvme<BR> <BR>Please let me know if you have any questions.<BR> <BR>Thanks,<BR>Suman</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>******************</SPAN><o:p></o:p></P>
<P> <o:p></o:p></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>NVMe Disk End of Life support:</SPAN></U></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; TEXT-INDENT: 0.5in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Whenever NVMe disk exhausts the P/E cycles, the disk become Read only(reaches End Of Life). In this case, the user should be able to read the data from the disk for backup or migration purpose. To achieve this, the driver should inform the kernel that disk has become read only. If driver does not inform the kernel, the disk will be unusable from Windows.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>The device has to be detected as Read only in following 2 scenarios – </SPAN></U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>a. Detection during device hot plug </SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; TEXT-INDENT: 0.5in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>When a Read only device is hot inserted, the kernel should be able to enumerate the device as Read only and alert the user accordingly. When the SSD is hot inserted, as part of disk initialization process, a SCSI mode sense command with page code ‘Return all pages’ (0x3f) is requested by the kernel. The mode page has a mode parameter header, which has a WP bit in the 'Device specific Parameter' field which indicates if the device is Write Protected for some reason. We can make use of this field to report to the kernel that the device has become Read only.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; TEXT-INDENT: 0.5in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>When the miniport driver receives this request, the NVM Express command Get log page is built with log identifier 'SMART / Health Information' (0x2) and send to the device. The SMART data has a 'Critical Warning' field in which a bit 'MediaInReadOnlyMode' is set whenever the media becomes Read only. So if the device returns SMART data with this bit set, the miniport driver sets the Device specific parameter – WP bit in mode parameter header and completes the command.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; TEXT-INDENT: 0.5in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>When the WP bit is set in the mode parameter header, the kernel will understand that the device is Write protected and hence kernel will not send any more write requests.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>b. Detection during run time</SPAN></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>When the device is in use and the Write exhausts and device becomes Read only, the kernel has to immediately report to the user that device has become write protected. To achieve this, whenever the device receives a NVMe Write request after it has become Read only, the device sets SCT to Command Specific Status and SC to 'Attempted Write to Read Only Range' in response to the write command. For this the following sense data is returned for the corresponding SCSI write command. <o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Sense data – SCSI_SENSE_DATA_PROTECT, ASC – SCSI_ADSENSE_WRITE_PROTECT and ASCQ – SCSI_ADSENSE_NO_SENSE.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>With this sense data, the kernel will understand that the device is in Write protected state for which the Mode sense command with mode page 'Return all pages' will be send to the device. Again with the NVM Express Get log page – SMART command, the miniport driver will return the mode sense 'Data Specific parameter' accordingly.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> <o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Code changes:</SPAN></U></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>1. In SntiReturnAllModePages(), build get log page for SMART/health information and send to device.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>2. In SntiTranslateModeSenseResponse(), for log page MODE_SENSE_RETURN_ALL, set the Write protect bit in device specific parameter in the mode header based on the media in read only mode bit(03) in critical warning field returned in SMART/health log page.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>3. The checking for volatile write cache is moved from SntiReturnAllModePages() to SntiTranslateModeSenseResponse() after successful completion of get log page command.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> <o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>We have tested the following:</SPAN></U></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>a. On a Read only NVMe SSD, install OFA driver with these changes. In the disk management tool, the status of disk is shown as Read Only. Please find attached “DiskMgmt.jpg” (sometimes requires a system restart after driver installation).<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>b. Hot insert a RO NVMe SSD and observe status as Read Only in disk management tool.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>c. On NVMe SSD, which has less % of available spare(for example 10%), execute io meter tool with write commands. When available spare reaches 0%, the error count in io meter tools starts increasing(i.e. write commands fails with the sense data, as explained in above sections), and status becomes Read Only in disk management tool.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>d. After disk becomes RO, when we try to copy files to the RO drive, Windows show message "The disk is write protected". Please find attached “FileCopy.jpg”<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><B><U><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>Note: </SPAN></U></B><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>a. As per NVMe spec 1.2, section 5.10.1.2, "There is not namespace specific information defined in the SMART / Health log page in this revision, thus the global log page and namespaces specific log page contain identical information". So when testing with multi namespace, when 1 namespace becomes RO, all the namespace will become RO. Spec has to be defined to have separate SMART /Health data per namespace.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'>b. For testing, if there is no NVMe SSD which is in RO state, the following changes can to be made in the driver to test this feature:<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> 1. In SntiTranslateModeSenseResponse(), hardcode pNvmeLogPage->CriticalWarning.MediaInReadOnlyMode to 1, before checking for the value. This can be done for per namespace also.<o:p></o:p></SPAN></P>
<P style="MARGIN-BOTTOM: 10pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; mso-margin-top-alt: 0in"><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'> 2. In SntiMapCompletionStatus(), for NVMe write command, hardcode statusCodeType to COMMAND_SPECIFIC_ERRORS and statusCode to 0x82. This can be done for per namespace also.<o:p></o:p></SPAN></P>
<P><SPAN style='FONT-SIZE: 11pt; FONT-FAMILY: "Calibri",sans-serif'><BR><BR></SPAN> <o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 1pt solid; PADDING-BOTTOM: 0in; PADDING-TOP: 0in; PADDING-LEFT: 0in; BORDER-LEFT: windowtext 1pt solid; PADDING-RIGHT: 0in"><IMG id=_x0000_i1027 border=0 alt="Image removed by sender." src="cid:EW9BEWXXYKEN@namo.co.kr" width=100 height=100></SPAN><o:p></o:p></P>
<P class=p1><STRONG><SPAN style='FONT-FAMILY: "Arial",sans-serif'>Western Digital Corporation (and its subsidiaries) E-mail Confidentiality Notice & Disclaimer:</SPAN></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> <o:p></o:p></P>
<P> <o:p></o:p></P>
<P> <o:p></o:p></P>
<P> <o:p></o:p></P>
<P> <o:p></o:p></P>
<P> <o:p></o:p></P>
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<TABLE id=confidentialsignimg>
<TBODY>
<TR>
<TD NAMO_LOCK>
<P><IMG border=0 src="cid:9INH0GAN05W5@namo.co.kr"></P></TD></TR></TBODY></TABLE></DIV></BODY></HTML><img src='http://ext.samsung.net/mailcheck/SeenTimeChecker?do=3af3b79521f261fabf28392e74163c53ce46d8692645e6997d9badbdf7e30042d1afaaba7860cdcd9564217c646641ad61e16949eaa607501b20909a04efd4d2748cfe1d4e847419cf878f9a26ce15a0' border=0 width=0 height=0 style='display:none'>