rpms/kernel/devel linux-2.6-nfs4-callback-hidden.patch, NONE, 1.1 kernel.spec, 1.1827, 1.1828 linux-2.6-nfsd4-proots.patch, 1.3, 1.4

Steve Dickson steved at fedoraproject.org
Wed Oct 14 22:28:17 UTC 2009


Author: steved

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv19084

Modified Files:
	kernel.spec linux-2.6-nfsd4-proots.patch 
Added Files:
	linux-2.6-nfs4-callback-hidden.patch 
Log Message:
- Updated the NFS v4 pseudo root patch so it will apply
- Fixed hang during NFS installs (bz 528537)


linux-2.6-nfs4-callback-hidden.patch:
 callback_xdr.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE linux-2.6-nfs4-callback-hidden.patch ---
Author: Steve Dickson <steved at redhat.com>
Date: Tue Oct 13 15:59:57 EDT 2009

To avoid hangs in the svc_unregister(), on version 4 mounts 
(and unmounts), when rpcbind is not running, make the nfs4 callback 
program an 'hidden' service by setting the 'vs_hidden' flag in the 
nfs4_callback_version structure. 

Signed-off-by: Steve Dickson <steved at redhat.com>

diff -up linux-2.6.31.x86_64/fs/nfs/callback_xdr.c.orig linux-2.6.31.x86_64/fs/nfs/callback_xdr.c
--- linux-2.6.31.x86_64/fs/nfs/callback_xdr.c.orig	2009-09-09 18:13:59.000000000 -0400
+++ linux-2.6.31.x86_64/fs/nfs/callback_xdr.c	2009-10-13 15:40:19.000000000 -0400
@@ -716,5 +716,6 @@ struct svc_version nfs4_callback_version
 	.vs_proc = nfs4_callback_procedures1,
 	.vs_xdrsize = NFS4_CALLBACK_XDRSIZE,
 	.vs_dispatch = NULL,
+	.vs_hidden = 1,
 };
 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1827
retrieving revision 1.1828
diff -u -p -r1.1827 -r1.1828
--- kernel.spec	14 Oct 2009 19:22:18 -0000	1.1827
+++ kernel.spec	14 Oct 2009 22:28:15 -0000	1.1828
@@ -697,6 +697,7 @@ Patch2903: linux-2.6-revert-dvb-net-kabi
 
 # NFSv4
 Patch3050: linux-2.6-nfsd4-proots.patch
+Patch3051: linux-2.6-nfs4-callback-hidden.patch
 
 # VIA Nano / VX8xx updates
 Patch11010: via-hwmon-temp-sensor.patch
@@ -1175,7 +1176,8 @@ ApplyPatch linux-2.6-execshield.patch
 # eCryptfs
 
 # NFSv4
-#ApplyPatch linux-2.6-nfsd4-proots.patch
+ApplyPatch linux-2.6-nfsd4-proots.patch
+ApplyPatch linux-2.6-nfs4-callback-hidden.patch
 
 # USB
 ApplyPatch linux-2.6-driver-level-usb-autosuspend.diff
@@ -1969,6 +1971,10 @@ fi
 # ##############################################################
 
 %changelog
+* Wed Oct 14 2009 Steve Dickson <steved at redhat.com>
+- Updated the NFS v4 pseudo root patch so it will apply
+- Fixed hang during NFS installs (bz 528537)
+
 * Wed Oct 14 2009 Peter Jones <pjones at redhat.com>
 - Add scsi_register_device_handler to modules.block's symbol list so
   we'll have scsi device handlers in installer images.

linux-2.6-nfsd4-proots.patch:
 fs/nfsd/export.c            |   12 +++++-
 fs/nfsd/nfs4xdr.c           |   83 ++++++++++++++++++++++++++++++++++++--------
 fs/nfsd/nfsfh.c             |   32 ++++++++++++++++
 fs/nfsd/vfs.c               |   68 ++++++++++++++++++++++++++++++++++--
 include/linux/nfsd/export.h |    3 +
 include/linux/nfsd/nfsd.h   |    2 +
 6 files changed, 181 insertions(+), 19 deletions(-)

