[pnfs] 2.6-latest rebase
J. Bruce Fields
bfields at fieldses.org
Fri Dec 14 11:59:57 EST 2007
On Fri, Dec 14, 2007 at 06:19:29PM +0200, Benny Halevy wrote:
> Bruce, please pull the following branches to the linux-nfs tree:
>
> git://bhalevy.com/linux-pnfs-bh nfs41
> git://bhalevy.com/linux-pnfs-bh pnfs
We need to give you the ability to push things yourself, which means you
need to be able to ssh to bhalevy at linux-nfs.org. It looks to me like
that's not set up right now. Could you send me a public ssh key? (We
can take care of the account setup in private email.)
Once we've done that it might actually be simplest just to set up your
own public tree there, so it'd have a url something like
git://linux-nfs.org/~bhalevy/linux.git
The git://linux-nfs.org/pub/linux/linux-pnfs.git tree is set up so
multiple people can push to it, but that's been the source of occasional
permissions problems, and I think it's more straightforward just to have
public trees be owned by one person.
--b.
>
> At the moment master just tracks linus' tree
> nfs41 is branched off of master and contains only generic nfs41
> (w/ sessions) patches.
> pnfs is branched off of nfs41 and contains the pnfs code rebased
> on top of nfs41.
>
> I made some more cleanups, the main cleanup feature is adding
> CONFIG_PNFSD that protects the pnfs server code.
>
> Other meaningful changes against rebase-chron
> (not including style or CONFIG) are listed below.
>
> I will start working on Andy's changes next.
> Andy, would you mind passing them through scripts/checkpatch.pl
> before I do that so we don't waste time in style issues?
> - E.g. your signoff should start with "Signed-off-by:" and not
> "Signed-off by:" that checkpatch doesn't like
>
> $ scripts/checkpatch.pl *.patch | grep ERROR | sort -u
> ERROR: do not use assignment in if condition (+ if ((data->error = pnfs_try_to_read_data(data, call_ops)) <= 0))
> ERROR: "foo * bar" should be "foo *bar"
> ERROR: "foo* bar" should be "foo *bar"
> ERROR: Missing Signed-off-by: line(s)
> ERROR: need space after that ',' (ctx:VxV)
> ERROR: trailing whitespace
>
> $ scripts/checkpatch.pl *.patch | grep WARNING | sort -u
> WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
> WARNING: externs should be avoided in .c files
> WARNING: line over 80 characters
>
> - subject doesn't have to say "2.6 latest ..." everywhere
> this is the default now :) (2.6.18.3 tree is frozen)
>
> - please prefix each subject with {nfs41,nfsd41,pnfs,pnfsd}: appropriately.
>
> Thanks!
>
> Benny
>
> Summary of changes vs. rebase-chron:
>
> * Makefile: The pnfs branch adds -pnfs to EXTRAVERSION
>
> * fs/nfsd/Makefile:
> nfsd-$(CONFIG_NFSD_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
> - nfs4acl.o nfs4callback.o nfs4recover.o \
> - nfs4filelayoutxdr.o nfs4pnfsds.o
> + nfs4acl.o nfs4callback.o nfs4recover.o
> +nfsd-$(CONFIG_PNFSD) += nfs4filelayoutxdr.o nfs4pnfsds.o
>
> * fs/nfs/nfs4proc.c: Bitwise-or FATTR4_WORD1_FS_LAYOUT_TYPES into
> FATTR4_WORD0 bits only under CONFIG_PNFS
>
> * fs/nfsd/nfs4state.c: don't set clid->flags after calling nfsd4_set_ex_flags
> @@ -1231,7 +1238,6 @@ out_copy:
>
> new->cl_seqid = clid->seqid = 1;
> nfsd4_set_ex_flags(new, clid);
> - clid->flags = EXCHGID4_FLAG_USE_PNFS_MDS;
>
> * fs/nfsd/nfs4xdr.c: backed out change to return nfserr_notsupp for NFSv4.1
> ops when CONFIG_NFD_V4_1 isn't defined as these ops should be illegal
> in NFSv4.0.
>
> * fs/nfsd/nfsfh.c: check for pNFS filehandle only under CONFIG_PNFSD
> @@ -149,9 +149,11 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
> case 0: break;
> default: goto out;
> }
> +#if defined(CONFIG_PNFSD)
> if (fh->fh_fsid_type >= max_fsid_type) /* pNFS */
> fsid_type = fh->fh_fsid_type - max_fsid_type;
> else
> +#endif /* CONFIG_PNFSD */
> fsid_type = fh->fh_fsid_type;
>
> * include/linux/fs.h: de-constify s_export_op only for CONFIG_PNFSD
> [note that we discussed an alternative of adding one pointer to struct
> export_operations, pointing at the pnfs export ops structure rather
> having all of them pollute struct export_operations. With this approach
> there's no need to de-constify s_export_op]
>
> @@ -987,7 +987,11 @@ struct super_block {
> const struct super_operations *s_op;
> struct dquot_operations *dq_op;
> struct quotactl_ops *s_qcop;
> +#if defined(CONFIG_PNFSD)
> struct export_operations *s_export_op;
> +#else /* CONFIG_PNFSD */
> + const struct export_operations *s_export_op;
> +#endif /* !CONFIG_PNFSD */
>
> * include/linux/nfsd/nfsd.h: Bitwise-or FATTR4_WORD1_FS_LAYOUT_TYPES
> into NFSD_SUPPORTED_ATTRS_WORD1 only under CONFIG_PNFSD
>
> -#define NFSD_SUPPORTED_ATTRS_WORD1 \
> +#define NFSD4_SUPPORTED_ATTRS_WORD1 \
> (FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \
> | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
> | FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
> | FATTR4_WORD1_SPACE_USED | FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_ACCESS_SET \
> | FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \
> - | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID | FATTR4_WORD1_FS_LAYOUT_TYPES)
> + | FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
> +
> +/* FIXME: should probably define supported attrs for NFSD41 and use these also for CONFIG_PNFSD */
> +
> +#if defined(CONFIG_PNFSD)
> +#define NFSD_SUPPORTED_ATTRS_WORD1 \
> + (NFSD4_SUPPORTED_ATTRS_WORD1 | FATTR4_WORD1_FS_LAYOUT_TYPES)
> +#else /* CONFIG_PNFSD */
> +#define NFSD_SUPPORTED_ATTRS_WORD1 \
> + NFSD4_SUPPORTED_ATTRS_WORD1
> +#endif /* CONFIG_PNFSD */
>
> Benny
>
> On Dec. 11, 2007, 11:22 +0200, Benny Halevy <bhalevy at panasas.com> wrote:
> > I've completed rebasing our patches in the linux-pnfs-2.6 over 2.6.24-rc5
> > in git://bhalevy.com/linux-pnfs-bh in the rebase-chron branch
> > (or over gitweb in http://www.bhalevy.com/git/gitweb.cgi?p=linux-pnfs-bh/.git)
> >
> > 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.
> >
> > 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
> > 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.
> >
> > 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)
> > branch and a pnfs branch, stacked (rebased) on top of it. Unlike what we had
> > in the 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.
> > I split some existing patches that touched both subsystems to allow this but more
> > work is needed.
> >
> > 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
> > 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]
> >
> > 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
> > these specific names, although they make sense to me at least)
> >
> > 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
> > 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
> > 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.
> >
> > Benny
> > --
> >
> > fixes done on rebase to 2.6.24-rc5
> > master - 3d8c873a39ff5b497088b4ebc36dc1eb1b2c2623
> > 2.6.24-rc5-nfs41-rebased 9b1f7b57cd323f45a0fcbd5ac3575266a083a83f
> >
> > diff made using git-diff -w 3d8c873a39ff5b497088b4ebc36dc1eb1b2c2623
> >
> > general fixes
> > -------------
> >
> > diff --git a/Makefile b/Makefile
> > index c1825aa..a4ee102 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -1,7 +1,7 @@
> > VERSION = 2
> > PATCHLEVEL = 6
> > SUBLEVEL = 24
> > -EXTRAVERSION = -rc5
> > +EXTRAVERSION = -rc5-nfs41
> > NAME = Arr Matey! A Hairy Bilge Rat!
> >
> > # *DOCUMENTATION*
> >
> > Added extraversion, will add on for pnfs once separate branhces established
> >
> > 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) += nfs41_session_recovery.o
> > nfs-$(CONFIG_PNFS) += pnfs.o
> > nfs-$(CONFIG_NFS_DIRECTIO) += direct.o
> > nfs-$(CONFIG_SYSCTL) += sysctl.o
> > -nfs-objs := $(nfs-y)
> >
> > obj-m += nfslayoutdriver.o
> > nfslayoutdriver-objs := nfs4filelayout.o nfs4filelayoutdev.o
> >
> > missing from master
> >
> > 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 {
> > int (*get_name)(struct dentry *parent, char *name,
> > struct dentry *child);
> > struct dentry * (*get_parent)(struct dentry *child);
> > +#if defined(CONFIG_PNFS)
> > /* pNFS operations */
> > /* 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);
> >
> > -
> > /* 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);
> > @@ -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);
> > +#endif /* CONFIG_PNFS */
> > };
> >
> > extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
> >
> > diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
> > index b59ee2b..c400d47 100644
> > --- 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
> >
> > +#if defined(CONFIG_PNFS)
> > +
> > #define NFS4_PNFS_DEV_MAXCOUNT 16
> > #define NFS4_PNFS_DEV_MAXSIZE 128
> >
> > 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
> > @@ -36,6 +36,8 @@
> > #ifndef _LINUX_NFSD_NFSD4_PNFS_H
> > #define _LINUX_NFSD_NFSD4_PNFS_H
> >
> > +#if defined(CONFIG_PNFS)
> > +
> > #include <linux/nfs.h>
> > #include <linux/nfs_xdr.h>
> >
> > diff --git a/include/linux/nfsd/pnfsd.h b/include/linux/nfsd/pnfsd.h
> > index 373fc90..7f36011 100644
> > --- a/include/linux/nfsd/pnfsd.h
> > +++ b/include/linux/nfsd/pnfsd.h
> > @@ -33,6 +33,11 @@
> > *
> > */
> >
> > +#ifndef _LINUX_NFSD_PNFSD_H
> > +#define _LINUX_NFSD_PNFSD_H
> > +
> > +#if defined(CONFIG_PNFS)
> > +
> > #include <linux/nfsd/nfsd4_pnfs.h>
> >
> > /* pNFS Metadata to Data server state communication*/
> > for compiling when !defined(CONFIG_PNFS)
> >
> > 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 @@
> >
> > #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
> > #define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
> > #define EXCHGID4_MFS_DS_FLAG_MASK 0x00060000
> >
> > leave flag defined even if not used
> >
> > 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 {
> > struct nfstime4 date;
> > };
> >
> > -#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
> > -#define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
> > -
> > struct nfs41_exchange_id_args {
> > nfs4_verifier * verifier;
> > unsigned int id_len;
> >
> > delete redundant definitions (exist in include/linux/nfs4.h)
> >
> >
> > 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 2006/12/13 16:12:15 andros Exp $
> > + * $Id$
> > */
> >
> > #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
> > --- 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
> > *
> > - * $Id: svcauth_gss.h,v 1.1.1.1 2006/01/19 14:36:46 andros Exp $
> > + * $Id$
> > *
> > */
> >
> > diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
> > 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.
> > *
> > - * $Id: auth_gss.c,v 1.1.1.4 2006/12/13 16:12:22 andros Exp $
> > + * $Id$
> > */
> >
> >
> >
> > cvs trash in master
> >
> >
> > client side fixes
> > -----------------
> >
> > 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 {
> > /*
> > * Session related parameters
> > */
> > -
> > -struct nfs_server;
> > -
> > struct nfs4_session {
> > nfs41_sessionid sess_id;
> > u32 flags;
> > @@ -63,7 +60,6 @@ struct nfs4_session {
> > spinlock_t session_lock;
> > atomic_t ref_count;
> > struct rpc_wait_queue recovery_waitq;
> > - struct nfs_server * server;
> > struct rpc_clnt * clnt;
> > };
> >
> >
> > delete unused member
> >
> >
> >
> > diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> > index 69f839d..c9c8f35 100644
> > --- a/fs/nfs/nfs4filelayout.c
> > +++ 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 == NULL);
> > + if (layout == NULL)
> > return offset;
> >
> > switch (layout->stripe_type) {
> >
> > bug in master
> >
> > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> > index 184706e..4512049 100644
> > --- 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);
> > break;
> > - default:
> > + case 0:
> > ret = 0;
> > + break;
> > + default:
> > + BUG();
> > }
> >
> > return ret;
> >
> > @@ -403,14 +406,17 @@ static int nfs4_setup_sequence(struct nfs_client *clp,
> >
> > switch (clp->cl_minorversion) {
> > case 1:
> > - if ((ret = nfs41_recover_expired_session(task,
> > -clp, session)))
> > + ret = nfs41_recover_expired_session(task, clp, session);
> > + if (ret)
> > break;
> > ret = nfs41_setup_sequence(session, args,
> > res, cache_reply, task);
> > break;
> > - default:
> > + case 0:
> > ret = 0;
> > + break;
> > + default:
> > + BUG();
> > }
> >
> > return ret;
> >
> > @@ -507,8 +515,11 @@ int nfs4_call_sync(struct nfs_server *server,
> > }
> > break;
> > }
> > - default:
> > + case 0:
> > ret = rpc_call_sync(clnt, msg, 0);
> > + break;
> > + default:
> > + BUG();
> > }
> >
> > return ret;
> >
> > @@ -1711,15 +1724,17 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
> > if (calldata->arg.seqid == NULL)
> > goto out_free_calldata;
> > switch (server->nfs_client->cl_minorversion) {
> > - case 0:
> > - calldata->arg.stateid = &state->open_stateid;
> > - break;
> > #ifdef CONFIG_NFS_V4_1
> > case 1:
> > calldata->arg.stateid = &state->stateid;
> > memset(&calldata->arg.stateid->data, 0, 4);
> > break;
> > -#endif
> > +#endif /* CONFIG_NFS_V4_1 */
> > + case 0:
> > + calldata->arg.stateid = &state->open_stateid;
> > + break;
> > + default:
> > + BUG();
> > }
> > calldata->arg.bitmask = server->attr_bitmask;
> > calldata->res.fattr = &calldata->fattr;
> >
> > added BUG() for minorversion non-01 case (several sites)
> >
> > @@ -2922,7 +2938,7 @@ static int nfs4_read_done(struct rpc_task *task, struct nfs_read_data *data)
> > }
> >
> > nfs_invalidate_atime(data->inode);
> > - if (status > 0)
> > + if (task->tk_status > 0)
> > renew_lease(server, data->timestamp);
> > dprintk("<-- %s status= 0\n", __FUNCTION__);
> > return 0;
> >
> > bug in master, status can't be >0 at this point in the code.
> >
> >
> >
> > @@ -3576,12 +3599,14 @@ static int nfs4_handle_exception(const struct nfs_server *server, int errorcode,
> > case -NFS4ERR_EXPIRED:
> > nfs4_schedule_state_recovery(clp);
> > ret = nfs4_wait_clnt_recover(server->client, clp);
> > - if ((ret == 0) &&
> > - !server->nfs_client->cl_minorversion) {
> > + if (ret == 0)
> > exception->retry = 1;
> > +#if !defined(CONFIG_NFS_V4_1)
> > break;
> > - }
> > -#if defined (CONFIG_NFS_V4_1)
> > +#else /* !defined(CONFIG_NFS_V4_1) */
> > + if (!server->nfs_client->cl_minorversion)
> > + break;
> > + /* FALLTHROUGH */
> > case -NFS4ERR_BADSESSION:
> > case -NFS4ERR_BADSLOT:
> > case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
> >
> > master implementation needelssly changes behavior for minorversion 0
> >
> > diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
> > index 74963db..1b008cb 100644
> > --- a/fs/nfs/nfs4xdr.c
> > +++ b/fs/nfs/nfs4xdr.c
> > @@ -61,10 +61,9 @@
> > @@ -349,7 +348,6 @@ static int nr_sequence_quads = 0;
> > #define NFS40_enc_open_downgrade_sz \
> > (compound_encode_hdr_maxsz + \
> > encode_putfh_maxsz + \
> > - encode_putfh_maxsz + \
> > encode_open_downgrade_maxsz + \
> > encode_getattr_maxsz)
> > #define NFS40_dec_open_downgrade_sz \
> >
> > master has extra encode_putfh_maxsz due to bad merge/apply
> >
> > @@ -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 = 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" \
> > " buffer\n", __FUNCTION__); \
> > - printk(KERN_INFO "%s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \
> > + dprintk("nfs: %s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \
> > __FUNCTION__, xdr->p, nbytes, xdr->end); \
> > return -EIO; \
> > } \
> >
> > this and many friends, change missing from master, not sure why...
> >
> > diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> > 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.
> > */
> > -static spinlock_t pnfs_spinlock = SPIN_LOCK_UNLOCKED;
> > +static spinlock_t pnfs_spinlock = __SPIN_LOCK_UNLOCKED(pnfs_spinlock);
> >
> > /*
> > * pnfs_modules_tbl holds all pnfs modules
> >
> > SPIN_LOCK_UNLOCKED was deprecated
> >
> > server side fixes
> > -----------------
> >
> > 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)
> > if (task->tk_status < 0) {
> > dprintk("NFSD: callback establishment to client %.*s failed\n",
> > (int)clp->cl_name.len, clp->cl_name.data);
> > - return;
> > + 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);
> > }
> >
> > static const struct rpc_call_ops nfs4_cb_null_ops = {
> >
> > 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
> > @@ -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",
> > clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);
> > + put_nfs4_client(dp->dl_client);
> > rpc_release_client(clnt);
> > nfs4_lock_state();
> > nfs4_put_delegation(dp);
> >
> > these were dropped during Merge with Bruce's commits
> > 2b47eece1fa519a81c8b802af77a8b8aa44baa10 and
> > cfdcad4da1903720b9b8c1f176e46a0ebf546be3
> >
> > diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> > 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 = 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 = nfserr_notsupp;
> > + break;
> > +#endif /* CONFIG_NFSD_V4_1 */
> > default:
> > op->opnum = OP_ILLEGAL;
> > op->status = nfserr_op_illegal;
> >
> > added error status for the !defined(CONFIG_NFSD_V4_1) case
> > same as we do for !defined(CONFIG_PNFS)
> >
> >
> > rpc fixes
> > ---------
> >
> > diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> > 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 = RPC_MAX_FRAGMENT_SIZE;
> >
> > #if defined (CONFIG_NFSD_V4_1)
> > - if (args->svsk) { /* backchannel */
> > - INIT_DELAYED_WORK(&transport->connect_worker, bc_connect_worker);
> > + if (args->svsk) {
> > + /* backchannel */
> > + INIT_DELAYED_WORK(&transport->connect_worker,
> > + bc_connect_worker);
> > xprt->bind_timeout = 0;
> > xprt->connect_timeout = 0;
> > xprt->reestablish_timeout = 0;
> > @@ -2154,8 +2162,22 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
> >
> > goto next;
> > }
> > -#endif
> > +#endif /* CONFIG_NFSD_V4_1 */
> > +
> > + switch (addr->sa_family) {
> > + case AF_INET:
> > + if (((struct sockaddr_in *)addr)->sin_port != htons(0))
> > + xprt_set_bound(xprt);
> > +
> > + INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker4);
> > + break;
> > + case AF_INET6:
> > + if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0))
> > + xprt_set_bound(xprt);
> >
> > + INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker6);
> > + break;
> > + }
> > xprt->bind_timeout = XS_BIND_TO;
> > xprt->connect_timeout = XS_TCP_CONN_TO;
> > xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO;
> > @@ -2171,17 +2193,9 @@ next:
> >
> > switch (addr->sa_family) {
> > case AF_INET:
> > - if (((struct sockaddr_in *)addr)->sin_port != htons(0))
> > - xprt_set_bound(xprt);
> > -
> > - INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker4);
> > xs_format_ipv4_peer_addresses(xprt);
> > break;
> > case AF_INET6:
> > - if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0))
> > - xprt_set_bound(xprt);
> > -
> > - INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker6);
> > xs_format_ipv6_peer_addresses(xprt);
> > break;
> > default:
> >
> > re-merged with Chuck Lever's changes for ipv[46] initialization
> > 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.
> >
> > _______________________________________________
> > pNFS mailing list
> > pNFS at linux-nfs.org
> > http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> >
>
More information about the pNFS
mailing list