No subject


Sun Oct 21 04:25:44 EDT 2007


linux-pnfs-bh/rebase-chron
but later you got the right path (without the branch name in the path)
Is there still a problem?
=20
Benny

=20
________________________________

From: androsadamson at gmail.com on behalf of William A. (Andy) Adamson
Sent: Tue 2007-12-11 15:43
To: Halevy, Benny
Cc: pnfs at linux-nfs.org
Subject: Re: [pnfs] 2.6-latest rebase


git clone git://bhalevy.com/linux-pnfs-bh fails with read error =
(Connection reset by peer)

-->Andy


On Dec 11, 2007 4:22 AM, Benny Halevy <bhalevy at panasas.com > wrote:


	I've completed rebasing our patches in the linux-pnfs-2.6 over =
2.6.24-rc5=20
	in git://bhalevy.com/linux-pnfs-bh in the rebase-chron branch
	(or over gitweb in =
http://www.bhalevy.com/git/gitweb.cgi?p=3Dlinux-pnfs-bh/.git )
=09
	I've found and fixed a few bugs along the way, see details below...
	This is untested yet, just verified against the master branch
	with git-diff -w.  The vast majority of the differences are style =
related.=20
=09
	Style: Please, please, PLEASE start using scripts/checkpatch.pl =
*before* submitting
	patches to the tree.  I don't understand why new code submitted in the =
2.6-latest
	tree wasn't coded in the linux kernel coding style and then there were =
later=20
	patches to convert spaces to tabs, remove trailing space, etc. etc.
	This just gave me a horrible headache to fix that so the code looks
	sane, self-consistent WRT coding style and easily merge and =
rebase-able.
	Let's stick to the Linux kernel coding style if we ever think of =
pushing upstream.
=09
	I called the branch rebase-chron as the patches are in chronological =
order.
	Sometime soon I want to sort the patches and create a nfs41 (sessions)=20
	branch and a pnfs branch, stacked (rebased) on top of it.  Unlike what =
we had
	in the 2.6.18.3 <http://2.6.18.3/>  tree, when the respective patchsets =
are rebased one on top
	of the other, keeping the branches in sync should be possible.=20
	I split some existing patches that touched both subsystems to allow =
this but more
	work is needed.
=09
	Naming convention: it was quite difficult to find our patches in the =
huge
	linux hey stack since we had no naming convention for the patches, plus =

	the commit headers were screwed up in many cases when folks didn't =
insert
	a blank line after the first line in the patch description. As a =
reminder,
	the first line identifies the patch in most tools and keeping it short=20
	is important for streamlining git-rebase--interactive.
	[see also =
http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#creating=
-good-commit-messages ]
=09
	To help maintain the patches further I used nfs41: nfsd41: pnfs: and =
pnfsd: prefixes
	to identify the appropriate subsystem.  Let's try to keep that =
convention from now on
	to make locating them in the crowd and sorting them easier. (I'm not =
married to=20
	these specific names, although they make sense to me at least)
=09
	Bisectability: I checked that all patches compile (I checked most of =
them for
	fs/nfs, fs/nfsd, and net/sunrpc).  The relevant ones with CONFIG_PNFS =
defined=20
	and undefined (need also to check with CONFIG_NFS{,D}_V4_1 undefined as =
well).
	This required squashing several patches that fixed stuff into the =
original
	patch they fixed.  Ideally, in the future, all patches will be tested =
before=20
	submit so they compile, run, and pass the relevant tests.  If you =
submit
	a patchset comprised of several patches, each one of them =
(cumulatively)
	should be buildable so that if anything breaks we can find the specific =

	patch at blame, isolate it, and fix it.
=09
	Benny
	--
=09
	fixes done on rebase to 2.6.24-rc5
	 master - 3d8c873a39ff5b497088b4ebc36dc1eb1b2c2623
	 2.6.24-rc5-nfs41-rebased 9b1f7b57cd323f45a0fcbd5ac3575266a083a83f=20
=09
	diff made using git-diff -w 3d8c873a39ff5b497088b4ebc36dc1eb1b2c2623
=09
	general fixes
	-------------
=09
	diff --git a/Makefile b/Makefile
	index c1825aa..a4ee102 100644
	--- a/Makefile
	+++ b/Makefile=20
	@@ -1,7 +1,7 @@
	 VERSION =3D 2
	 PATCHLEVEL =3D 6
	 SUBLEVEL =3D 24
	-EXTRAVERSION =3D -rc5
	+EXTRAVERSION =3D -rc5-nfs41
	 NAME =3D Arr Matey! A Hairy Bilge Rat!
=09
	 # *DOCUMENTATION*
=09
	Added extraversion, will add on for pnfs once separate branhces =
established=20
=09
	diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
	index c71f4ee..81c8837 100644
	--- a/fs/nfs/Makefile
	+++ b/fs/nfs/Makefile
	@@ -18,7 +18,6 @@ nfs-$(CONFIG_NFS_V4_1)        +=3D =
nfs41_session_recovery.o
	 nfs-$(CONFIG_PNFS)     +=3D pnfs.o
	 nfs-$(CONFIG_NFS_DIRECTIO) +=3D direct.o
	 nfs-$(CONFIG_SYSCTL) +=3D sysctl.o
	-nfs-objs               :=3D $(nfs-y)
=09
	 obj-m +=3D nfslayoutdriver.o
	 nfslayoutdriver-objs :=3D nfs4filelayout.o nfs4filelayoutdev.o=20
=09
	missing from master
=09
	diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h
	index af0855e..c93cf23 100644
	--- a/include/linux/exportfs.h
	+++ b/include/linux/exportfs.h
	@@ -110,6 +110,7 @@ struct export_operations {=20
	       int (*get_name)(struct dentry *parent, char *name,
	                       struct dentry *child);
	       struct dentry * (*get_parent)(struct dentry *child);
	+#if defined(CONFIG_PNFS)
	       /* pNFS operations */=20
	               /* pNFS: returns the verifier */
	       void (*get_verifier) (struct super_block *sb, u32 *p);
	@@ -144,7 +145,6 @@ struct export_operations {
	               /* pNFS: returns the layout */
	       int (*layout_return) (struct inode *inode, void *p);
=09
	-
	               /* callback from fs on MDS only */
	       int (*cb_get_state) (void *state);
	       int (*cb_layout_recall) (struct super_block *sb, struct inode =
*inode, void *p);=20
	@@ -152,6 +152,7 @@ struct export_operations {
	       int (*get_state) (struct inode *inode, void *fh, void *state);
	               /* callback from fs on DS only */
	       int (*cb_change_state) (void *p);=20
	+#endif /* CONFIG_PNFS */
	 };
=09
	 extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
=09
	diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
	index b59ee2b..c400d47 100644=20
	--- a/include/linux/nfs4_pnfs.h
	+++ b/include/linux/nfs4_pnfs.h
	@@ -12,6 +12,8 @@
	 #ifndef LINUX_NFS4_PNFS_H
	 #define LINUX_NFS4_PNFS_H
=09
	+#if defined(CONFIG_PNFS)
	+
	 #define NFS4_PNFS_DEV_MAXCOUNT 16=20
	 #define NFS4_PNFS_DEV_MAXSIZE 128
=09
	diff --git a/include/linux/nfsd/nfsd4_pnfs.h =
b/include/linux/nfsd/nfsd4_pnfs.h
	index 0d119f3..b64f09f 100644
	--- a/include/linux/nfsd/nfsd4_pnfs.h
	+++ b/include/linux/nfsd/nfsd4_pnfs.h=20
	@@ -36,6 +36,8 @@
	 #ifndef _LINUX_NFSD_NFSD4_PNFS_H
	 #define _LINUX_NFSD_NFSD4_PNFS_H
=09
	+#if defined(CONFIG_PNFS)
	+
	 #include <linux/nfs.h>
	 #include <linux/nfs_xdr.h>
=09
	diff --git a/include/linux/nfsd/pnfsd.h b/include/linux/nfsd/pnfsd.h=20
	index 373fc90..7f36011 100644
	--- a/include/linux/nfsd/pnfsd.h
	+++ b/include/linux/nfsd/pnfsd.h
	@@ -33,6 +33,11 @@
	 *
	 */
=09
	+#ifndef _LINUX_NFSD_PNFSD_H
	+#define _LINUX_NFSD_PNFSD_H
	+
	+#if defined(CONFIG_PNFS)=20
	+
	 #include <linux/nfsd/nfsd4_pnfs.h>
=09
	 /* pNFS Metadata to Data server state communication*/
	for compiling when !defined(CONFIG_PNFS)
=09
	diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
	index 1ba5771..18d9264 100644
	--- a/include/linux/nfs4.h
	+++ b/include/linux/nfs4.h
	@@ -109,6 +109,7 @@
=09
	 #define EXCHGID4_FLAG_SUPP_MOVED_REFER  0x00000001
	 #define EXCHGID4_FLAG_SUPP_MOVED_MIGR   0x00000002=20
	+#define EXCHGID4_FLAG_USE_NON_PNFS      0x00010000
	 #define EXCHGID4_FLAG_USE_PNFS_MDS      0x00020000
	 #define EXCHGID4_FLAG_USE_PNFS_DS       0x00040000
	 #define EXCHGID4_MFS_DS_FLAG_MASK      0x00060000
=09
	leave flag defined even if not used
=09
	diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
	index b500710..e479fa7 100644
	--- a/include/linux/nfs_xdr.h
	+++ b/include/linux/nfs_xdr.h
	@@ -986,12 +987,6 @@ struct nfs_impl_id4 {=20
	       struct nfstime4 date;
	 };
=09
	-#define EXCHGID4_FLAG_SUPP_MOVED_REFER 0x00000001
	-#define EXCHGID4_FLAG_SUPP_MOVED_MIGR  0x00000002
	-#define EXCHGID4_FLAG_USE_NON_PNFS     0x00010000
	-#define EXCHGID4_FLAG_USE_PNFS_MDS     0x00020000=20
	-#define EXCHGID4_FLAG_USE_PNFS_DS      0x00040000
	-
	 struct nfs41_exchange_id_args {
	       nfs4_verifier *                 verifier;
	       unsigned int                    id_len;
=09
	delete redundant definitions (exist in include/linux/nfs4.h)=20
=09
=09
	diff --git a/include/linux/sunrpc/gss_api.h =
b/include/linux/sunrpc/gss_api.h
	index 96b02a2..459c5fc 100644
	--- a/include/linux/sunrpc/gss_api.h
	+++ b/include/linux/sunrpc/gss_api.h
	@@ -8,7 +8,7 @@
	 * Bruce Fields <bfields at umich.edu>
	 * Copyright (c) 2000 The Regents of the University of Michigan
	 *
	- * $Id: gss_api.h,v 1.1.1.2 <http://1.1.1.2/>  2006/12/13 16:12:15 =
andros Exp $
	+ * $Id$
	 */
=09
	 #ifndef _LINUX_SUNRPC_GSS_API_H
	diff --git a/include/linux/sunrpc/svcauth_gss.h =
b/include/linux/sunrpc/svcauth_gss.h
	index d2fb1ae..417a1de 100644=20
	--- a/include/linux/sunrpc/svcauth_gss.h
	+++ b/include/linux/sunrpc/svcauth_gss.h
	@@ -4,7 +4,7 @@
	 * Bruce Fields <bfields at umich.edu>
	 * Copyright (c) 2002 The Regents of the Unviersity of Michigan=20
	 *
	- * $Id: svcauth_gss.h,v 1.1.1.1 <http://1.1.1.1/>  2006/01/19 14:36:46 =
andros Exp $
	+ * $Id$
	 *
	 */
=09
	diff --git a/include/linux/sunrpc/svcsock.h =
b/include/linux/sunrpc/svcsock.h=20
	index 36e300b..abb1185 100644
	diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
	index edee718..b64d8df 100644
	diff --git a/net/sunrpc/auth_gss/auth_gss.c =
b/net/sunrpc/auth_gss/auth_gss.c
	index d736fcc..a6e57d1 100644
	--- a/net/sunrpc/auth_gss/auth_gss.c
	+++ b/net/sunrpc/auth_gss/auth_gss.c
	@@ -34,7 +34,7 @@
	 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
	 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.=20
	 *
	- * $Id: auth_gss.c,v 1.1.1.4 <http://1.1.1.4/>  2006/12/13 16:12:22 =
andros Exp $
	+ * $Id$
	 */
=09
=09
=09
	cvs trash in master
=09
=09
	client side fixes
	-----------------=20
=09
	diff --git a/include/linux/nfs4_session.h =
b/include/linux/nfs4_session.h
	index d16920d..6faef0e 100644
	--- a/include/linux/nfs4_session.h
	+++ b/include/linux/nfs4_session.h
	@@ -45,9 +45,6 @@ struct nfs4_channel {=20
	 /*
	 * Session related parameters
	 */
	-
	-struct nfs_server;
	-
	 struct nfs4_session {
	       nfs41_sessionid                 sess_id;
	       u32                             flags;
	@@ -63,7 +60,6 @@ struct nfs4_session {=20
	       spinlock_t                      session_lock;
	       atomic_t                        ref_count;
	       struct rpc_wait_queue           recovery_waitq;
	-       struct nfs_server *             server;=20
	       struct rpc_clnt *               clnt;
	 };
=09
=09
	delete unused member
=09
=09
=09
	diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
	index 69f839d..c9c8f35 100644
	--- a/fs/nfs/nfs4filelayout.c=20
	+++ b/fs/nfs/nfs4filelayout.c
	@@ -176,7 +175,7 @@ extern struct rpc_call_ops nfs_read_partial_ops;
	 loff_t
	 filelayout_get_dserver_offset(loff_t offset, struct nfs4_filelayout * =
layout)
	 {
	-       if (layout =3D=3D NULL);=20
	+       if (layout =3D=3D NULL)
	               return offset;
=09
	       switch (layout->stripe_type) {
=09
	bug in master
=09
	diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
	index 184706e..4512049 100644=20
	--- a/fs/nfs/nfs4proc.c
	+++ b/fs/nfs/nfs4proc.c
	@@ -310,8 +310,11 @@ static int nfs4_sequence_done(struct nfs_server =
*server,
	                                               server->session,
	                                               res, status);=20
	                       break;
	-               default:
	+       case 0:
	                       ret =3D 0;
	+               break;
	+       default:
	+               BUG();
	       }
=09
	       return ret;=20
=09
	@@ -403,14 +406,17 @@ static int nfs4_setup_sequence(struct nfs_client =
*clp,
=09
	       switch (clp->cl_minorversion) {
	               case 1:
	-                       if ((ret =3D =
nfs41_recover_expired_session(task,=20
	-clp, session)))
	+               ret =3D nfs41_recover_expired_session(task, clp, =
session);
	+               if (ret)
	                               break;
	                       ret =3D nfs41_setup_sequence(session, args,=20
	                                       res, cache_reply, task);
	                       break;
	-               default:
	+       case 0:
	                       ret =3D 0;
	+               break;
	+       default:=20
	+               BUG();
	       }
=09
	       return ret;
=09
	@@ -507,8 +515,11 @@ int nfs4_call_sync(struct nfs_server *server,
	                       }
	                       break;
	               }=20
	-               default:
	+       case 0:
	                       ret =3D rpc_call_sync(clnt, msg, 0);
	+               break;
	+       default:
	+               BUG();
	       }
=09
	       return ret;=20
=09
	@@ -1711,15 +1724,17 @@ int nfs4_do_close(struct path *path, struct =
nfs4_state *state, int wait)
	       if (calldata->arg.seqid =3D=3D NULL)
	               goto out_free_calldata;
	       switch (server->nfs_client->cl_minorversion) {=20
	-       case 0:
	-               calldata->arg.stateid =3D &state->open_stateid;
	-               break;
	 #ifdef CONFIG_NFS_V4_1
	       case 1:
	               calldata->arg.stateid =3D &state->stateid;=20
	               memset(&calldata->arg.stateid->data, 0, 4);
	               break;
	-#endif
	+#endif /* CONFIG_NFS_V4_1 */
	+       case 0:
	+               calldata->arg.stateid =3D &state->open_stateid;=20
	+               break;
	+       default:
	+               BUG();
	       }
	       calldata->arg.bitmask =3D server->attr_bitmask;
	       calldata->res.fattr =3D &calldata->fattr;
=09
	added BUG() for minorversion non-01 case (several sites)=20
=09
	@@ -2922,7 +2938,7 @@ static int nfs4_read_done(struct rpc_task *task, =
struct nfs_read_data *data)
	       }
=09
	       nfs_invalidate_atime(data->inode);
	-       if (status > 0)
	+       if (task->tk_status > 0)=20
	               renew_lease(server, data->timestamp);
	       dprintk("<-- %s status=3D 0\n", __FUNCTION__);
	       return 0;
=09
	bug in master, status can't be >0 at this point in the code.=20
=09
=09
=09
	@@ -3576,12 +3599,14 @@ static int nfs4_handle_exception(const struct =
nfs_server *server, int errorcode,
	               case -NFS4ERR_EXPIRED:
	                       nfs4_schedule_state_recovery(clp);=20
	                       ret =3D nfs4_wait_clnt_recover(server->client, =
clp);
	-                       if ((ret =3D=3D 0) &&
	-                               !server->nfs_client->cl_minorversion) {
	+                       if (ret =3D=3D 0)=20
	                                       exception->retry =3D 1;
	+#if !defined(CONFIG_NFS_V4_1)
	                                       break;
	-                       }
	-#if defined (CONFIG_NFS_V4_1)
	+#else /* !defined(CONFIG_NFS_V4_1) */=20
	+                       if (!server->nfs_client->cl_minorversion)
	+                               break;
	+                       /* FALLTHROUGH */
	               case -NFS4ERR_BADSESSION:
	               case -NFS4ERR_BADSLOT:=20
	               case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
=09
	master implementation needelssly changes behavior for minorversion 0
=09
	diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
	index 74963db..1b008cb 100644=20
	--- a/fs/nfs/nfs4xdr.c
	+++ b/fs/nfs/nfs4xdr.c
	@@ -61,10 +61,9 @@
	@@ -349,7 +348,6 @@ static int nr_sequence_quads =3D 0;
	 #define NFS40_enc_open_downgrade_sz \
	                               (compound_encode_hdr_maxsz + \=20
	                                encode_putfh_maxsz + \
	-                               encode_putfh_maxsz + \
	                               encode_open_downgrade_maxsz + \
	                               encode_getattr_maxsz)=20
	 #define NFS40_dec_open_downgrade_sz \
=09
	master has extra encode_putfh_maxsz due to bad merge/apply
=09
	@@ -3419,9 +3454,9 @@ static int nfs41_xdr_enc_pnfs_layoutget(struct =
rpc_rqst *req, uint32_t *p, struc
	 #define READ_BUF(nbytes)  do { \
	       p =3D xdr_inline_decode(xdr, nbytes); \
	       if (unlikely(!p)) { \
	-               printk(KERN_INFO "%s: prematurely hit end of receive" \
	+               dprintk("nfs: %s: prematurely hit end of receive" \=20
	                               " buffer\n", __FUNCTION__); \
	-               printk(KERN_INFO "%s: xdr->p=3D%p, bytes=3D%u, =
xdr->end=3D%p\n", \
	+               dprintk("nfs: %s: xdr->p=3D%p, bytes=3D%u, =
xdr->end=3D%p\n", \=20
	                               __FUNCTION__, xdr->p, nbytes, xdr->end); =
\
	               return -EIO; \
	       } \
=09
	this and many friends, change missing from master, not sure why...
=09
	diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c=20
	index d411c45..15ad65a 100644
	--- a/fs/nfs/pnfs.c
	+++ b/fs/nfs/pnfs.c
	@@ -71,7 +71,7 @@ extern void nfs_commit_rpcsetup(struct nfs_write_data =
*data, int sync);
	 * pnfs_spinlock:
	 *     protects pnfs_modules_tbl.=20
	 */
	-static spinlock_t pnfs_spinlock =3D SPIN_LOCK_UNLOCKED;
	+static spinlock_t pnfs_spinlock =3D =
__SPIN_LOCK_UNLOCKED(pnfs_spinlock);
=09
	 /*
	 * pnfs_modules_tbl holds all pnfs modules
=09
	SPIN_LOCK_UNLOCKED was deprecated=20
=09
	server side fixes
	-----------------
=09
	diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
	index 0520636..679b64b 100644
	--- a/fs/nfsd/nfs4callback.c
	+++ b/fs/nfsd/nfs4callback.c
	@@ -795,10 +801,12 @@ nfs4_cb_null(struct rpc_task *task, void *dummy)=20
	       if (task->tk_status < 0) {
	               dprintk("NFSD: callback establishment to client %.*s =
failed\n",
	                       (int)clp->cl_name.len, clp->cl_name.data);
	-               return;=20
	+               goto out;
	       }
	       atomic_set(&cb->cb_set, 1);
	       dprintk("NFSD: callback set to client %u.%u.%u.%u\n", =
NIPQUAD(addr));
	+out:
	+       put_nfs4_client(clp);=20
	 }
=09
	 static const struct rpc_call_ops nfs4_cb_null_ops =3D {
=09
	diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
	index 68eaac6..041d4d4 100644
	--- a/fs/nfsd/nfs4state.c
	+++ b/fs/nfsd/nfs4state.c=20
	@@ -1944,6 +1941,7 @@ void nfsd_break_deleg_cb(struct file_lock *fl)
	               printk(KERN_INFO "NFSD: Callback thread failed for "
	                       "for client (clientid %08x/%08x)\n",=20
	                       clp->cl_clientid.cl_boot, =
clp->cl_clientid.cl_id);
	+               put_nfs4_client(dp->dl_client);
	               rpc_release_client(clnt);
	               nfs4_lock_state();=20
	               nfs4_put_delegation(dp);
=09
	these were dropped during Merge with Bruce's commits
	 2b47eece1fa519a81c8b802af77a8b8aa44baa10 and
	 cfdcad4da1903720b9b8c1f176e46a0ebf546be3
=09
	diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c=20
	index 4018837..d4f0fa2 100644
	--- a/fs/nfsd/nfs4xdr.c
	+++ b/fs/nfsd/nfs4xdr.c
	@@ -1606,7 +1604,14 @@ nfsd4_decode_compound(struct nfsd4_compoundargs =
*argp)
	                case OP_DESTROY_SESSION:
	                        op->status =3D =
nfsd4_decode_destroy_session(argp, &op-> u.destroy_session);
	                        break;
	-#endif
	+#else /* CONFIG_NFSD_V4_1 */
	+               case OP_EXCHANGE_ID:
	+               case OP_CREATE_SESSION:
	+               case OP_SEQUENCE:
	+               case OP_DESTROY_SESSION:
	+                       op->status =3D nfserr_notsupp;
	+                       break;
	+#endif /* CONFIG_NFSD_V4_1 */
	               default:
	                       op->opnum =3D OP_ILLEGAL;=20
	                       op->status =3D nfserr_op_illegal;
=09
	added error status for the !defined(CONFIG_NFSD_V4_1) case
	same as we do for !defined(CONFIG_PNFS)
=09
=09
	rpc fixes
	---------
=09
	diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c=20
	index 585507e..7166ba4 100644
	--- a/net/sunrpc/xprtsock.c
	+++ b/net/sunrpc/xprtsock.c
	@@ -2134,8 +2140,10 @@ static struct rpc_xprt *xs_setup_tcp(struct =
xprt_create *args)
	       xprt->max_payload =3D RPC_MAX_FRAGMENT_SIZE;=20
=09
	 #if defined (CONFIG_NFSD_V4_1)
	-       if (args->svsk) { /* backchannel */
	-               INIT_DELAYED_WORK(&transport->connect_worker, =
bc_connect_worker);
	+       if (args->svsk) {
	+               /* backchannel */=20
	+               INIT_DELAYED_WORK(&transport->connect_worker,
	+                                 bc_connect_worker);
	               xprt->bind_timeout =3D 0;
	               xprt->connect_timeout =3D 0;=20
	               xprt->reestablish_timeout =3D 0;
	@@ -2154,8 +2162,22 @@ static struct rpc_xprt *xs_setup_tcp(struct =
xprt_create *args)
=09
	               goto next;
	       }
	-#endif
	+#endif /* CONFIG_NFSD_V4_1 */=20
	+
	+       switch (addr->sa_family) {
	+       case AF_INET:
	+               if (((struct sockaddr_in *)addr)->sin_port !=3D =
htons(0))
	+                       xprt_set_bound(xprt);
	+
	+               INIT_DELAYED_WORK(&transport->connect_worker, =
xs_tcp_connect_worker4);=20
	+               break;
	+       case AF_INET6:
	+               if (((struct sockaddr_in6 *)addr)->sin6_port !=3D =
htons(0))
	+                       xprt_set_bound(xprt);
=09
	+               INIT_DELAYED_WORK(&transport->connect_worker, =
xs_tcp_connect_worker6);=20
	+               break;
	+       }
	       xprt->bind_timeout =3D XS_BIND_TO;
	       xprt->connect_timeout =3D XS_TCP_CONN_TO;
	       xprt->reestablish_timeout =3D XS_TCP_INIT_REEST_TO;
	@@ -2171,17 +2193,9 @@ next:=20
=09
	       switch (addr->sa_family) {
	       case AF_INET:
	-               if (((struct sockaddr_in *)addr)->sin_port !=3D =
htons(0))
	-                       xprt_set_bound(xprt);
	-
	-               INIT_DELAYED_WORK(&transport->connect_worker, =
xs_tcp_connect_worker4);=20
	               xs_format_ipv4_peer_addresses(xprt);
	               break;
	       case AF_INET6:
	-               if (((struct sockaddr_in6 *)addr)->sin6_port !=3D =
htons(0))
	-                       xprt_set_bound(xprt);=20
	-
	-               INIT_DELAYED_WORK(&transport->connect_worker, =
xs_tcp_connect_worker6);
	               xs_format_ipv6_peer_addresses(xprt);
	               break;
	       default:
=09
	re-merged with Chuck Lever's changes for ipv[46] initialization=20
	xprt_set_bound() and INIT_DELAYED_WORK(*xs_tcp_connect_worker[46]) =
called
	only for non-callback path while xs_format_ipv[46]_peer_addresses
	called for both forward and backchannel paths.
=09
	_______________________________________________=20
	pNFS mailing list
	pNFS at linux-nfs.org
	http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
=09
=09




More information about the pNFS mailing list