aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2006-06-30 04:56:12 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-30 14:25:40 -0400
commit7e4053645a67097fa9bec2794d685b1d3928757a (patch)
tree17efce223986ff09650ba2cb3acf8ab348424880
parent4c9608b2f2f51e84eba72f4bf061d360259ce656 (diff)
[PATCH] knfsd: ignore ref_fh when crossing a mountpoint
nfsd tries to return to a client the same sort of filehandle as was used by the client. This removes some filehandle aliasing issues and means that a server upgrade followed by a downgrade will not confused clients not restarted during that time. However when crossing a mountpoint, the filehandle used for one filesystem doesn't provide any useful information on what sort of filehandle should be used on the other, and can provide misleading information. So if the reference filehandle is on a different filesystem to the one being generated, ignore it. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/nfsd/nfsfh.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index e3f3bbea8ae7..ca96ede30a10 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -312,8 +312,8 @@ int
312fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, struct svc_fh *ref_fh) 312fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, struct svc_fh *ref_fh)
313{ 313{
314 /* ref_fh is a reference file handle. 314 /* ref_fh is a reference file handle.
315 * if it is non-null, then we should compose a filehandle which is 315 * if it is non-null and for the same filesystem, then we should compose
316 * of the same version, where possible. 316 * a filehandle which is of the same version, where possible.
317 * Currently, that means that if ref_fh->fh_handle.fh_version == 0xca 317 * Currently, that means that if ref_fh->fh_handle.fh_version == 0xca
318 * Then create a 32byte filehandle using nfs_fhbase_old 318 * Then create a 32byte filehandle using nfs_fhbase_old
319 * 319 *
@@ -332,7 +332,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
332 parent->d_name.name, dentry->d_name.name, 332 parent->d_name.name, dentry->d_name.name,
333 (inode ? inode->i_ino : 0)); 333 (inode ? inode->i_ino : 0));
334 334
335 if (ref_fh) { 335 if (ref_fh && ref_fh->fh_export == exp) {
336 ref_fh_version = ref_fh->fh_handle.fh_version; 336 ref_fh_version = ref_fh->fh_handle.fh_version;
337 if (ref_fh_version == 0xca) 337 if (ref_fh_version == 0xca)
338 ref_fh_fsid_type = 0; 338 ref_fh_fsid_type = 0;