[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