summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--utils/mount/nfs.man5
-rw-r--r--utils/mount/nfs_mount.h1
-rw-r--r--utils/mount/nfsmount.c5
3 files changed, 11 insertions, 0 deletions
diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man
index 8abdb83..673556c 100644
--- a/utils/mount/nfs.man
+++ b/utils/mount/nfs.man
@@ -283,6 +283,11 @@ support UDP.
.TP 1.5i
.I udp
Mount the NFS filesystem using the UDP protocol.
+.TP 1.5i
+.I nordirplus
+Disables NFSv3 READDIRPLUS RPCs. Use this option when
+mounting servers that don't support or have broken
+READDIRPLUS implementations.
.P
All of the non-value options have corresponding nooption forms.
For example, nointr means don't allow file operations to be
diff --git a/utils/mount/nfs_mount.h b/utils/mount/nfs_mount.h
index a8d1f1a..4a061d8 100644
--- a/utils/mount/nfs_mount.h
+++ b/utils/mount/nfs_mount.h
@@ -63,6 +63,7 @@ struct nfs_mount_data {
#define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */
#define NFS_MOUNT_NOACL 0x0800 /* 4 */
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
+#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
/* security pseudoflavors */
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
index 776ef64..815064a 100644
--- a/utils/mount/nfsmount.c
+++ b/utils/mount/nfsmount.c
@@ -800,6 +800,10 @@ parse_options(char *old_opts, struct nfs_mount_data *data,
data->flags &= ~NFS_MOUNT_NOACL;
if (!val)
data->flags |= NFS_MOUNT_NOACL;
+ } else if (!strcmp(opt, "rdirplus")) {
+ data->flags &= ~NFS_MOUNT_NORDIRPLUS;
+ if (!val)
+ data->flags |= NFS_MOUNT_NORDIRPLUS;
#endif
} else {
bad_option:
@@ -983,6 +987,7 @@ nfsmount(const char *spec, const char *node, int *flags,
#endif
#if NFS_MOUNT_VERSION >= 5
printf("sec = %u ", data.pseudoflavor);
+ printf("readdirplus = %d ", (data.flags & NFS_MOUNT_NORDIRPLUS) != 0);
#endif
printf("\n");
#endif