<div dir="ltr"><div>Generally, for the patch series, it is better to be sent with a cover letter to describe the content</div><div>and the background of the patch series.</div><div>Since this is your second version of the nfs disk, please mention the patch version in the prefix of titles, like:</div><div>[PATCH v2 1/7]... <br></div><div>That could be done for all patches with the "-v2" option of git-send-email.</div><div><br></div><div>BTW, mention the changes from the previous version in the cover letter.</div><div>You can refer to <a href="https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes">https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes</a></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 30, 2020 at 5:24 AM Ryan Gahagan <<a href="mailto:rgahagan@cs.utexas.edu">rgahagan@cs.utexas.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Per Issue 90, Libvirt does not support attaching an NFS disk even though<br>
QEMU has added support for it. This series of patches seeks to implement<br>
this support in Libvirt and begins by adding in flags for an NFS disk.<br>
<br>
Signed-off-by: Ryan Gahagan <<a href="mailto:rgahagan@cs.utexas.edu" target="_blank">rgahagan@cs.utexas.edu</a>><br>
---<br>
 src/libxl/libxl_conf.c    | 1 +<br>
 src/libxl/xen_xl.c        | 1 +<br>
 src/qemu/qemu_block.c     | 3 +++<br>
 src/qemu/qemu_command.c   | 1 +<br>
 src/qemu/qemu_domain.c    | 2 ++<br>
 src/qemu/qemu_snapshot.c  | 3 +++<br>
 src/util/virstoragefile.c | 6 ++++++<br>
 src/util/virstoragefile.h | 1 +<br>
 8 files changed, 18 insertions(+)<br>
