continue;
                get_nfs_open_context(ctx);
                spin_unlock(&inode->i_lock);
-               err = nfs4_open_delegation_recall(ctx->dentry, state);
+               err = nfs4_open_delegation_recall(ctx->path.dentry, state);
                if (err >= 0)
                        err = nfs_delegation_claim_locks(ctx, state);
                put_nfs_open_context(ctx);
 
 static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos)
 {
        struct nfs_open_context *ctx = dreq->ctx;
-       struct inode *inode = ctx->dentry->d_inode;
+       struct inode *inode = ctx->path.dentry->d_inode;
        size_t rsize = NFS_SERVER(inode)->rsize;
        unsigned int pgbase;
        int result;
 static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync)
 {
        struct nfs_open_context *ctx = dreq->ctx;
-       struct inode *inode = ctx->dentry->d_inode;
+       struct inode *inode = ctx->path.dentry->d_inode;
        size_t wsize = NFS_SERVER(inode)->wsize;
        unsigned int pgbase;
        int result;
 
        ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
        if (ctx != NULL) {
                atomic_set(&ctx->count, 1);
-               ctx->dentry = dget(dentry);
-               ctx->vfsmnt = mntget(mnt);
+               ctx->path.dentry = dget(dentry);
+               ctx->path.mnt = mntget(mnt);
                ctx->cred = get_rpccred(cred);
                ctx->state = NULL;
                ctx->lockowner = current->files;
 {
        if (atomic_dec_and_test(&ctx->count)) {
                if (!list_empty(&ctx->list)) {
-                       struct inode *inode = ctx->dentry->d_inode;
+                       struct inode *inode = ctx->path.dentry->d_inode;
                        spin_lock(&inode->i_lock);
                        list_del(&ctx->list);
                        spin_unlock(&inode->i_lock);
                        nfs4_close_state(ctx->state, ctx->mode);
                if (ctx->cred != NULL)
                        put_rpccred(ctx->cred);
-               dput(ctx->dentry);
-               mntput(ctx->vfsmnt);
+               dput(ctx->path.dentry);
+               mntput(ctx->path.mnt);
                kfree(ctx);
        }
 }
 
        ctx = nfs4_state_find_open_context(state);
        if (IS_ERR(ctx))
                return PTR_ERR(ctx);
-       ret = nfs4_do_open_reclaim(sp, state, ctx->dentry);
+       ret = nfs4_do_open_reclaim(sp, state, ctx->path.dentry);
        put_nfs_open_context(ctx);
        return ret;
 }
        ctx = nfs4_state_find_open_context(state);
        if (IS_ERR(ctx))
                return PTR_ERR(ctx);
-       ret = nfs4_do_open_expired(sp, state, ctx->dentry);
+       ret = nfs4_do_open_expired(sp, state, ctx->path.dentry);
        put_nfs_open_context(ctx);
        return ret;
 }
                memcpy(data->lsp->ls_stateid.data, data->res.stateid.data,
                                        sizeof(data->lsp->ls_stateid.data));
                data->lsp->ls_flags |= NFS_LOCK_INITIALIZED;
-               renew_lease(NFS_SERVER(data->ctx->dentry->d_inode), data->timestamp);
+               renew_lease(NFS_SERVER(data->ctx->path.dentry->d_inode), data->timestamp);
        }
        nfs_increment_lock_seqid(data->rpc_status, data->arg.lock_seqid);
 out:
 
  */
 int nfs_set_page_writeback_locked(struct nfs_page *req)
 {
-       struct nfs_inode *nfsi = NFS_I(req->wb_context->dentry->d_inode);
+       struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
 
        if (!nfs_lock_request(req))
                return 0;
  */
 void nfs_clear_page_writeback(struct nfs_page *req)
 {
-       struct nfs_inode *nfsi = NFS_I(req->wb_context->dentry->d_inode);
+       struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
 
        if (req->wb_page != NULL) {
                spin_lock(&nfsi->req_lock);
 int
 nfs_wait_on_request(struct nfs_page *req)
 {
-        struct rpc_clnt        *clnt = NFS_CLIENT(req->wb_context->dentry->d_inode);
+       struct rpc_clnt *clnt = NFS_CLIENT(req->wb_context->path.dentry->d_inode);
        sigset_t oldmask;
        int ret = 0;
 
 
        unlock_page(req->wb_page);
 
        dprintk("NFS: read done (%s/%Ld %d@%Ld)\n",
-                       req->wb_context->dentry->d_inode->i_sb->s_id,
-                       (long long)NFS_FILEID(req->wb_context->dentry->d_inode),
+                       req->wb_context->path.dentry->d_inode->i_sb->s_id,
+                       (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
                        req->wb_bytes,
                        (long long)req_offset(req));
        nfs_clear_request(req);
        int flags;
 
        data->req         = req;
-       data->inode       = inode = req->wb_context->dentry->d_inode;
+       data->inode       = inode = req->wb_context->path.dentry->d_inode;
        data->cred        = req->wb_context->cred;
 
        data->args.fh     = NFS_FH(inode);
 
  */
 static void nfs_inode_remove_request(struct nfs_page *req)
 {
-       struct inode *inode = req->wb_context->dentry->d_inode;
+       struct inode *inode = req->wb_context->path.dentry->d_inode;
        struct nfs_inode *nfsi = NFS_I(inode);
 
        BUG_ON (!NFS_WBACK_BUSY(req));
 static void
 nfs_mark_request_commit(struct nfs_page *req)
 {
-       struct inode *inode = req->wb_context->dentry->d_inode;
+       struct inode *inode = req->wb_context->path.dentry->d_inode;
        struct nfs_inode *nfsi = NFS_I(inode);
 
        spin_lock(&nfsi->req_lock);
         * NB: take care not to mess about with data->commit et al. */
 
        data->req = req;
-       data->inode = inode = req->wb_context->dentry->d_inode;
+       data->inode = inode = req->wb_context->path.dentry->d_inode;
        data->cred = req->wb_context->cred;
 
        data->args.fh     = NFS_FH(inode);
        struct page             *page = req->wb_page;
 
        dprintk("NFS: write (%s/%Ld %d@%Ld)",
-               req->wb_context->dentry->d_inode->i_sb->s_id,
-               (long long)NFS_FILEID(req->wb_context->dentry->d_inode),
+               req->wb_context->path.dentry->d_inode->i_sb->s_id,
+               (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
                req->wb_bytes,
                (long long)req_offset(req));
 
                page = req->wb_page;
 
                dprintk("NFS: write (%s/%Ld %d@%Ld)",
-                       req->wb_context->dentry->d_inode->i_sb->s_id,
-                       (long long)NFS_FILEID(req->wb_context->dentry->d_inode),
+                       req->wb_context->path.dentry->d_inode->i_sb->s_id,
+                       (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
                        req->wb_bytes,
                        (long long)req_offset(req));
 
 
        list_splice_init(head, &data->pages);
        first = nfs_list_entry(data->pages.next);
-       inode = first->wb_context->dentry->d_inode;
+       inode = first->wb_context->path.dentry->d_inode;
 
        data->inode       = inode;
        data->cred        = first->wb_context->cred;
                dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
 
                dprintk("NFS: commit (%s/%Ld %d@%Ld)",
-                       req->wb_context->dentry->d_inode->i_sb->s_id,
-                       (long long)NFS_FILEID(req->wb_context->dentry->d_inode),
+                       req->wb_context->path.dentry->d_inode->i_sb->s_id,
+                       (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
                        req->wb_bytes,
                        (long long)req_offset(req));
                if (task->tk_status < 0) {
 
 
 #include <linux/in.h>
 #include <linux/mm.h>
+#include <linux/namei.h>
 #include <linux/pagemap.h>
 #include <linux/rbtree.h>
 #include <linux/rwsem.h>
 struct nfs4_state;
 struct nfs_open_context {
        atomic_t count;
-       struct vfsmount *vfsmnt;
-       struct dentry *dentry;
+       struct path path;
        struct rpc_cred *cred;
        struct nfs4_state *state;
        fl_owner_t lockowner;