Index: linux-2.6-nfsd4-proots.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-nfsd4-proots.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- linux-2.6-nfsd4-proots.patch	9 Sep 2009 22:43:52 -0000	1.3
+++ linux-2.6-nfsd4-proots.patch	14 Oct 2009 22:28:15 -0000	1.4
@@ -1,7 +1,7 @@
-diff -up linux-2.6.30.noarch/fs/nfsd/export.c.save linux-2.6.30.noarch/fs/nfsd/export.c
---- linux-2.6.30.noarch/fs/nfsd/export.c.save	2009-09-09 15:11:54.702436000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/export.c	2009-09-09 15:12:44.520167000 -0400
-@@ -104,6 +104,7 @@ static int expkey_parse(struct cache_det
+diff -up linux-2.6.31.noarch/fs/nfsd/export.c.orig linux-2.6.31.noarch/fs/nfsd/export.c
+--- linux-2.6.31.noarch/fs/nfsd/export.c.orig	2009-10-14 14:26:23.000000000 -0400
++++ linux-2.6.31.noarch/fs/nfsd/export.c	2009-10-14 15:02:44.000000000 -0400
+@@ -109,6 +109,7 @@ static int expkey_parse(struct cache_det
  	if (mesg[mlen-1] != '\n')
  		return -EINVAL;
  	mesg[mlen-1] = 0;
@@ -9,7 +9,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  
  	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
  	err = -ENOMEM;
-@@ -181,6 +182,8 @@ static int expkey_parse(struct cache_det
+@@ -186,6 +187,8 @@ static int expkey_parse(struct cache_det
  	if (dom)
  		auth_domain_put(dom);
  	kfree(buf);
@@ -18,7 +18,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  	return err;
  }
  
-@@ -351,7 +354,10 @@ static void svc_export_request(struct ca
+@@ -356,7 +359,10 @@ static void svc_export_request(struct ca
  		(*bpp)[0] = '\n';
  		return;
  	}
@@ -29,7 +29,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  	(*bpp)[-1] = '\n';
  }
  
-@@ -500,6 +506,7 @@ static int svc_export_parse(struct cache
+@@ -510,6 +516,7 @@ static int svc_export_parse(struct cache
  	if (mesg[mlen-1] != '\n')
  		return -EINVAL;
  	mesg[mlen-1] = 0;
@@ -37,7 +37,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  
  	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
  	if (!buf)
-@@ -619,6 +626,8 @@ out1:
+@@ -629,6 +636,8 @@ out1:
  	auth_domain_put(dom);
  out:
  	kfree(buf);
@@ -46,7 +46,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  	return err;
  }
  
-@@ -1413,6 +1422,7 @@ static struct flags {
+@@ -1425,6 +1434,7 @@ static struct flags {
  	{ NFSEXP_CROSSMOUNT, {"crossmnt", ""}},
  	{ NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}},
  	{ NFSEXP_NOAUTHNLM, {"insecure_locks", ""}},
@@ -54,7 +54,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  #ifdef MSNFS
  	{ NFSEXP_MSNFS, {"msnfs", ""}},
  #endif
-@@ -1493,7 +1503,7 @@ static int e_show(struct seq_file *m, vo
+@@ -1505,7 +1515,7 @@ static int e_show(struct seq_file *m, vo
  	struct svc_export *exp = container_of(cp, struct svc_export, h);
  
  	if (p == SEQ_START_TOKEN) {
@@ -63,10 +63,10 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  		seq_puts(m, "# Path Client(Flags) # IPs\n");
  		return 0;
  	}
-diff -up linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c
---- linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save	2009-09-09 15:11:54.707433000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c	2009-09-09 15:12:36.408695000 -0400
-@@ -2176,28 +2176,61 @@ static inline int attributes_need_mount(
+diff -up linux-2.6.31.noarch/fs/nfsd/nfs4xdr.c.orig linux-2.6.31.noarch/fs/nfsd/nfs4xdr.c
+--- linux-2.6.31.noarch/fs/nfsd/nfs4xdr.c.orig	2009-10-14 14:26:23.000000000 -0400
++++ linux-2.6.31.noarch/fs/nfsd/nfs4xdr.c	2009-10-14 15:02:44.000000000 -0400
+@@ -2174,28 +2174,61 @@ static inline int attributes_need_mount(
  	return 0;
  }
  
@@ -140,7 +140,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	exp_get(exp);
  	/*
  	 * In the case of a mountpoint, the client may be asking for
-@@ -2258,6 +2291,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2256,6 +2289,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
  	struct readdir_cd *ccd = ccdv;
  	struct nfsd4_readdir *cd = container_of(ccd, struct nfsd4_readdir, common);
  	int buflen;
@@ -148,7 +148,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	__be32 *p = cd->buffer;
  	__be32 *cookiep;
  	__be32 nfserr = nfserr_toosmall;
-@@ -2268,19 +2302,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2266,19 +2300,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
  		return 0;
  	}
  
@@ -191,9 +191,9 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	switch (nfserr) {
  	case nfs_ok:
  		p += buflen;
-diff -up linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save linux-2.6.30.noarch/fs/nfsd/nfsfh.c
---- linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save	2009-09-09 15:11:54.711427000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfsfh.c	2009-09-09 15:12:48.357903000 -0400
+diff -up linux-2.6.31.noarch/fs/nfsd/nfsfh.c.orig linux-2.6.31.noarch/fs/nfsd/nfsfh.c
+--- linux-2.6.31.noarch/fs/nfsd/nfsfh.c.orig	2009-10-14 14:26:23.000000000 -0400
++++ linux-2.6.31.noarch/fs/nfsd/nfsfh.c	2009-10-14 15:02:44.000000000 -0400
 @@ -109,6 +109,30 @@ static __be32 nfsd_setuser_and_check_por
  	return nfserrno(nfsd_setuser(rqstp, exp));
  }
@@ -240,33 +240,10 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	}
  
  	error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
-diff -up linux-2.6.30.noarch/fs/nfsd/vfs.c.save linux-2.6.30.noarch/fs/nfsd/vfs.c
---- linux-2.6.30.noarch/fs/nfsd/vfs.c.save	2009-09-09 15:11:54.715423000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/vfs.c	2009-09-09 15:12:39.978431000 -0400
-@@ -89,6 +89,12 @@ struct raparm_hbucket {
- #define RAPARM_HASH_MASK	(RAPARM_HASH_SIZE-1)
- static struct raparm_hbucket	raparm_hash[RAPARM_HASH_SIZE];
- 
-+static inline int
-+nfsd_v4client(struct svc_rqst *rq)
-+{
-+    return((rq->rq_prog == NFS_PROGRAM) && (rq->rq_vers == 4));
-+}
-+
- /* 
-  * Called from nfsd_lookup and encode_dirent. Check if we have crossed 
-  * a mount point.
-@@ -115,7 +121,8 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, s
- 		path_put(&path);
- 		goto out;
- 	}
--	if ((exp->ex_flags & NFSEXP_CROSSMOUNT) || EX_NOHIDE(exp2)) {
-+	if (nfsd_v4client(rqstp) || 
-+		(exp->ex_flags & NFSEXP_CROSSMOUNT) || EX_NOHIDE(exp2)) {
- 		/* successfully crossed mount point */
- 		/*
- 		 * This is subtle: path.dentry is *not* on path.mnt
-@@ -134,6 +141,55 @@ out:
+diff -up linux-2.6.31.noarch/fs/nfsd/vfs.c.orig linux-2.6.31.noarch/fs/nfsd/vfs.c
+--- linux-2.6.31.noarch/fs/nfsd/vfs.c.orig	2009-10-14 14:26:23.000000000 -0400
++++ linux-2.6.31.noarch/fs/nfsd/vfs.c	2009-10-14 15:03:37.000000000 -0400
+@@ -141,6 +141,55 @@ out:
  	return err;
  }
  
@@ -322,7 +299,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  __be32
  nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp,
  		   const char *name, unsigned int len,
-@@ -143,7 +199,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
+@@ -150,7 +199,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
  	struct dentry		*dparent;
  	struct dentry		*dentry;
  	__be32			err;
@@ -331,7 +308,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  
  	dprintk("nfsd: nfsd_lookup(fh %s, %.*s)\n", SVCFH_fmt(fhp), len,name);
  
-@@ -155,6 +211,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
+@@ -162,6 +211,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
  	dparent = fhp->fh_dentry;
  	exp  = fhp->fh_export;
  	exp_get(exp);
@@ -339,7 +316,16 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  
  	/* Lookup the name, but don't follow links */
  	if (isdotent(name, len)) {
-@@ -199,9 +256,21 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
+@@ -169,7 +219,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
+ 			dentry = dget(dparent);
+ 		else if (dparent != exp->ex_path.dentry)
+ 			dentry = dget_parent(dparent);
+-		else if (!EX_NOHIDE(exp))
++		else if (!EX_NOHIDE(exp) && !nfsd_v4client(rqstp))
+ 			dentry = dget(dparent); /* .. == . just like at / */
+ 		else {
+ 			/* checking mountpoint crossing is very different when stepping up */
+@@ -206,9 +256,21 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
  		if (IS_ERR(dentry))
  			goto out_nfserr;
  		/*
@@ -362,9 +348,9 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  			if ((host_err = nfsd_cross_mnt(rqstp, &dentry, &exp))) {
  				dput(dentry);
  				goto out_nfserr;
-diff -up linux-2.6.30.noarch/include/linux/nfsd/export.h.save linux-2.6.30.noarch/include/linux/nfsd/export.h
---- linux-2.6.30.noarch/include/linux/nfsd/export.h.save	2009-09-09 15:11:54.719419000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/export.h	2009-09-09 15:12:29.064157000 -0400
+diff -up linux-2.6.31.noarch/include/linux/nfsd/export.h.orig linux-2.6.31.noarch/include/linux/nfsd/export.h
+--- linux-2.6.31.noarch/include/linux/nfsd/export.h.orig	2009-09-09 18:13:59.000000000 -0400
++++ linux-2.6.31.noarch/include/linux/nfsd/export.h	2009-10-14 15:02:44.000000000 -0400
 @@ -39,7 +39,8 @@
  #define NFSEXP_FSID		0x2000
  #define	NFSEXP_CROSSMOUNT	0x4000
@@ -375,10 +361,10 @@ diff -up linux-2.6.30.noarch/include/lin
  
  /* The flags that may vary depending on security flavor: */
  #define NFSEXP_SECINFO_FLAGS	(NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
-diff -up linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save linux-2.6.30.noarch/include/linux/nfsd/nfsd.h
---- linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save	2009-09-09 15:11:54.723415000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/nfsd.h	2009-09-09 15:12:33.025896000 -0400
-@@ -76,6 +76,8 @@ int		nfsd_racache_init(int);
+diff -up linux-2.6.31.noarch/include/linux/nfsd/nfsd.h.orig linux-2.6.31.noarch/include/linux/nfsd/nfsd.h
+--- linux-2.6.31.noarch/include/linux/nfsd/nfsd.h.orig	2009-10-14 14:26:23.000000000 -0400
++++ linux-2.6.31.noarch/include/linux/nfsd/nfsd.h	2009-10-14 15:02:44.000000000 -0400
+@@ -79,6 +79,8 @@ int		nfsd_racache_init(int);
  void		nfsd_racache_shutdown(void);
  int		nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
  		                struct svc_export **expp);




More information about the fedora-extras-commits mailing list