diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 12:06:36 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 12:06:36 +0200 | 
| commit | a18f22a968de17b29f2310cdb7ba69163e65ec15 (patch) | |
| tree | a7d56d88fad5e444d7661484109758a2f436129e /fs/nfs/inode.c | |
| parent | a1c57e0fec53defe745e64417eacdbd3618c3e66 (diff) | |
| parent | 798778b8653f64b7b2162ac70eca10367cff6ce8 (diff) | |
Merge branch 'consolidate-clksrc-i8253' of master.kernel.org:~rmk/linux-2.6-arm into timers/clocksource
Conflicts:
	arch/ia64/kernel/cyclone.c
	arch/mips/kernel/i8253.c
	arch/x86/kernel/i8253.c
Reason: Resolve conflicts so further cleanups do not conflict further
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/nfs/inode.c')
| -rw-r--r-- | fs/nfs/inode.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 1cc600e77bb4..57bb31ad7a5e 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -37,6 +37,7 @@  #include <linux/inet.h>  #include <linux/nfs_xdr.h>  #include <linux/slab.h> +#include <linux/compat.h>  #include <asm/system.h>  #include <asm/uaccess.h> @@ -89,7 +90,11 @@ int nfs_wait_bit_killable(void *word)   */  u64 nfs_compat_user_ino64(u64 fileid)  { -	int ino; +#ifdef CONFIG_COMPAT +	compat_ulong_t ino; +#else	 +	unsigned long ino; +#endif  	if (enable_ino64)  		return fileid; @@ -249,7 +254,9 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)  	struct inode *inode = ERR_PTR(-ENOENT);  	unsigned long hash; -	if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0) +	nfs_attr_check_mountpoint(sb, fattr); + +	if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0 && (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT) == 0)  		goto out_no_inode;  	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)  		goto out_no_inode; @@ -293,8 +300,8 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)  			if (nfs_server_capable(inode, NFS_CAP_READDIRPLUS))  				set_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags);  			/* Deal with crossing mountpoints */ -			if ((fattr->valid & NFS_ATTR_FATTR_FSID) -					&& !nfs_fsid_equal(&NFS_SB(sb)->fsid, &fattr->fsid)) { +			if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT || +					fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {  				if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)  					inode->i_op = &nfs_referral_inode_operations;  				else @@ -634,7 +641,6 @@ struct nfs_open_context *alloc_nfs_open_context(struct path *path, struct rpc_cr  		ctx->mode = f_mode;  		ctx->flags = 0;  		ctx->error = 0; -		ctx->dir_cookie = 0;  		nfs_init_lock_context(&ctx->lock_context);  		ctx->lock_context.open_context = ctx;  		INIT_LIST_HEAD(&ctx->list); @@ -1466,6 +1472,7 @@ static inline void nfs4_init_once(struct nfs_inode *nfsi)  	nfsi->delegation_state = 0;  	init_rwsem(&nfsi->rwsem);  	nfsi->layout = NULL; +	atomic_set(&nfsi->commits_outstanding, 0);  #endif  } @@ -1513,7 +1520,7 @@ static int nfsiod_start(void)  {  	struct workqueue_struct *wq;  	dprintk("RPC:       creating workqueue nfsiod\n"); -	wq = alloc_workqueue("nfsiod", WQ_RESCUER, 0); +	wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM, 0);  	if (wq == NULL)  		return -ENOMEM;  	nfsiod_workqueue = wq;  | 
