--- /dev/null
+*autogen*
+tmp.*
+draft*.xml
+draft*.html
+*.txt
+*.swp
+*.bak
+*.m4
+*.patch
+*.mbox
+*.x
+nfsv42.x
+testx.d
--- /dev/null
+# Copyright (C) The IETF Trust (2014)
+#
+
+YEAR=`date +%Y`
+MONTH=`date +%B`
+DAY=`date +%d`
+PREVVERS=00
+VERS=00
+
+XML2RFC=xml2rfc
+
+BASEDOC=draft-hellwig-nfsv4-scsi-layout-nvme
+DOC_PREFIX=scsi_nvme
+
+autogen/%.xml : %.x
+ @mkdir -p autogen
+ @rm -f $@.tmp $@
+ @cat $@.tmp | sed 's/^\%//' | sed 's/</\</g'| \
+ awk ' \
+ BEGIN { print "<figure>"; print" <artwork>"; } \
+ { print $0 ; } \
+ END { print " </artwork>"; print"</figure>" ; } ' \
+ | expand > $@
+ @rm -f $@.tmp
+
+all: html txt
+
+#
+# Build the stuff needed to ensure integrity of document.
+common: testx html
+
+txt: $(BASEDOC)-$(VERS).txt
+
+html: $(BASEDOC)-$(VERS).html
+
+xml: $(BASEDOC)-$(VERS).xml
+
+clobber:
+ $(RM) $(BASEDOC)-$(VERS).txt \
+ $(BASEDOC)-$(VERS).html \
+ export SPECVERS := $(VERS)
+ export VERS := $(VERS)
+
+clean:
+ rm -f $(AUTOGEN)
+ rm -rf autogen
+ rm -f $(BASEDOC)-$(VERS).xml
+ rm -f $(BASEDOC)-$(VERS).html
+ rm -f $(BASEDOC)-$(VERS).txt
+ rm -rf draft-$(VERS)
+ rm -f draft-$(VERS).tar.gz
+ rm -rf testx.d
+ rm -rf draft-tmp.xml
+
+# Parallel All
+pall:
+ $(MAKE) xml
+ ( $(MAKE) txt ; echo .txt done ) & \
+ ( $(MAKE) html ; echo .html done ) & \
+ wait
+
+$(BASEDOC)-$(VERS).txt: $(BASEDOC)-$(VERS).xml
+ $(XML2RFC) --text $(BASEDOC)-$(VERS).xml -o $@
+
+$(BASEDOC)-$(VERS).html: $(BASEDOC)-$(VERS).xml
+ $(XML2RFC) --html $(BASEDOC)-$(VERS).xml -o $@
+
+${DOC_PREFIX}_front_autogen.xml: ${DOC_PREFIX}_front.xml Makefile
+ sed -e s/DAYVAR/${DAY}/g -e s/MONTHVAR/${MONTH}/g -e s/YEARVAR/${YEAR}/g < ${DOC_PREFIX}_front.xml > ${DOC_PREFIX}_front_autogen.xml
+
+${DOC_PREFIX}_rfc_start_autogen.xml: ${DOC_PREFIX}_rfc_start.xml Makefile
+ sed -e s/VERSIONVAR/${VERS}/g < ${DOC_PREFIX}_rfc_start.xml > ${DOC_PREFIX}_rfc_start_autogen.xml
+
+AUTOGEN = \
+ ${DOC_PREFIX}_front_autogen.xml \
+ ${DOC_PREFIX}_rfc_start_autogen.xml
+
+START_PREGEN = ${DOC_PREFIX}_rfc_start.xml
+START= ${DOC_PREFIX}_rfc_start_autogen.xml
+END= ${DOC_PREFIX}_rfc_end.xml
+
+FRONT_PREGEN = ${DOC_PREFIX}_front.xml
+
+IDXMLSRC_BASE = \
+ ${DOC_PREFIX}_middle.xml \
+ ${DOC_PREFIX}_back_front.xml \
+ ${DOC_PREFIX}_back_references.xml \
+ ${DOC_PREFIX}_back_back.xml
+
+IDCONTENTS = ${DOC_PREFIX}_front_autogen.xml $(IDXMLSRC_BASE)
+
+IDXMLSRC = ${DOC_PREFIX}_front.xml $(IDXMLSRC_BASE)
+
+draft-tmp.xml: $(START) Makefile $(END) $(IDCONTENTS)
+ rm -f $@ $@.tmp
+ cp $(START) $@.tmp
+ chmod +w $@.tmp
+ for i in $(IDCONTENTS) ; do cat $$i >> $@.tmp ; done
+ cat $(END) >> $@.tmp
+ mv $@.tmp $@
+
+$(BASEDOC)-$(VERS).xml: draft-tmp.xml $(IDCONTENTS) $(AUTOGEN)
+ rm -f $@
+ cp draft-tmp.xml $@
+
+genhtml: Makefile gendraft html txt draft-$(VERS).tar
+ ./gendraft draft-$(PREVVERS) \
+ $(BASEDOC)-$(PREVVERS).txt \
+ draft-$(VERS) \
+ $(BASEDOC)-$(VERS).txt \
+ $(BASEDOC)-$(VERS).html \
+ $(BASEDOC)-dot-x-04.txt \
+ $(BASEDOC)-dot-x-05.txt \
+ draft-$(VERS).tar.gz
+
+testx:
+ rm -rf testx.d
+ mkdir testx.d
+ ( cd testx.d ; \
+ rpcgen -a labelednfs.x ; \
+ $(MAKE) -f make* )
+
+spellcheck: $(IDXMLSRC)
+ for f in $(IDXMLSRC); do echo "Spell Check of $$f"; spell +dictionary.txt $$f; done
+
+AUXFILES = \
+ dictionary.txt \
+ gendraft \
+ Makefile \
+ errortbl \
+ rfcdiff \
+ xml2rfc_wrapper.sh \
+ xml2rfc
+
+DRAFTFILES = \
+ $(BASEDOC)-$(VERS).txt \
+ $(BASEDOC)-$(VERS).html \
+ $(BASEDOC)-$(VERS).xml
+
+draft-$(VERS).tar: $(IDCONTENTS) $(START_PREGEN) $(FRONT_PREGEN) $(AUXFILES) $(DRAFTFILES)
+ rm -f draft-$(VERS).tar.gz
+ tar -cvf draft-$(VERS).tar \
+ $(START_PREGEN) \
+ $(END) \
+ $(FRONT_PREGEN) \
+ $(IDCONTENTS) \
+ $(AUXFILES) \
+ $(DRAFTFILES) \
+ gzip draft-$(VERS).tar
--- /dev/null
+This draft describes how to use the pNFS SCSI layout with NVMe
+
+http://www.ietf.org/html.charters/nfsv4-charter.html
+http://www.ietf.org/mail-archive/web/nfsv4/index.html
+
+NOTE: The drafts contained here may change after it is posted to the IETF site. The ITEF site is always the definitive authority on content.
+
+To compile the XML files into text files:
+
+1. Install xml2rfc
+ http://xml.resource.org/
+
+ These instructions have been tested with version 2
+
+2. Build
+
+ > make
+
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+</back>
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+<back>
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+<references title="Normative References">
+ <reference anchor='RFC2119'>
+ <front>
+ <title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
+ <author initials='S.' surname='Bradner' fullname='Scott Bradner'>
+ <organization>Harvard University</organization>
+ <address>
+ <postal>
+ <street>1350 Mass. Ave.</street>
+ <street>Cambridge</street>
+ <street>MA 02138</street>
+ </postal>
+ <phone>- +1 617 495 3864</phone>
+ <email>sob@harvard.edu</email>
+ </address>
+ </author>
+ <date year='1997' month='March' />
+ </front>
+ </reference>
+
+ <reference anchor='scsi-layout'>
+ <front>
+ <title>Parallel NFS (pNFS) SCSI Layout</title>
+ <author initials='C.' surname='Hellwig' fullname='Christoph Hellwig'/>
+ <date month='June' year='2016'/>
+ </front>
+ </reference>
+
+ <reference anchor='SPC4'>
+ <front>
+ <title>SCSI Primary Commands-4</title>
+ <author>
+ <organization>INCITS Technical Committee T10</organization>
+ </author>
+ <date year="2015"/>
+ </front>
+ <seriesInfo name="ANSI INCITS" value="513-2015"/>
+ </reference>
+
+ <reference anchor='SBC3'>
+ <front>
+ <title>SCSI Block Commands-3</title>
+ <author>
+ <organization>INCITS Technical Committee T10</organization>
+ </author>
+ <date year="2014"/>
+ </front>
+ <seriesInfo name="ANSI INCITS" value="INCITS 514-2014"/>
+ <seriesInfo name="ISO/IEC" value="14776-323"/>
+ </reference>
+
+ <reference anchor='NVME'>
+ <front>
+ <title>NVM Express Revision 1.2.1</title>
+ <author>
+ <organization>NVM Express, Inc.</organization>
+ </author>
+ <date month="July" year="2016"/>
+ </front>
+ </reference>
+
+ <reference anchor='NVME-STLR'>
+ <front>
+ <title>NVM Express: SCSI Translation Reference Revision 1.5</title>
+ <author>
+ <organization>NVM Express, Inc.</organization>
+ </author>
+ <date month="June" year="2015"/>
+ </front>
+ </reference>
+
+</references>
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+<front>
+ <title abbrev="pNFS SCSI Layout for NVMe">
+ Using the Parallel NFS (pNFS) SCSI Layout with NVMe
+ </title>
+
+ <author fullname="Christoph Hellwig"
+ initials="C."
+ surname="Hellwig">
+ <address>
+ <email>hch@lst.de</email>
+ </address>
+ </author>
+
+ <date year="YEARVAR" month="MONTHVAR" day="DAYVAR"/>
+
+ <area>Transport</area>
+ <workgroup>NFSv4</workgroup>
+ <keyword>NFSv4</keyword>
+
+ <abstract>
+ <t>
+ This document explains how to use the Parallel Network File System
+ (pNFS) SCSI Layout Type with transports using the NVMe or NVMe
+ over Fabrics protocol.
+ </t>
+ </abstract>
+</front>
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+<middle>
+
+<section anchor="sec:intro" title="Introduction">
+ <t>
+ The pNFS SCSI layout <xref target="scsi-layout" /> is a layout type
+ that allows NFS clients to directly perform I/O to block storage
+ devices while bypassing the MDS. It is specified by using concepts
+ from the SCSI protocol family for the data path to the storage
+ devices. This documents explains how to access PCI Express, RDMA
+ or Fibre Channel devices using the NVM Express protocol
+ <xref target="NVME" /> using the SCSI layout type by leveraging
+ the SCSI Translation Reference (<xref target="NVME-STLR" />).
+ This document does not amend the pNFS SCSI layout document in any
+ way, instead of explains how to map the SCSI constructs used in
+ the pNFS SCSI layout document to NVMe concepts using the NVMe
+ SCSI translation reference.
+ </t>
+
+ <section anchor="ssc:intro:conv" title="Conventions Used in This Document">
+ <t>
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in <xref target="RFC2119" />.
+ </t>
+ </section>
+
+ <section anchor="ssc:intro:defs" title="General Definitions">
+ <t>
+ The following definitions are provided for the purpose of providing
+ an appropriate context for the reader.
+ </t>
+
+ <t>
+ <list style='hanging'>
+ <t hangText="Client">
+ The "client" is the entity that accesses the NFS server's
+ resources. The client may be an application that contains the
+ logic to access the NFS server directly. The client may also be
+ the traditional operating system client that provides remote file
+ system services for a set of applications.
+ </t>
+
+ <t hangText="Server">
+ The "server" is the entity responsible for coordinating client
+ access to a set of file systems and is identified by a server
+ owner.
+ </t>
+ </list>
+ </t>
+ </section>
+</section>
+
+<section anchor='sec:slm' title='SCSI Layout mapping to NVMe'>
+ <t>
+ The SCSI layout definition <xref target="scsi-layout" /> only references
+ few SCSI specific concepts directly. This document uses the
+ NVMe SCSI Translation Reference document (<xref target="NVME-STLR" />)
+ to provide mappings from these SCSI concepts to NVM Express
+ (<xref target="NVME" />) concepts that SHOULD be used when using the
+ pNFS SCSI layout with NVMe devices.
+ </t>
+ <t>
+ The NVMe SCSI Translation Reference is used to define the
+ NVMe command and concepts that SHOULD be used to implement the
+ pNFS SCSI layout. Implementations MAY or MAY not use an actual
+ SCSI to NVMe translation layer.
+ </t>
+
+ <section anchor='ssc:volident' title='Volume Identification'>
+ <t>
+ The SCSI layout uses the Device Identification VPD page (page code
+ 0x83) from <xref target="SPC4" /> to identify the devices used by
+ a layout. Section 6.1.4 of <xref target="NVME-STLR" /> explains
+ how an an implementation SHOULD construct a valid Device
+ Identification VPD page based on the NVMe Identify data.
+ Only NVMe devices that support either the EUI64 or NGUID value in the
+ Identify Namespace data SHOULD be used as storage devices for the
+ pNFS SCSI layout, as the methods based on the Serial Number for
+ legacy devices might not be suitable for unique addressing needs.
+ </t>
+ </section>
+
+ <section anchor='ssc:fence' title='Client Fencing'>
+ <t>
+ The SCSI layout uses Persistent Reservations to provide client
+ fencing. For this both the MDS and the Clients have to register
+ a key with the storage device, and the MDS has to create a
+ reservation on the storage device.
+ Section 6.7 of <xref target="NVME-STLR" /> contains a full
+ mapping of the required PERSISTENT RESERVE IN and
+ PERSISTENT RESERVE OUT SCSI command to NVMe commands which
+ SHOULD be used when using NVMe devices as storage devices
+ for the pNFS SCSI layout.
+ </t>
+ </section>
+
+ <section anchor='ssc:caches' title='Volatile write caches'>
+ <t>
+ The equivalent of the WCE bit in the Caching Mode Page in
+ <xref target="SBC3" /> is the Write Cache Enable field in the
+ NVMe Get Features command, see Section 6.3.3.2 of
+ <xref target="NVME-STLR" />. If a write cache is enable
+ on a NVMe device used as a storage device for the pNFS SCSI layout,
+ the MDS must ensure to use the NVMe FLUSH command to flush
+ the volatile write cache.
+ </t>
+ </section>
+</section>
+
+<section anchor="sec:security" title="Security Considerations">
+ <t>
+ Since no protocol changes are proposed here, no security
+ considerations apply.
+ </t>
+</section>
+
+<section anchor="sec:iana" title="IANA Considerations">
+ <t>
+ The document does not require any actions by IANA.
+ </t>
+</section>
+
+</middle>
--- /dev/null
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+</rfc>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
+<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
+
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+<!-- XML source for the Requirement Wars internet draft document -->
+
+<!-- To generate text with the xml2rfc tool tclsh8.3 xml2rfc.tcl
+ xml2rfc this_file.xml that_file.txt which puts the formatted
+ text into that_file.txt -->
+
+<!-- processing instructions (for a complete list and description,
+ see file http://xml.resource.org/authoring/README.html -->
+
+<!-- try to enforce the ID-nits conventions and DTD validity -->
+
+<?rfc strict="yes" ?>
+
+<!-- items used when reviewing the document -->
+
+<?rfc comments="yes" ?> <!-- controls display of <cref> elements -->
+<?rfc inline="yes" ?> <!-- when no, put comments at end in comments section,
+ otherwise, put inline -->
+<?rfc editing="no" ?> <!-- when yes, insert editing marks -->
+
+<!-- create table of contents (set it options).
+ Note the table of contents may be omitted
+ for very short documents -->
+
+<?rfc toc="yes"?>
+<?rfc tocompact="yes"?>
+<?rfc tocdepth="3"?>
+
+<!-- choose the options for the references. Some like
+ symbolic tags in the references (and citations)
+ and others prefer numbers. -->
+
+<?rfc symrefs="yes"?>
+<?rfc sortrefs="yes" ?>
+
+<!-- these two save paper: start new paragraphs from the same page etc. -->
+
+<?rfc compact="yes" ?>
+<?rfc subcompact="no" ?>
+
+<!-- end of list of processing instructions -->
+
+<rfc
+ category="info"
+ ipr="trust200902"
+ docName="draft-hellwig-nfsv4-scsi-layout-nvme-VERSIONVAR.txt" >
+