From: Bob Bell Subject: [PATCH 3/3] nfs-utils: Add nonegde mount option Date: Tue, 15 Jan 2008 11:31:30 -0500 Message-ID: <20080115163130.GD18911@newbie.thebellsplace.net> References: <20080115162658.GA18911@newbie.thebellsplace.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed To: linux-nfs@vger.kernel.org Return-path: Received: from srv03.macroped.com ([74.52.9.226]:39297 "EHLO srv03.macroped.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753671AbYAOQbc (ORCPT ); Tue, 15 Jan 2008 11:31:32 -0500 Received: from newbie (c-75-67-251-249.hsd1.nh.comcast.net [75.67.251.249]) (authenticated bits=0) by srv03.macroped.com (8.13.8/8.13.8) with ESMTP id m0FGXMaO020938 for ; Tue, 15 Jan 2008 11:33:22 -0500 In-Reply-To: <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> Sender: linux-nfs-owner@vger.kernel.org List-ID: From: Bob Bell Support a "nonegde" mount option to match the new NFS_MOUNT_NONEGDE flag. Signed-off-by: Bob Bell --- utils/mount/nfs.man | 18 ++++++++++++++++++ utils/mount/nfs_mount.h | 31 ++++++++++++++++--------------- utils/mount/nfsmount.c | 9 +++++++-- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man index 2c0b687..b0a885a 100644 --- a/utils/mount/nfs.man +++ b/utils/mount/nfs.man @@ -613,6 +613,24 @@ If this option is not specified, the NFS client uses READDIRPLUS requests on NFS version 3 mounts to read small directories. Some applications perform better if the client uses only READDIR requests for all directories. +.TP 1.5i +.BR negde " / " nonegde +Selects whether to cache negative dentries, +which record the non-existence of a file. +If neither option is specified (or if +.B negde +is specified), +each negative dentry will be kept in the kernel dcache until it is invalidated +when a change is detected in its parent directory, +or until sufficient memory pressure forces it out. +.IP +Using the +.B nonegde +option may be helpful if the NFS server does not provide +sufficiently fine-grained timestamps to consistently distinguish when the +contents of a directory have been updated. However, by not caching negative +dentries, the client will have to contact the server whenever there is an +attempt to access a previously non-existent file, which may impact performance. .SS "Valid options for the nfs4 file system type" Use these options, along with the options in the first subsection above, for mounting the diff --git a/utils/mount/nfs_mount.h b/utils/mount/nfs_mount.h index 7df8fb2..2deca87 100644 --- a/utils/mount/nfs_mount.h +++ b/utils/mount/nfs_mount.h @@ -50,21 +50,22 @@ struct nfs_mount_data { /* bits in the flags field */ -#define NFS_MOUNT_SOFT 0x0001 /* 1 */ -#define NFS_MOUNT_INTR 0x0002 /* 1 */ -#define NFS_MOUNT_SECURE 0x0004 /* 1 */ -#define NFS_MOUNT_POSIX 0x0008 /* 1 */ -#define NFS_MOUNT_NOCTO 0x0010 /* 1 */ -#define NFS_MOUNT_NOAC 0x0020 /* 1 */ -#define NFS_MOUNT_TCP 0x0040 /* 2 */ -#define NFS_MOUNT_VER3 0x0080 /* 3 */ -#define NFS_MOUNT_KERBEROS 0x0100 /* 3 */ -#define NFS_MOUNT_NONLM 0x0200 /* 3 */ -#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 */ -#define NFS_MOUNT_UNSHARED 0x8000 /* 5 */ +#define NFS_MOUNT_SOFT 0x00001 /* 1 */ +#define NFS_MOUNT_INTR 0x00002 /* 1 */ +#define NFS_MOUNT_SECURE 0x00004 /* 1 */ +#define NFS_MOUNT_POSIX 0x00008 /* 1 */ +#define NFS_MOUNT_NOCTO 0x00010 /* 1 */ +#define NFS_MOUNT_NOAC 0x00020 /* 1 */ +#define NFS_MOUNT_TCP 0x00040 /* 2 */ +#define NFS_MOUNT_VER3 0x00080 /* 3 */ +#define NFS_MOUNT_KERBEROS 0x00100 /* 3 */ +#define NFS_MOUNT_NONLM 0x00200 /* 3 */ +#define NFS_MOUNT_BROKEN_SUID 0x00400 /* 4 */ +#define NFS_MOUNT_NOACL 0x00800 /* 4 */ +#define NFS_MOUNT_SECFLAVOUR 0x02000 /* 5 */ +#define NFS_MOUNT_NORDIRPLUS 0x04000 /* 5 */ +#define NFS_MOUNT_UNSHARED 0x08000 /* 5 */ +#define NFS_MOUNT_NONEGDE 0x10000 /* 5 */ /* security pseudoflavors */ diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c index 23dd2f6..81ab371 100644 --- a/utils/mount/nfsmount.c +++ b/utils/mount/nfsmount.c @@ -422,6 +422,10 @@ parse_options(char *old_opts, struct nfs_mount_data *data, if (!val) data->flags |= NFS_MOUNT_UNSHARED; #endif + } else if (!strcmp(opt, "negde")) { + data->flags &= ~NFS_MOUNT_NONEGDE; + if (!val) + data->flags |= NFS_MOUNT_NONEGDE; } else { bad_option: if (sloppy) @@ -595,12 +599,13 @@ nfsmount(const char *spec, const char *node, int flags, printf(_("mountprog = %lu, mountvers = %lu, nfsprog = %lu, nfsvers = %lu\n"), mnt_pmap->pm_prog, mnt_pmap->pm_vers, nfs_pmap->pm_prog, nfs_pmap->pm_vers); - printf(_("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d"), + printf(_("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d, nonegde = %d"), (data.flags & NFS_MOUNT_SOFT) != 0, (data.flags & NFS_MOUNT_INTR) != 0, (data.flags & NFS_MOUNT_POSIX) != 0, (data.flags & NFS_MOUNT_NOCTO) != 0, - (data.flags & NFS_MOUNT_NOAC) != 0); + (data.flags & NFS_MOUNT_NOAC) != 0, + (data.flags & NFS_MOUNT_NONEGDE) != 0); #if NFS_MOUNT_VERSION >= 2 printf(_(", tcp = %d"), (data.flags & NFS_MOUNT_TCP) != 0);