struct rpc_pipe_msg msg;
        struct list_head list;
        struct gss_auth *auth;
+       struct rpc_inode *inode;
        struct rpc_wait_queue rpc_waitqueue;
        wait_queue_head_t waitqueue;
        struct gss_cl_ctx *ctx;
 static inline struct gss_upcall_msg *
 gss_add_msg(struct gss_auth *gss_auth, struct gss_upcall_msg *gss_msg)
 {
-       struct inode *inode = gss_auth->dentry->d_inode;
-       struct rpc_inode *rpci = RPC_I(inode);
+       struct rpc_inode *rpci = gss_msg->inode;
+       struct inode *inode = &rpci->vfs_inode;
        struct gss_upcall_msg *old;
 
        spin_lock(&inode->i_lock);
 static void
 gss_unhash_msg(struct gss_upcall_msg *gss_msg)
 {
-       struct gss_auth *gss_auth = gss_msg->auth;
-       struct inode *inode = gss_auth->dentry->d_inode;
+       struct inode *inode = &gss_msg->inode->vfs_inode;
 
        if (list_empty(&gss_msg->list))
                return;
        struct gss_cred *gss_cred = container_of(task->tk_msg.rpc_cred,
                        struct gss_cred, gc_base);
        struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall;
-       struct inode *inode = gss_msg->auth->dentry->d_inode;
+       struct inode *inode = &gss_msg->inode->vfs_inode;
 
        spin_lock(&inode->i_lock);
        if (gss_msg->ctx)
                kfree(gss_msg);
                return ERR_PTR(vers);
        }
+       gss_msg->inode = RPC_I(gss_auth->dentry->d_inode);
        INIT_LIST_HEAD(&gss_msg->list);
        rpc_init_wait_queue(&gss_msg->rpc_waitqueue, "RPCSEC_GSS upcall waitq");
        init_waitqueue_head(&gss_msg->waitqueue);
                return gss_new;
        gss_msg = gss_add_msg(gss_auth, gss_new);
        if (gss_msg == gss_new) {
-               int res = rpc_queue_upcall(gss_auth->dentry->d_inode, &gss_new->msg);
+               struct inode *inode = &gss_new->inode->vfs_inode;
+               int res = rpc_queue_upcall(inode, &gss_new->msg);
                if (res) {
                        gss_unhash_msg(gss_new);
                        gss_msg = ERR_PTR(res);
        struct gss_cred *gss_cred = container_of(cred,
                        struct gss_cred, gc_base);
        struct gss_upcall_msg *gss_msg;
-       struct inode *inode = gss_auth->dentry->d_inode;
+       struct inode *inode;
        int err = 0;
 
        dprintk("RPC: %5u gss_refresh_upcall for uid %u\n", task->tk_pid,
                err = PTR_ERR(gss_msg);
                goto out;
        }
+       inode = &gss_msg->inode->vfs_inode;
        spin_lock(&inode->i_lock);
        if (gss_cred->gc_upcall != NULL)
                rpc_sleep_on(&gss_cred->gc_upcall->rpc_waitqueue, task, NULL);
 static inline int
 gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
 {
-       struct inode *inode = gss_auth->dentry->d_inode;
+       struct inode *inode;
        struct rpc_cred *cred = &gss_cred->gc_base;
        struct gss_upcall_msg *gss_msg;
        DEFINE_WAIT(wait);
                err = PTR_ERR(gss_msg);
                goto out;
        }
+       inode = &gss_msg->inode->vfs_inode;
        for (;;) {
                prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_INTERRUPTIBLE);
                spin_lock(&inode->i_lock);