[pnfs] 2.6-latest rebase
Benny Halevy
bhalevy at panasas.com
Fri Dec 14 14:52:40 EST 2007
J. Bruce Fields wrote:
> On Fri, Dec 14, 2007 at 07:51:53PM +0200, Benny Halevy wrote:
>
>> Actually I am able to ssh into linux-nfs.org as bhalevy
>> with the passwd Andy gave me long ago...
>> So how should set up my tree over there?
>>
>
> Create a directory ~bhalevy/exports, make sure anybody has at least x
> permissions, then create and copy a bare repository in
> exports/your-repo.git as described in:
>
> http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-public-repository
>
> Anyone should then be able to get read-only access via
>
> git://linux-nfs.org/~bhalevy/your-repo.git
>
> and you can get read-write access (for push) via
>
> ssh://linux-nfs.org/~bhalevy/exports/your-repo.git
>
> Once that's setup let me know if you'd also like gitweb set up for it.
>
Cool! that worked :)
gitweb would be really nice to have... but it's not urgent...
Thanks!
Benny
> --b.
>
>
>> Benny
>>
>> J. Bruce Fields wrote:
>>
>>> 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