* [PATCH 0/3] Intro: Better handling coarse-grained timestamps
@ 2008-01-15 16:27 Bob Bell
[not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
0 siblings, 1 reply; 30+ messages in thread
From: Bob Bell @ 2008-01-15 16:27 UTC (permalink / raw)
To: linux-nfs
While developing a new product that uses NFS here at EMC, we've run into
issues with cache coherency. Our server uses ext3, and therefore can
only provide timestamps with a granularity of 1 second. We have seen
cases where a directory is modified on the server, then a non-existent
filename within that directory is accessed from the client (returning
an error), and then the directory entry (either subdirectory or file)
gets added on the server, all within the same second. This leads to
a cached negative dentry on the client, which results in erroneously
returning "file not found" to all future lstat()s and open()s, as the
timestamp on the parent directory has not been modified.
Ideally, all NFS servers would provide finer-grained timestamps, so
that all changes to a directory also modify the timestamp. However, it
is a reality that not every one will. Therefore, we are attempting to
tackle this problem with the following three patches.
First, if the nlinks count changes, invalidate the cached data for the
directory. This is of limited use, as it only catches the cases where
the number of subdirectories has changed. However, because there is no
really downside to checking the nlinks count, this check can be
universally enabled.
Secondly, a modification to the kernel has been made to disable the
caching of negative dentries when the NFS_MOUNT_NONEGDE flag is set.
Note that this does nothing to address outdated information being
returned by readdir(). However, it does allow a file to be open()ed or
lstat()ed if the filename is known. Because this has a potential
performance impact, it is left as an option for the user to select.
Lastly, changes have been made to userspace to accept the "nonegde"
mount option and set the NFS_MOUNT_NONEGDE flag.
Your review and comments are greatly appreciated. I believe this is
a fairly basic patch, and it has worked well in testing so far on SLES
10 (with slight modifications to match the software versions in SLES
10). Most of this patch is fairly trivial; my only open question is
whether "nonegde" is a good name (I myself sometimes read it as
"non-edge", but have yet to come up with anything better).
--
Bob Bell
^ permalink raw reply [flat|nested] 30+ messages in thread[parent not found: <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* [PATCH 1/3] NFS: Check nlinks count [not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-15 16:29 ` Bob Bell 2008-01-15 16:30 ` [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries Bob Bell ` (2 subsequent siblings) 3 siblings, 0 replies; 30+ messages in thread From: Bob Bell @ 2008-01-15 16:29 UTC (permalink / raw) To: linux-nfs From: Philippe Armangau <armangau_philippe@emc.com> Check the nlink count when updating an NFS inode, and mark the attributes invalid if it has changed. If the inode is a directory, also invalidate the cached data so that the directory's contents will be refreshed. Signed-off-by: Philippe Armangau <armangau_philippe@emc.com> Acked-by: Bob Bell <bell_robert@emc.com> --- fs/nfs/inode.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 5747d49..3e85a70 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -1063,6 +1063,12 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); nfsi->change_attr = fattr->change_attr; + if (inode->i_nlink != fattr->nlink) { + invalid |= NFS_INO_INVALID_ATTR; + if (S_ISDIR(inode->i_mode)) + invalid |= NFS_INO_INVALID_DATA; + } + if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) || inode->i_uid != fattr->uid || inode->i_gid != fattr->gid) ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 2008-01-15 16:29 ` [PATCH 1/3] NFS: Check nlinks count Bob Bell @ 2008-01-15 16:30 ` Bob Bell [not found] ` <20080115163013.GC18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 2008-01-15 16:31 ` [PATCH 3/3] nfs-utils: Add nonegde mount option Bob Bell 2008-01-16 1:55 ` [PATCH 0/3] Intro: Better handling coarse-grained timestamps Bob Bell 3 siblings, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-15 16:30 UTC (permalink / raw) To: linux-nfs From: Bob Bell <bell_robert@emc.com> Add NFS_MOUNT_NONEGDE mount flag. When this flag is set on a mounted NFS filesystem, negative dentries for that filesystem will not be cached. This can help address cache coherency when the NFS server does not provide sufficiently fine-grained timestamps to consistently distinguish when a directory has been modified, though performance when repeatedly accessing filenames for files that do not exist may be impacted. Signed-off-by: Bob Bell <bell_robert@emc.com> --- fs/nfs/dir.c | 5 +++++ fs/nfs/nfsroot.c | 10 +++++++++- fs/nfs/super.c | 9 +++++++++ include/linux/nfs_mount.h | 35 ++++++++++++++++++----------------- 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 410449d..9419f55 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -851,6 +851,11 @@ static int nfs_dentry_delete(struct dentry *dentry) * files will be cleaned up during umount */ return 1; } + if (dentry->d_inode == NULL && + (NFS_SB(dentry->d_sb)->flags & NFS_MOUNT_NONEGDE)) { + /* Unhash it, so that negative dentries won't be cached */ + return 1; + } return 0; } diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c diff --git a/fs/nfs/nfsroot.c b/fs/nfs/nfsroot.c index 4b03345..1c8e7ee 100644 --- a/fs/nfs/nfsroot.c +++ b/fs/nfs/nfsroot.c @@ -124,7 +124,7 @@ enum { Opt_soft, Opt_hard, Opt_intr, Opt_nointr, Opt_posix, Opt_noposix, Opt_cto, Opt_nocto, Opt_ac, Opt_noac, Opt_lock, Opt_nolock, Opt_v2, Opt_v3, Opt_udp, Opt_tcp, - Opt_acl, Opt_noacl, + Opt_acl, Opt_noacl, Opt_negde, Opt_nonegde, /* Error token */ Opt_err }; @@ -161,6 +161,8 @@ static match_table_t __initdata tokens = { {Opt_tcp, "tcp"}, {Opt_acl, "acl"}, {Opt_noacl, "noacl"}, + {Opt_negde, "negde"}, + {Opt_nonegde, "nonegde"}, {Opt_err, NULL} }; @@ -275,6 +277,12 @@ static int __init root_nfs_parse(char *name, char *buf) case Opt_noacl: nfs_data.flags |= NFS_MOUNT_NOACL; break; + case Opt_negde: + nfs_data.flags &= ~NFS_MOUNT_NONEGDE; + break; + case Opt_nonegde: + nfs_data.flags |= NFS_MOUNT_NONEGDE; + break; default: printk(KERN_WARNING "Root-NFS: unknown " "option: %s\n", p); diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 0d1bc61..7043a07 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -75,6 +75,7 @@ enum { Opt_acl, Opt_noacl, Opt_rdirplus, Opt_nordirplus, Opt_sharecache, Opt_nosharecache, + Opt_negde, Opt_nonegde, /* Mount options that take integer arguments */ Opt_port, @@ -124,6 +125,8 @@ static match_table_t nfs_mount_option_tokens = { { Opt_nordirplus, "nordirplus" }, { Opt_sharecache, "sharecache" }, { Opt_nosharecache, "nosharecache" }, + { Opt_negde, "negde" }, + { Opt_nonegde, "nonegde" }, { Opt_port, "port=%u" }, { Opt_rsize, "rsize=%u" }, @@ -455,6 +458,7 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, { NFS_MOUNT_NOACL, ",noacl", "" }, { NFS_MOUNT_NORDIRPLUS, ",nordirplus", "" }, { NFS_MOUNT_UNSHARED, ",nosharecache", ""}, + { NFS_MOUNT_NONEGDE, ",nonegde", ""}, { 0, NULL, NULL } }; const struct proc_nfs_info *nfs_infop; @@ -779,6 +783,11 @@ static int nfs_parse_mount_options(char *raw, case Opt_nosharecache: mnt->flags |= NFS_MOUNT_UNSHARED; break; + case Opt_negde: + mnt->flags &= ~NFS_MOUNT_NONEGDE; + break; + case Opt_nonegde: + mnt->flags |= NFS_MOUNT_NONEGDE; case Opt_port: if (match_int(args, &option)) diff --git a/include/linux/nfs_mount.h b/include/linux/nfs_mount.h index a3ade89..44ffb60 100644 --- a/include/linux/nfs_mount.h +++ b/include/linux/nfs_mount.h @@ -47,22 +47,23 @@ 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_STRICTLOCK 0x1000 /* reserved for NFSv4 */ -#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ -#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */ -#define NFS_MOUNT_UNSHARED 0x8000 /* 5 */ -#define NFS_MOUNT_FLAGMASK 0xFFFF +#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_STRICTLOCK 0x01000 /* reserved for NFSv4 */ +#define NFS_MOUNT_SECFLAVOUR 0x02000 /* 5 */ +#define NFS_MOUNT_NORDIRPLUS 0x04000 /* 5 */ +#define NFS_MOUNT_UNSHARED 0x08000 /* 5 */ +#define NFS_MOUNT_NONEGDE 0x10000 /* 5 */ +#define NFS_MOUNT_FLAGMASK 0x1FFFF #endif ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <20080115163013.GC18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <20080115163013.GC18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-15 16:52 ` Trond Myklebust [not found] ` <1200415972.7702.7.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-15 16:52 UTC (permalink / raw) To: Bob Bell; +Cc: linux-nfs On Tue, 2008-01-15 at 11:30 -0500, Bob Bell wrote: > From: Bob Bell <bell_robert@emc.com> > > Add NFS_MOUNT_NONEGDE mount flag. When this flag is set on a mounted > NFS filesystem, negative dentries for that filesystem will not be > cached. This can help address cache coherency when the NFS server does > not provide sufficiently fine-grained timestamps to consistently > distinguish when a directory has been modified, though performance when > repeatedly accessing filenames for files that do not exist may be > impacted. > > Signed-off-by: Bob Bell <bell_robert@emc.com> > --- The patch itself looks OK. My only gripe is the two names 'negde' and 'nonegde'. Can we find something that rolls a bit more smoothly off the tongue? How about something like 'cacheneglookup' 'nocacheneglookup'? Better suggestions, anyone? Cheers Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200415972.7702.7.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <1200415972.7702.7.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-15 17:04 ` Chuck Lever 2008-01-15 17:14 ` Trond Myklebust 2008-01-16 1:22 ` Bob Bell 0 siblings, 2 replies; 30+ messages in thread From: Chuck Lever @ 2008-01-15 17:04 UTC (permalink / raw) To: Bob Bell; +Cc: NFS list On Jan 15, 2008, at 11:52 AM, Trond Myklebust wrote: > On Tue, 2008-01-15 at 11:30 -0500, Bob Bell wrote: >> From: Bob Bell <bell_robert@emc.com> >> >> Add NFS_MOUNT_NONEGDE mount flag. When this flag is set on a mounted >> NFS filesystem, negative dentries for that filesystem will not be >> cached. This can help address cache coherency when the NFS server >> does >> not provide sufficiently fine-grained timestamps to consistently >> distinguish when a directory has been modified, though performance >> when >> repeatedly accessing filenames for files that do not exist may be >> impacted. >> >> Signed-off-by: Bob Bell <bell_robert@emc.com> >> --- > > The patch itself looks OK. My only gripe is the two names 'negde' and > 'nonegde'. Can we find something that rolls a bit more smoothly off > the > tongue? Yeah, actually I thought it was spelled "non edge" until I looked closer. > How about something like 'cacheneglookup' 'nocacheneglookup'? Better > suggestions, anyone? I suspect system administrators have no idea what a "negative dentry" is, and it would probably be beyond the scope of nfs(5) to explain it. So I vote for something that describes the behavior as observed by a "lay person" rather than something that names the kernel mechanisms involved. You might consider tying this behavior to "noac" as well. In other words, make "noac" equivalent to "sync,actimeo=0,nonegde" . -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-15 17:04 ` Chuck Lever @ 2008-01-15 17:14 ` Trond Myklebust 2008-01-16 1:22 ` Bob Bell 1 sibling, 0 replies; 30+ messages in thread From: Trond Myklebust @ 2008-01-15 17:14 UTC (permalink / raw) To: Chuck Lever; +Cc: Bob Bell, NFS list On Tue, 2008-01-15 at 12:04 -0500, Chuck Lever wrote: > > I suspect system administrators have no idea what a "negative dentry" > is, and it would probably be beyond the scope of nfs(5) to explain > it. So I vote for something that describes the behavior as observed > by a "lay person" rather than something that names the kernel > mechanisms involved. The concept of a 'dentry' is in any case very Linux-specific. The more generic term would be a 'negative lookup'. That said, if someone can find a better name, I'd be all for it. > You might consider tying this behavior to "noac" as well. In other > words, make "noac" equivalent to "sync,actimeo=0,nonegde" . I'd be open for that idea, however that should definitely be a separate patch. Cheers Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-15 17:04 ` Chuck Lever 2008-01-15 17:14 ` Trond Myklebust @ 2008-01-16 1:22 ` Bob Bell [not found] ` <20080116012209.GB26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 1 sibling, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-16 1:22 UTC (permalink / raw) To: Chuck Lever; +Cc: NFS list On Tue, Jan 15, 2008 at 12:04:50PM -0500, Chuck Lever wrote: >On Jan 15, 2008, at 11:52 AM, Trond Myklebust wrote: >>The patch itself looks OK. My only gripe is the two names 'negde' and >>'nonegde'. Can we find something that rolls a bit more smoothly off >>the >>tongue? > >Yeah, actually I thought it was spelled "non edge" until I looked >closer. Heh -- I mentioned the same thing at the bottom of my (admittedly verbose) intro the patch. In fact, I've mistyped it "nonedge" myself a few times, which I figured was a strong hint it needed renaming. I was going for the terseness I saw in the rest of the options, and "nonegde" was the best my limited creativity could come up with. >>How about something like 'cacheneglookup' 'nocacheneglookup'? Better >>suggestions, anyone? As long as no one objects to the length, I'll go with "nocacheneglookup" (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. >You might consider tying this behavior to "noac" as well. In other >words, make "noac" equivalent to "sync,actimeo=0,nonegde" . I'll provide this as a separate patch in the patch set, as Trond indicated he would prefer. This might make sense, as this is probably the set of options we'll used. -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <20080116012209.GB26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <20080116012209.GB26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-16 2:42 ` Trond Myklebust [not found] ` <1200451350.28088.43.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 2:42 UTC (permalink / raw) To: Bob Bell; +Cc: Chuck Lever, NFS list On Tue, 2008-01-15 at 20:22 -0500, Bob Bell wrote: > >>How about something like 'cacheneglookup' 'nocacheneglookup'? Better > >>suggestions, anyone? > > As long as no one objects to the length, I'll go with "nocacheneglookup" > (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. I'm still not happy with that name. What do people think about introducing a generic 'cache' option that can be used for fine control of caching options? I'm thinking somewhat along the lines of -ocache=lookup_all /* Cache all dentries */ -ocache=lookup_positive /* Cache positive dentries */ -ocache=lookup_none /* Force all lookups */ ...and then possibly adding other 'cache=' options later if we find out that we need them? Cheers Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200451350.28088.43.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <1200451350.28088.43.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-16 12:49 ` Steve Dickson [not found] ` <478DFD5A.1040501-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Steve Dickson @ 2008-01-16 12:49 UTC (permalink / raw) To: Trond Myklebust; +Cc: Bob Bell, Chuck Lever, NFS list Trond Myklebust wrote: > On Tue, 2008-01-15 at 20:22 -0500, Bob Bell wrote: >>>> How about something like 'cacheneglookup' 'nocacheneglookup'? Better >>>> suggestions, anyone? >> As long as no one objects to the length, I'll go with "nocacheneglookup" >> (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. > > I'm still not happy with that name. What do people think about > introducing a generic 'cache' option that can be used for fine control > of caching options? > > I'm thinking somewhat along the lines of > > -ocache=lookup_all /* Cache all dentries */ > -ocache=lookup_positive /* Cache positive dentries */ > -ocache=lookup_none /* Force all lookups */ Maybe we should define the type of cache were are controlling, in case we want to add controls for other caches. So how about: -olpcache=all /* Cache all directory entries */ -olpcache=found /* Cache only directory entires that are found */ -olpcache=off /* Turn off the caching of directory entries */ steved. ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <478DFD5A.1040501-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>]
* RE: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <478DFD5A.1040501-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org> @ 2008-01-16 19:43 ` Muntz, Daniel [not found] ` <01AE8AF878612047A442668306EAEB05018178E7-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Muntz, Daniel @ 2008-01-16 19:43 UTC (permalink / raw) To: Steve Dickson, Trond Myklebust; +Cc: Bob Bell, Chuck Lever, NFS list My $.02 -odircache=on -odircache=hitsonly (or positive, or hits, or ?) -odircache=off -----Original Message----- From: Steve Dickson [mailto:SteveD@redhat.com] Sent: Wednesday, January 16, 2008 4:50 AM To: Trond Myklebust Cc: Bob Bell; Chuck Lever; NFS list Subject: Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries Trond Myklebust wrote: > On Tue, 2008-01-15 at 20:22 -0500, Bob Bell wrote: >>>> How about something like 'cacheneglookup' 'nocacheneglookup'? >>>> Better suggestions, anyone? >> As long as no one objects to the length, I'll go with "nocacheneglookup" >> (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. > > I'm still not happy with that name. What do people think about > introducing a generic 'cache' option that can be used for fine control > of caching options? > > I'm thinking somewhat along the lines of > > -ocache=lookup_all /* Cache all dentries */ > -ocache=lookup_positive /* Cache positive dentries */ > -ocache=lookup_none /* Force all lookups */ Maybe we should define the type of cache were are controlling, in case we want to add controls for other caches. So how about: -olpcache=all /* Cache all directory entries */ -olpcache=found /* Cache only directory entires that are found */ -olpcache=off /* Turn off the caching of directory entries */ steved. - To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <01AE8AF878612047A442668306EAEB05018178E7-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org>]
* RE: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <01AE8AF878612047A442668306EAEB05018178E7-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org> @ 2008-01-16 20:43 ` Trond Myklebust [not found] ` <1200516219.6932.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 20:43 UTC (permalink / raw) To: Muntz, Daniel; +Cc: Steve Dickson, Bob Bell, Chuck Lever, NFS list On Wed, 2008-01-16 at 11:43 -0800, Muntz, Daniel wrote: > My $.02 > > -odircache=on > -odircache=hitsonly (or positive, or hits, or ?) > -odircache=off I like the 'dircache' bit, but to me 'on/off' suggests a binary switch: they don't mix well with a third state. How about -odircache=aggr[essive] /* Full caching */ -odircache=noneg[ative] /* Positive lookups only */ -odircache=off /* strict lookup revalidation */ ? > -----Original Message----- > From: Steve Dickson [mailto:SteveD@redhat.com] > Sent: Wednesday, January 16, 2008 4:50 AM > To: Trond Myklebust > Cc: Bob Bell; Chuck Lever; NFS list > Subject: Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid > caching negative dentries > > Trond Myklebust wrote: > > On Tue, 2008-01-15 at 20:22 -0500, Bob Bell wrote: > >>>> How about something like 'cacheneglookup' 'nocacheneglookup'? > >>>> Better suggestions, anyone? > >> As long as no one objects to the length, I'll go with > "nocacheneglookup" > >> (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. > > > > I'm still not happy with that name. What do people think about > > introducing a generic 'cache' option that can be used for fine control > > > of caching options? > > > > I'm thinking somewhat along the lines of > > > > -ocache=lookup_all /* Cache all dentries */ > > -ocache=lookup_positive /* Cache positive dentries */ > > -ocache=lookup_none /* Force all lookups */ > Maybe we should define the type of cache were are controlling, in case > we want to add controls for other caches. So how about: > > -olpcache=all /* Cache all directory entries */ > -olpcache=found /* Cache only directory entires that are > found */ > -olpcache=off /* Turn off the caching of directory > entries */ > > > steved. > - > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org More majordomo info > at http://vger.kernel.org/majordomo-info.html > - > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200516219.6932.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <1200516219.6932.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-16 20:49 ` Chuck Lever 2008-01-16 21:12 ` Risto Bell 2008-01-18 15:29 ` Bob Bell 0 siblings, 2 replies; 30+ messages in thread From: Chuck Lever @ 2008-01-16 20:49 UTC (permalink / raw) To: Trond Myklebust; +Cc: Muntz, Daniel, Steve Dickson, Bob Bell, NFS list On Jan 16, 2008, at 3:43 PM, Trond Myklebust wrote: > On Wed, 2008-01-16 at 11:43 -0800, Muntz, Daniel wrote: >> My $.02 >> >> -odircache=on >> -odircache=hitsonly (or positive, or hits, or ?) >> -odircache=off > > > I like the 'dircache' bit, but to me 'on/off' suggests a binary > switch: > they don't mix well with a third state. > > How about > > -odircache=aggr[essive] /* Full caching */ > -odircache=noneg[ative] /* Positive lookups only */ > -odircache=off /* strict lookup revalidation */ "-olookupcache=" would be even more specific, if not more verbose. dircache=off implies that not even readdir results are cached. -olookupcache=full -olookupcache=pos[itive] -olookupcache=strict >> -----Original Message----- >> From: Steve Dickson [mailto:SteveD@redhat.com] >> Sent: Wednesday, January 16, 2008 4:50 AM >> To: Trond Myklebust >> Cc: Bob Bell; Chuck Lever; NFS list >> Subject: Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid >> caching negative dentries >> >> Trond Myklebust wrote: >>> On Tue, 2008-01-15 at 20:22 -0500, Bob Bell wrote: >>>>>> How about something like 'cacheneglookup' 'nocacheneglookup'? >>>>>> Better suggestions, anyone? >>>> As long as no one objects to the length, I'll go with >> "nocacheneglookup" >>>> (and NFS_MOUNT_NOCACHENEGLOOKUP, I suppose) for round 2. >>> >>> I'm still not happy with that name. What do people think about >>> introducing a generic 'cache' option that can be used for fine >>> control >> >>> of caching options? >>> >>> I'm thinking somewhat along the lines of >>> >>> -ocache=lookup_all /* Cache all dentries */ >>> -ocache=lookup_positive /* Cache positive dentries */ >>> -ocache=lookup_none /* Force all lookups */ >> Maybe we should define the type of cache were are controlling, in >> case >> we want to add controls for other caches. So how about: >> >> -olpcache=all /* Cache all directory entries */ >> -olpcache=found /* Cache only directory entires that are >> found */ >> -olpcache=off /* Turn off the caching of directory >> entries */ >> >> >> steved. >> - >> To unsubscribe from this list: send the line "unsubscribe linux- >> nfs" in >> the body of a message to majordomo@vger.kernel.org More majordomo >> info >> at http://vger.kernel.org/majordomo-info.html >> - >> To unsubscribe from this list: send the line "unsubscribe linux- >> nfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-16 20:49 ` Chuck Lever @ 2008-01-16 21:12 ` Risto Bell [not found] ` <478E7345.8080003-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org> 2008-01-18 15:29 ` Bob Bell 1 sibling, 1 reply; 30+ messages in thread From: Risto Bell @ 2008-01-16 21:12 UTC (permalink / raw) To: NFS list Already decided not to go the distance, with separate controls of time-to-live of positive and negative lookup cache entries (or is it not considered good form to overload negttl=0 as means to disable)? ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <478E7345.8080003-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <478E7345.8080003-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org> @ 2008-01-16 21:56 ` Trond Myklebust [not found] ` <1200520574.15282.24.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 21:56 UTC (permalink / raw) To: Risto Bell; +Cc: NFS list On Wed, 2008-01-16 at 13:12 -0800, Risto Bell wrote: > Already decided not to go the distance, with separate controls of > time-to-live of positive and negative lookup cache entries (or is it > not considered good form to overload negttl=0 as means to disable)? We don't have a time-to-live scheme for dentries. When deciding whether we need to revalidate the lookup, we check the parent directory mtime, and see if the directory contents have changed since the last revalidation. Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200520574.15282.24.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <1200520574.15282.24.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-16 22:09 ` Chuck Lever 2008-01-16 23:21 ` Trond Myklebust 0 siblings, 1 reply; 30+ messages in thread From: Chuck Lever @ 2008-01-16 22:09 UTC (permalink / raw) To: Trond Myklebust; +Cc: NFS list On Jan 16, 2008, at 4:56 PM, Trond Myklebust wrote: > On Wed, 2008-01-16 at 13:12 -0800, Risto Bell wrote: >> Already decided not to go the distance, with separate controls of >> time-to-live of positive and negative lookup cache entries (or is it >> not considered good form to overload negttl=0 as means to disable)? > > We don't have a time-to-live scheme for dentries. Adding a TTL heuristic to dentry revalidation might help our directory mtime problem. :-) -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-16 22:09 ` Chuck Lever @ 2008-01-16 23:21 ` Trond Myklebust 0 siblings, 0 replies; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 23:21 UTC (permalink / raw) To: Chuck Lever; +Cc: NFS list On Wed, 2008-01-16 at 17:09 -0500, Chuck Lever wrote: > On Jan 16, 2008, at 4:56 PM, Trond Myklebust wrote: > > On Wed, 2008-01-16 at 13:12 -0800, Risto Bell wrote: > >> Already decided not to go the distance, with separate controls of > >> time-to-live of positive and negative lookup cache entries (or is it > >> not considered good form to overload negttl=0 as means to disable)? > > > > We don't have a time-to-live scheme for dentries. > > Adding a TTL heuristic to dentry revalidation might help our > directory mtime problem. :-) I have a serious problem seeing how it might 'solve' anything at all. If you're worried about correctness, then ttl is a completely useless scheme: you can defeat it just as easily as you can defeat the mtime resolution. The only difference is that you will eventually catch onto the mistake, but you may have been operating on the wrong file for quite some time before the ttl expires. IOW: The only useful ttl values are ttl=infinity and ttl=0. Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-16 20:49 ` Chuck Lever 2008-01-16 21:12 ` Risto Bell @ 2008-01-18 15:29 ` Bob Bell [not found] ` <20080118152902.GF7128-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 1 sibling, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-18 15:29 UTC (permalink / raw) To: Chuck Lever; +Cc: Trond Myklebust, Muntz, Daniel, Steve Dickson, NFS list On Wed, Jan 16, 2008 at 03:49:20PM -0500, Chuck Lever wrote: >On Jan 16, 2008, at 3:43 PM, Trond Myklebust wrote: >>How about >> -odircache=aggr[essive] /* Full caching */ >> -odircache=noneg[ative] /* Positive lookups only */ >> -odircache=off /* strict lookup revalidation */ > > "-olookupcache=" would be even more specific, if not more verbose. >dircache=off implies that not even readdir results are cached. > > -olookupcache=full > -olookupcache=pos[itive] > -olookupcache=strict I think that "lookupcache" is a little more accurate, and perhaps worth the verbosity. "dircache" could be misinterpreted to imply that directory listings are being cached -- which, incidentally, I'm start to receive complaints is a problem for us, too... Converstation on this seems to have died down, and I'm ready to revisit the patch. I'm inclined to go with: -o lookupcache=full -o lookupcache=pos[itive] -o lookupcache=none If you have a strong (enough) opinion otherwise, please speak up now and save me the trouble of an extra pass at the patch... -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <20080118152902.GF7128-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* RE: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <20080118152902.GF7128-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-18 20:00 ` Muntz, Daniel [not found] ` <01AE8AF878612047A442668306EAEB0501817BA4-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org> 2008-01-18 21:12 ` Chuck Lever 1 sibling, 1 reply; 30+ messages in thread From: Muntz, Daniel @ 2008-01-18 20:00 UTC (permalink / raw) To: Bob Bell, Chuck Lever; +Cc: Trond Myklebust, Steve Dickson, NFS list How about "all" instead of "full" ("all" being the opposite of "none")? A cache being "full", although not making sense in this context, does have another meaning. -----Original Message----- From: Bob Bell [mailto:b_linuxnfs-Y/+76LoPTq9wBoktGHYdvgC/G2K4zDHf@public.gmane.org] Sent: Friday, January 18, 2008 7:29 AM To: Chuck Lever Cc: Trond Myklebust; Muntz, Daniel; Steve Dickson; NFS list Subject: Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries On Wed, Jan 16, 2008 at 03:49:20PM -0500, Chuck Lever wrote: >On Jan 16, 2008, at 3:43 PM, Trond Myklebust wrote: >>How about >> -odircache=aggr[essive] /* Full caching */ >> -odircache=noneg[ative] /* Positive lookups only */ >> -odircache=off /* strict lookup revalidation */ > > "-olookupcache=" would be even more specific, if not more verbose. >dircache=off implies that not even readdir results are cached. > > -olookupcache=full > -olookupcache=pos[itive] > -olookupcache=strict I think that "lookupcache" is a little more accurate, and perhaps worth the verbosity. "dircache" could be misinterpreted to imply that directory listings are being cached -- which, incidentally, I'm start to receive complaints is a problem for us, too... Converstation on this seems to have died down, and I'm ready to revisit the patch. I'm inclined to go with: -o lookupcache=full -o lookupcache=pos[itive] -o lookupcache=none If you have a strong (enough) opinion otherwise, please speak up now and save me the trouble of an extra pass at the patch... -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <01AE8AF878612047A442668306EAEB0501817BA4-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org>]
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <01AE8AF878612047A442668306EAEB0501817BA4-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org> @ 2008-01-19 1:28 ` Bob Bell 0 siblings, 0 replies; 30+ messages in thread From: Bob Bell @ 2008-01-19 1:28 UTC (permalink / raw) To: Muntz, Daniel; +Cc: Chuck Lever, Trond Myklebust, Steve Dickson, NFS list On Fri, Jan 18, 2008 at 12:00:38PM -0800, Muntz, Daniel wrote: > How about "all" instead of "full" ("all" being the opposite of "none")? > A cache being "full", although not making sense in this context, does > have another meaning. That makes sense to me. -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries [not found] ` <20080118152902.GF7128-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 2008-01-18 20:00 ` Muntz, Daniel @ 2008-01-18 21:12 ` Chuck Lever 2008-01-18 21:17 ` Trond Myklebust 1 sibling, 1 reply; 30+ messages in thread From: Chuck Lever @ 2008-01-18 21:12 UTC (permalink / raw) To: Bob Bell; +Cc: Trond Myklebust, Muntz, Daniel, Steve Dickson, NFS list Hi Bob- On Jan 18, 2008, at 10:29 AM, Bob Bell wrote: > On Wed, Jan 16, 2008 at 03:49:20PM -0500, Chuck Lever wrote: >> On Jan 16, 2008, at 3:43 PM, Trond Myklebust wrote: >>> How about >>> -odircache=aggr[essive] /* Full caching */ >>> -odircache=noneg[ative] /* Positive lookups only */ >>> -odircache=off /* strict lookup revalidation */ >> >> "-olookupcache=" would be even more specific, if not more >> verbose. dircache=off implies that not even readdir results are >> cached. >> >> -olookupcache=full >> -olookupcache=pos[itive] >> -olookupcache=strict > > I think that "lookupcache" is a little more accurate, and perhaps > worth the verbosity. "dircache" could be misinterpreted to imply > that directory listings are being cached -- which, incidentally, > I'm start to receive complaints is a problem for us, too... > > Converstation on this seems to have died down, and I'm ready to > revisit the patch. I'm inclined to go with: > -o lookupcache=full > -o lookupcache=pos[itive] > -o lookupcache=none > > If you have a strong (enough) opinion otherwise, please speak up > now and save me the trouble of an extra pass at the patch... I understand that lookupcache=full would be current behavior, and =positive would prevent caching negative dentries. When would anyone want to use lookupcache=none -- what exactly would it do? How is it different than actimeo=0? -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries 2008-01-18 21:12 ` Chuck Lever @ 2008-01-18 21:17 ` Trond Myklebust 0 siblings, 0 replies; 30+ messages in thread From: Trond Myklebust @ 2008-01-18 21:17 UTC (permalink / raw) To: Chuck Lever; +Cc: Bob Bell, Muntz, Daniel, Steve Dickson, NFS list On Fri, 2008-01-18 at 16:12 -0500, Chuck Lever wrote: > When would anyone want to use lookupcache=none -- what exactly would > it do? How is it different than actimeo=0? It would be very different. The idea of lookupcache=none would be to turn off the directory mtime-based revalidation algorithm in nfs_lookup_revalidate(). IOW: you would force an on-the-wire LOOKUP call for each dentry revalidation. Cheers Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 3/3] nfs-utils: Add nonegde mount option [not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 2008-01-15 16:29 ` [PATCH 1/3] NFS: Check nlinks count Bob Bell 2008-01-15 16:30 ` [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries Bob Bell @ 2008-01-15 16:31 ` Bob Bell [not found] ` <20080115163130.GD18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 2008-01-16 1:55 ` [PATCH 0/3] Intro: Better handling coarse-grained timestamps Bob Bell 3 siblings, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-15 16:31 UTC (permalink / raw) To: linux-nfs From: Bob Bell <bell_robert@emc.com> Support a "nonegde" mount option to match the new NFS_MOUNT_NONEGDE flag. Signed-off-by: Bob Bell <bell_robert@emc.com> --- 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); ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <20080115163130.GD18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* Re: [PATCH 3/3] nfs-utils: Add nonegde mount option [not found] ` <20080115163130.GD18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-15 16:42 ` Chuck Lever 2008-01-16 1:13 ` Bob Bell 0 siblings, 1 reply; 30+ messages in thread From: Chuck Lever @ 2008-01-15 16:42 UTC (permalink / raw) To: Bob Bell; +Cc: linux-nfs On Jan 15, 2008, at 11:31 AM, Bob Bell wrote: > From: Bob Bell <bell_robert@emc.com> > > Support a "nonegde" mount option to match the new NFS_MOUNT_NONEGDE > flag. > > Signed-off-by: Bob Bell <bell_robert@emc.com> > --- > 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 */ Why is the patch replacing all the flag definitions? Did you check for inadvertent white space damage? > /* 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); > - > To unsubscribe from this list: send the line "unsubscribe linux- > nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html As I understand it, we aren't adding new options to the legacy part of the nfs-utils mount command any longer. Instead, add support for the option in the kernel's NFS mount option parser in fs/nfs/super.c. -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 3/3] nfs-utils: Add nonegde mount option 2008-01-15 16:42 ` Chuck Lever @ 2008-01-16 1:13 ` Bob Bell [not found] ` <20080116011305.GA26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-16 1:13 UTC (permalink / raw) To: Chuck Lever; +Cc: linux-nfs On Tue, Jan 15, 2008 at 11:42:54AM -0500, Chuck Lever wrote: >On Jan 15, 2008, at 11:31 AM, Bob Bell wrote: >>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 */ > >Why is the patch replacing all the flag definitions? Did you check >for inadvertent white space damage? Actually, I fixed one bit of erroneous whitespace I found (spaces instead of tab). The reason the definitions all change is because a leading 0. The existing flags were 0x0001 through 0x8000. The new flag is 0x10000. I thought would be nice to make the flags all 5 digits so that they visually lined up. I don't have to do that; it does make the patch uglier, but IMHO I think the resulting file is nicer. >As I understand it, we aren't adding new options to the legacy part of >the nfs-utils mount command any longer. Instead, add support for the >option in the kernel's NFS mount option parser in fs/nfs/super.c. Oh, perhaps I didn't fully investigate the context. I was just following the pattern I saw. I can see if it still works without that one snippet (I believe I already updated fs/nfs/super.c appropriately). I presume updating the man page is still appropriate though, correct? What about defining the flag? If it's not going to be used, should it still be defined as a placeholder? I'll default to "yes" unless I hear otherwise. -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <20080116011305.GA26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* Re: [PATCH 3/3] nfs-utils: Add nonegde mount option [not found] ` <20080116011305.GA26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-16 20:45 ` Chuck Lever 0 siblings, 0 replies; 30+ messages in thread From: Chuck Lever @ 2008-01-16 20:45 UTC (permalink / raw) To: Bob Bell; +Cc: linux-nfs Hey Bob - On Jan 15, 2008, at 8:13 PM, Bob Bell wrote: > On Tue, Jan 15, 2008 at 11:42:54AM -0500, Chuck Lever wrote: >> On Jan 15, 2008, at 11:31 AM, Bob Bell wrote: >>> 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 */ >> >> Why is the patch replacing all the flag definitions? Did you >> check for inadvertent white space damage? > > Actually, I fixed one bit of erroneous whitespace I found (spaces > instead of tab). The reason the definitions all change is because > a leading 0. The existing flags were 0x0001 through 0x8000. The > new flag is 0x10000. I thought would be nice to make the flags all > 5 digits so that they visually lined up. <EYEBALL CHECK> OK, I see it now. > I don't have to do that; it does make the patch uglier, but IMHO I > think the resulting file is nicer. Why not just expand these to 8 hex digits, and be done with it? >> As I understand it, we aren't adding new options to the legacy >> part of the nfs-utils mount command any longer. Instead, add >> support for the option in the kernel's NFS mount option parser in >> fs/nfs/super.c. > > Oh, perhaps I didn't fully investigate the context. I was just > following the pattern I saw. I can see if it still works without > that one snippet (I believe I already updated fs/nfs/super.c > appropriately). I presume updating the man page is still > appropriate though, correct? Yes; as long as you have the very latest version. See Steve's nfs- utils git repo (I think git://linux-nfs.org/nfs-utils is the correct one). > What about defining the flag? If it's not going to be used, should > it still be defined as a placeholder? I'll default to "yes" unless > I hear otherwise. In the name of having utils/mount/nfs_mount.h match what's in include/ linux/nfs_mount.h, I guess it is reasonable to define the flag in both places. IMO it would be nicer if nfs-utils just used the kernel header instead. -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 0/3] Intro: Better handling coarse-grained timestamps [not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> ` (2 preceding siblings ...) 2008-01-15 16:31 ` [PATCH 3/3] nfs-utils: Add nonegde mount option Bob Bell @ 2008-01-16 1:55 ` Bob Bell [not found] ` <20080116015526.GC26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> 3 siblings, 1 reply; 30+ messages in thread From: Bob Bell @ 2008-01-16 1:55 UTC (permalink / raw) To: linux-nfs On Tue, Jan 15, 2008 at 11:27:01AM -0500, Bob Bell wrote: >Secondly, a modification to the kernel has been made to disable the >caching of negative dentries when the NFS_MOUNT_NONEGDE flag is set. >Note that this does nothing to address outdated information being >returned by readdir(). However, it does allow a file to be open()ed or >lstat()ed if the filename is known. Because this has a potential >performance impact, it is left as an option for the user to select. Someone pointed me to this page on NFSv4.1 directory delegations: http://wiki.linux-nfs.org/wiki/index.php/NFSv4.1_Directory_Delegations I found the following quotes intriguing: "Even though the directories along the path are cached, [without directory delegations] negative dentry caching is not allowed because it potentially violates close-to-open consistency semantics." "Close-to-open consistency currently requires that even in a case where previous LOOKUPs or OPENs for a given file have recently and repeatedly failed, subsequent LOOKUPs and OPENs must nevertheless be sent to the server (i.e., negative caching provides no benefit in those cases)." I admittedly know little about what is being discussed here. However, is it possible that the Linux NFS client should *NEVER* cache negative entries? (well, maybe with the exception of "nocto") I'm interested if anyone has thoughts on the matter, though I know don't enough to argue either side, so here's a really easy chance to win an argument. :) -- Bob Bell ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <20080116015526.GC26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>]
* Re: [PATCH 0/3] Intro: Better handling coarse-grained timestamps [not found] ` <20080116015526.GC26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org> @ 2008-01-16 2:18 ` Trond Myklebust [not found] ` <1200449912.28088.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 2:18 UTC (permalink / raw) To: Bob Bell; +Cc: linux-nfs On Tue, 2008-01-15 at 20:55 -0500, Bob Bell wrote: > On Tue, Jan 15, 2008 at 11:27:01AM -0500, Bob Bell wrote: > >Secondly, a modification to the kernel has been made to disable the > >caching of negative dentries when the NFS_MOUNT_NONEGDE flag is set. > >Note that this does nothing to address outdated information being > >returned by readdir(). However, it does allow a file to be open()ed or > >lstat()ed if the filename is known. Because this has a potential > >performance impact, it is left as an option for the user to select. > > Someone pointed me to this page on NFSv4.1 directory delegations: > http://wiki.linux-nfs.org/wiki/index.php/NFSv4.1_Directory_Delegations > > I found the following quotes intriguing: > > "Even though the directories along the path are cached, [without > directory delegations] negative dentry caching is not allowed because it > potentially violates close-to-open consistency semantics." Negative dentry caching has nothing whatsoever to do with close-to-open semantics. > "Close-to-open consistency currently requires that even in a case where > previous LOOKUPs or OPENs for a given file have recently and repeatedly > failed, subsequent LOOKUPs and OPENs must nevertheless be sent to the > server (i.e., negative caching provides no benefit in those cases)." Nope. All close-to-open cache consistency requires is that the client revalidate the file/directory cached data upon an open()/opendir() call by checking the inode mtime and/or change attribute (NFSv4 only). I think we need to revisit that wiki entry... Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200449912.28088.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 0/3] Intro: Better handling coarse-grained timestamps [not found] ` <1200449912.28088.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-16 17:16 ` david m. richter 2008-01-16 19:47 ` Trond Myklebust 0 siblings, 1 reply; 30+ messages in thread From: david m. richter @ 2008-01-16 17:16 UTC (permalink / raw) To: Trond Myklebust; +Cc: Bob Bell, linux-nfs On Tue, 15 Jan 2008, Trond Myklebust wrote: > > On Tue, 2008-01-15 at 20:55 -0500, Bob Bell wrote: > > On Tue, Jan 15, 2008 at 11:27:01AM -0500, Bob Bell wrote: > > >Secondly, a modification to the kernel has been made to disable the > > >caching of negative dentries when the NFS_MOUNT_NONEGDE flag is set. > > >Note that this does nothing to address outdated information being > > >returned by readdir(). However, it does allow a file to be open()ed or > > >lstat()ed if the filename is known. Because this has a potential > > >performance impact, it is left as an option for the user to select. > > > > Someone pointed me to this page on NFSv4.1 directory delegations: > > http://wiki.linux-nfs.org/wiki/index.php/NFSv4.1_Directory_Delegations > > > > I found the following quotes intriguing: > > > > "Even though the directories along the path are cached, [without > > directory delegations] negative dentry caching is not allowed because it > > potentially violates close-to-open consistency semantics." > > Negative dentry caching has nothing whatsoever to do with close-to-open > semantics. > > > "Close-to-open consistency currently requires that even in a case where > > previous LOOKUPs or OPENs for a given file have recently and repeatedly > > failed, subsequent LOOKUPs and OPENs must nevertheless be sent to the > > server (i.e., negative caching provides no benefit in those cases)." > > Nope. All close-to-open cache consistency requires is that the client > revalidate the file/directory cached data upon an open()/opendir() call > by checking the inode mtime and/or change attribute (NFSv4 only). > > I think we need to revisit that wiki entry... so then, would it instead be correct to say that the negative dentry caching on the client afforded by the delegation is beneficial insofar as it obviates the client's need to revalidate the file/directory in question? if so, i understand the flawed CTO wording and will fix the wiki. thanks, d . > > Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 0/3] Intro: Better handling coarse-grained timestamps 2008-01-16 17:16 ` david m. richter @ 2008-01-16 19:47 ` Trond Myklebust [not found] ` <1200512872.6932.8.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> 0 siblings, 1 reply; 30+ messages in thread From: Trond Myklebust @ 2008-01-16 19:47 UTC (permalink / raw) To: david m. richter; +Cc: Bob Bell, linux-nfs On Wed, 2008-01-16 at 12:16 -0500, david m. richter wrote: > so then, would it instead be correct to say that the negative > dentry caching on the client afforded by the delegation is beneficial > insofar as it obviates the client's need to revalidate the file/directory > in question? if so, i understand the flawed CTO wording and will fix the > wiki. Delegations give you a guarantee that the directory contents (i.e. the readdir() information) have not changed, and so the client no longer needs to poll the directory for change information. IOW: specifically they allow the client to optimise away the GETATTR call in opendir(), and they allow it to optimise away most of nfs_lookup_revalidate(). Cheers Trond ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <1200512872.6932.8.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>]
* Re: [PATCH 0/3] Intro: Better handling coarse-grained timestamps [not found] ` <1200512872.6932.8.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org> @ 2008-01-16 20:09 ` david m. richter 0 siblings, 0 replies; 30+ messages in thread From: david m. richter @ 2008-01-16 20:09 UTC (permalink / raw) To: Trond Myklebust; +Cc: Bob Bell, linux-nfs On Wed, 16 Jan 2008, Trond Myklebust wrote: > > On Wed, 2008-01-16 at 12:16 -0500, david m. richter wrote: > > so then, would it instead be correct to say that the negative > > dentry caching on the client afforded by the delegation is beneficial > > insofar as it obviates the client's need to revalidate the file/directory > > in question? if so, i understand the flawed CTO wording and will fix the > > wiki. > > Delegations give you a guarantee that the directory contents (i.e. the > readdir() information) have not changed, and so the client no longer > needs to poll the directory for change information. > > IOW: specifically they allow the client to optimise away the GETATTR > call in opendir(), and they allow it to optimise away most of > nfs_lookup_revalidate(). > > Cheers > Trond good, i'm on the same page as you here. thanks, trond, d . ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2008-01-19 1:29 UTC | newest]
Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-15 16:27 [PATCH 0/3] Intro: Better handling coarse-grained timestamps Bob Bell
[not found] ` <20080115162658.GA18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-15 16:29 ` [PATCH 1/3] NFS: Check nlinks count Bob Bell
2008-01-15 16:30 ` [PATCH 2/3] NFS: Add NFS_MOUNT_NONEGDE flag to avoid caching negative dentries Bob Bell
[not found] ` <20080115163013.GC18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-15 16:52 ` Trond Myklebust
[not found] ` <1200415972.7702.7.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-15 17:04 ` Chuck Lever
2008-01-15 17:14 ` Trond Myklebust
2008-01-16 1:22 ` Bob Bell
[not found] ` <20080116012209.GB26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-16 2:42 ` Trond Myklebust
[not found] ` <1200451350.28088.43.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-16 12:49 ` Steve Dickson
[not found] ` <478DFD5A.1040501-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-01-16 19:43 ` Muntz, Daniel
[not found] ` <01AE8AF878612047A442668306EAEB05018178E7-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org>
2008-01-16 20:43 ` Trond Myklebust
[not found] ` <1200516219.6932.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-16 20:49 ` Chuck Lever
2008-01-16 21:12 ` Risto Bell
[not found] ` <478E7345.8080003-+wT8y+m8/X5BDgjK7y7TUQ@public.gmane.org>
2008-01-16 21:56 ` Trond Myklebust
[not found] ` <1200520574.15282.24.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-16 22:09 ` Chuck Lever
2008-01-16 23:21 ` Trond Myklebust
2008-01-18 15:29 ` Bob Bell
[not found] ` <20080118152902.GF7128-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-18 20:00 ` Muntz, Daniel
[not found] ` <01AE8AF878612047A442668306EAEB0501817BA4-Ye0EzW0T4yEQ4vjYWPuN5KYtpRd4g51m@public.gmane.org>
2008-01-19 1:28 ` Bob Bell
2008-01-18 21:12 ` Chuck Lever
2008-01-18 21:17 ` Trond Myklebust
2008-01-15 16:31 ` [PATCH 3/3] nfs-utils: Add nonegde mount option Bob Bell
[not found] ` <20080115163130.GD18911-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-15 16:42 ` Chuck Lever
2008-01-16 1:13 ` Bob Bell
[not found] ` <20080116011305.GA26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-16 20:45 ` Chuck Lever
2008-01-16 1:55 ` [PATCH 0/3] Intro: Better handling coarse-grained timestamps Bob Bell
[not found] ` <20080116015526.GC26010-y89O8yXFYpDSsb2jM9SCN5/hYUUxywnI@public.gmane.org>
2008-01-16 2:18 ` Trond Myklebust
[not found] ` <1200449912.28088.22.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-16 17:16 ` david m. richter
2008-01-16 19:47 ` Trond Myklebust
[not found] ` <1200512872.6932.8.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-01-16 20:09 ` david m. richter
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.