<br>
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c<br>
index 00748e21e8..6a8ae27f54 100644<br>
--- a/src/libxl/libxl_conf.c<br>
+++ b/src/libxl/libxl_conf.c<br>
@@ -941,6 +941,7 @@ libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src,<br>
     case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:<br>
     case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
     case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+    case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
     case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
     case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
         virReportError(VIR_ERR_NO_SUPPORT,<br>
diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c<br>
index ba0942601f..17b93d0f5c 100644<br>
--- a/src/libxl/xen_xl.c<br>
+++ b/src/libxl/xen_xl.c<br>
@@ -1600,6 +1600,7 @@ xenFormatXLDiskSrcNet(virStorageSourcePtr src)<br>
     case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:<br>
     case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
     case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+    case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
     case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
     case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
         virReportError(VIR_ERR_NO_SUPPORT,<br>
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c<br>
index 4640e339c0..b224a550f3 100644<br>
--- a/src/qemu/qemu_block.c<br>
+++ b/src/qemu/qemu_block.c<br>
@@ -1180,6 +1180,7 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src,<br>
                 return NULL;<br>
             break;<br>
<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
             virReportEnumRangeError(virStorageNetProtocol, src->protocol);<br>
@@ -2111,6 +2112,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,<br>
             case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:<br>
             case VIR_STORAGE_NET_PROTOCOL_RBD:<br>
             case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+            case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
             case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
             case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
             case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
@@ -2502,6 +2504,7 @@ qemuBlockStorageSourceCreateGetStorageProps(virStorageSourcePtr src,<br>
         case VIR_STORAGE_NET_PROTOCOL_NBD:<br>
         case VIR_STORAGE_NET_PROTOCOL_ISCSI:<br>
         case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_HTTP:<br>
         case VIR_STORAGE_NET_PROTOCOL_HTTPS:<br>
         case VIR_STORAGE_NET_PROTOCOL_FTP:<br>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c<br>
index b06a086e18..c58f39ebf1 100644<br>
--- a/src/qemu/qemu_command.c<br>
+++ b/src/qemu/qemu_command.c<br>
@@ -1044,6 +1044,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src,<br>
                            _("'ssh' protocol is not yet supported"));<br>
             return NULL;<br>
<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
         case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
             virReportError(VIR_ERR_INTERNAL_ERROR,<br>
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c<br>
index bfb6e23942..d91c32b2c5 100644<br>
--- a/src/qemu/qemu_domain.c<br>
+++ b/src/qemu/qemu_domain.c<br>
@@ -9630,6 +9630,8 @@ qemuDomainPrepareStorageSourceTLS(virStorageSourcePtr src,<br>
     case VIR_STORAGE_NET_PROTOCOL_FTP:<br>
     case VIR_STORAGE_NET_PROTOCOL_FTPS:<br>
     case VIR_STORAGE_NET_PROTOCOL_TFTP:<br>
+    case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
+        /* Assumed NFS doesn't support TLS (needs Kerberos) */<br>
     case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
         if (src->haveTLS == VIR_TRISTATE_BOOL_YES) {<br>
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c<br>
index 15494c3415..7e89a8839b 100644<br>
--- a/src/qemu/qemu_snapshot.c<br>
+++ b/src/qemu/qemu_snapshot.c<br>
@@ -413,6 +413,7 @@ qemuSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdisk,<br>
         case VIR_STORAGE_NET_PROTOCOL_TFTP:<br>
         case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
         case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
             virReportError(VIR_ERR_INTERNAL_ERROR,<br>
                            _("external inactive snapshots are not supported on "<br>
@@ -501,6 +502,7 @@ qemuSnapshotPrepareDiskExternalActive(virDomainObjPtr vm,<br>
         case VIR_STORAGE_NET_PROTOCOL_TFTP:<br>
         case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
         case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
             virReportError(VIR_ERR_INTERNAL_ERROR,<br>
                            _("external active snapshots are not supported on "<br>
@@ -631,6 +633,7 @@ qemuSnapshotPrepareDiskInternal(virDomainDiskDefPtr disk,<br>
         case VIR_STORAGE_NET_PROTOCOL_TFTP:<br>
         case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
         case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
             virReportError(VIR_ERR_INTERNAL_ERROR,<br>
                            _("internal inactive snapshots are not supported on "<br>
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c<br>
index fac93118fd..103dade0e7 100644<br>
--- a/src/util/virstoragefile.c<br>
+++ b/src/util/virstoragefile.c<br>
@@ -90,6 +90,7 @@ VIR_ENUM_IMPL(virStorageNetProtocol,<br>
               "tftp",<br>
               "ssh",<br>
               "vxhs",<br>
+              "nfs",<br>
 );<br>
<br>
 VIR_ENUM_IMPL(virStorageNetHostTransport,<br>
@@ -3152,6 +3153,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,<br>
     case VIR_STORAGE_NET_PROTOCOL_GLUSTER:<br>
     case VIR_STORAGE_NET_PROTOCOL_SSH:<br>
     case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
+    case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
         virReportError(VIR_ERR_INTERNAL_ERROR,<br>
                        _("malformed backing store path for protocol %s"),<br>
                        protocol);<br>
@@ -4627,6 +4629,10 @@ virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol)<br>
         case VIR_STORAGE_NET_PROTOCOL_VXHS:<br>
             return 9999;<br>
<br>
+        case VIR_STORAGE_NET_PROTOCOL_NFS:<br>
+            /* Per <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/4/html/reference_guide/ch-nfs" rel="noreferrer" target="_blank">https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/4/html/reference_guide/ch-nfs</a> */<br>
+            return 2049;<br>
+<br>
         case VIR_STORAGE_NET_PROTOCOL_LAST:<br>
         case VIR_STORAGE_NET_PROTOCOL_NONE:<br>
             return 0;<br>
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h<br>
index 87763cf389..c5d5f0233a 100644<br>
--- a/src/util/virstoragefile.h<br>
+++ b/src/util/virstoragefile.h<br>
@@ -135,6 +135,7 @@ typedef enum {<br>
     VIR_STORAGE_NET_PROTOCOL_TFTP,<br>
     VIR_STORAGE_NET_PROTOCOL_SSH,<br>
     VIR_STORAGE_NET_PROTOCOL_VXHS,<br>
+    VIR_STORAGE_NET_PROTOCOL_NFS,<br>
<br>
     VIR_STORAGE_NET_PROTOCOL_LAST<br>
 } virStorageNetProtocol;<br>
-- <br>
2.29.2<br>
<br>
</blockquote></div>