[ewg] [PATCH OFED-1.5] NFSRDMA: NFS backport for 2.6.22

Jack Morgenstein jackm at dev.mellanox.co.il
Mon Jun 15 04:53:27 PDT 2009


Jon,
The transition to kernel 2.6.30-rc8 evidently caused this patch to break in 2 places
(files dir.c and super.c).
I've indicated the problem below (conflict between patch and base code).
Please fix and resend.

Thanks!
-Jack
On Wednesday 03 June 2009 02:41, Jon Mason wrote:
> This patch provides the NFS backport for 2.6.22.  Since the RDMA
> infrastructure does not work for this kernel release, only TCP
> support has been tested.  It passes Connectathon as a client and server.
> 
> Signed-Off-By: Jon Mason <jon at opengridcomputing.com>
> ---
> 
....
> +diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
> +index 370b190..55877c8 100644
> +--- a/fs/nfs/dir.c
> ++++ b/fs/nfs/dir.c
...
> +@@ -1943,7 +1943,8 @@ int nfs_permission(struct inode *inode, int mask)
> + 		case S_IFREG:
> + 			/* NFSv4 has atomic_open... */
> + 			if (nfs_server_capable(inode, NFS_CAP_ATOMIC_OPEN)
> +-					&& (mask & MAY_OPEN))
> ++					&& nd != NULL
> ++					&& (nd->flags & LOOKUP_OPEN))
> + 				goto out;
> + 			break;
> + 		case S_IFDIR:

file dir.c, reads at the above point:
		case S_IFREG:
			/* NFSv4 has atomic_open... */
			if (nfs_server_capable(inode, NFS_CAP_ATOMIC_OPEN)
***====>				&& (mask & MAY_OPEN)
***====>				&& !(mask & MAY_EXEC))
				goto out;
			break;
		case S_IFDIR:
	
> +diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> +index 6717200..b8dd762 100644
> +--- a/fs/nfs/super.c
> ++++ b/fs/nfs/super.c
...
> +@@ -681,11 +679,14 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
> +  * Begin unmount by attempting to remove all automounted mountpoints we added
> +  * in response to xdev traversals and referrals
> +  */
> +-static void nfs_umount_begin(struct super_block *sb)
> ++static void nfs_umount_begin(struct vfsmount *vfsmnt, int flags)
> + {
> +-	struct nfs_server *server = NFS_SB(sb);
> ++	struct nfs_server *server = NFS_SB(vfsmnt->mnt_sb);
> + 	struct rpc_clnt *rpc;
> + 
> ++	if (!(flags & MNT_FORCE))
> ++		return;
> ++
> + 	/* -EIO all pending I/O */
> + 	rpc = server->client_acl;
> + 	if (!IS_ERR(rpc))

file super.c reads at this point:
static void nfs_umount_begin(struct super_block *sb)
{
	struct nfs_server *server;
	struct rpc_clnt *rpc;

	lock_kernel();

	server = NFS_SB(sb);
	/* -EIO all pending I/O */
	rpc = server->client_acl;
	if (!IS_ERR(rpc))
		rpc_killall_tasks(rpc);
	rpc = server->client;
	if (!IS_ERR(rpc))
		rpc_killall_tasks(rpc);

	unlock_kernel();
}

Ple



More information about the ewg mailing list