[PATCH] kernel-modules: handle nfs host fstype properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



There are scenarios that support fstype target not mounted
beforehand, kdump can utilize this feature to avoid imposing
severe overload on the shared nfs server when thousands of
diskless clients with nfs kdumping boot and trigger kdump
initramfs rebuild synchronously.

Because target is not mounted beforehand, some of the kernel
modules will fail to be installed in hostonly mode. Dracut
actually can support this by instmods all "host_fs_types" with
hostonly unset in 90kernel-modules/module-setup.sh installkernel().

This works properly for most host fstypes(ext[234]/xfs, etc), but
that's not the case for nfs.

>From nfs manpage, we can clearly see:
"The fstype field contains "nfs". Use of the "nfs4" fstype in
/etc/fstab is deprecated."

It means "nfs" specified can be actually mounted as "nfs[3-4]", so
for these cases, the current 90kernel-modules implementation only
installs ko modules for "nfs"(nfs.ko, etc), lacking nfsv[3-4].ko,
so it cannot work properly. In order to address the issue, we should
install all the possbile kernel modules for "nfs" fstype:
"nfs sunrpc ipv6 nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files".

Additionally, we need a special remapping for "nfs[3-4]" deprecated
cases, for example, we should map "nfs4" to "nfsv4.ko" not "nfs4.ko".

Signed-off-by: Xunlei Pang <xlpang@xxxxxxxxxx>
---
 modules.d/90kernel-modules/module-setup.sh | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
index 7904c02..1f57ec7 100755
--- a/modules.d/90kernel-modules/module-setup.sh
+++ b/modules.d/90kernel-modules/module-setup.sh
@@ -44,7 +44,25 @@ installkernel() {
                 dracut_instmods -o -P ".*/(kernel/fs/nfs|kernel/fs/nfsd|kernel/fs/lockd)/.*" '=fs'
             fi
         else
-            hostonly='' instmods "${host_fs_types[@]}"
+            for i in "${host_fs_types[@]}"; do
+                if [[ $i = nfs ]]; then
+                    # nfs manpage says:
+                    # "The fstype field contains "nfs". Use of the "nfs4" fstype in
+                    # /etc/fstab is deprecated."
+                    #
+                    # It means "nfs" can be actually mounted as "nfs4", so for "nfs"
+                    # host fstype we better install all the possible kernel modules,
+                    # this is useful for kdump "nfs" dumping not mounted beforehand.
+                    #
+                    # The list is copied from "95nfs/module_setup.sh installkernel()".
+                    i="nfs sunrpc ipv6 nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files"
+                elif [[ $i = nfs[3-4] ]]; then
+                    # Deprecated cases, we provide support, but need a name mapping:
+                    # For example, should map "nfs4" to use "nfsv4.ko" not "nfs4.ko".
+                    i=${i/nfs/nfsv}
+                fi
+                hostonly='' instmods $i
+            done
         fi
     fi
     :
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux