|
@@ -112,7 +112,7 @@ gss_put_ctx(struct gss_cl_ctx *ctx)
|
|
|
/* gss_cred_set_ctx:
|
|
|
* called by gss_upcall_callback and gss_create_upcall in order
|
|
|
* to set the gss context. The actual exchange of an old context
|
|
|
- * and a new one is protected by the inode->i_lock.
|
|
|
+ * and a new one is protected by the rpci->lock.
|
|
|
*/
|
|
|
static void
|
|
|
gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx)
|
|
@@ -316,17 +316,16 @@ static inline struct gss_upcall_msg *
|
|
|
gss_add_msg(struct gss_upcall_msg *gss_msg)
|
|
|
{
|
|
|
struct rpc_inode *rpci = gss_msg->inode;
|
|
|
- struct inode *inode = &rpci->vfs_inode;
|
|
|
struct gss_upcall_msg *old;
|
|
|
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
old = __gss_find_upcall(rpci, gss_msg->uid);
|
|
|
if (old == NULL) {
|
|
|
atomic_inc(&gss_msg->count);
|
|
|
list_add(&gss_msg->list, &rpci->in_downcall);
|
|
|
} else
|
|
|
gss_msg = old;
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
return gss_msg;
|
|
|
}
|
|
|
|
|
@@ -342,14 +341,14 @@ __gss_unhash_msg(struct gss_upcall_msg *gss_msg)
|
|
|
static void
|
|
|
gss_unhash_msg(struct gss_upcall_msg *gss_msg)
|
|
|
{
|
|
|
- struct inode *inode = &gss_msg->inode->vfs_inode;
|
|
|
+ struct rpc_inode *rpci = gss_msg->inode;
|
|
|
|
|
|
if (list_empty(&gss_msg->list))
|
|
|
return;
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
if (!list_empty(&gss_msg->list))
|
|
|
__gss_unhash_msg(gss_msg);
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -376,11 +375,11 @@ gss_upcall_callback(struct rpc_task *task)
|
|
|
struct gss_cred *gss_cred = container_of(task->tk_rqstp->rq_cred,
|
|
|
struct gss_cred, gc_base);
|
|
|
struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall;
|
|
|
- struct inode *inode = &gss_msg->inode->vfs_inode;
|
|
|
+ struct rpc_inode *rpci = gss_msg->inode;
|
|
|
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
gss_handle_downcall_result(gss_cred, gss_msg);
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
task->tk_status = gss_msg->msg.errno;
|
|
|
gss_release_msg(gss_msg);
|
|
|
}
|
|
@@ -506,7 +505,7 @@ gss_refresh_upcall(struct rpc_task *task)
|
|
|
struct gss_cred *gss_cred = container_of(cred,
|
|
|
struct gss_cred, gc_base);
|
|
|
struct gss_upcall_msg *gss_msg;
|
|
|
- struct inode *inode;
|
|
|
+ struct rpc_inode *rpci;
|
|
|
int err = 0;
|
|
|
|
|
|
dprintk("RPC: %5u gss_refresh_upcall for uid %u\n", task->tk_pid,
|
|
@@ -524,8 +523,8 @@ gss_refresh_upcall(struct rpc_task *task)
|
|
|
err = PTR_ERR(gss_msg);
|
|
|
goto out;
|
|
|
}
|
|
|
- inode = &gss_msg->inode->vfs_inode;
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ rpci = gss_msg->inode;
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
if (gss_cred->gc_upcall != NULL)
|
|
|
rpc_sleep_on(&gss_cred->gc_upcall->rpc_waitqueue, task, NULL);
|
|
|
else if (gss_msg->ctx == NULL && gss_msg->msg.errno >= 0) {
|
|
@@ -538,7 +537,7 @@ gss_refresh_upcall(struct rpc_task *task)
|
|
|
gss_handle_downcall_result(gss_cred, gss_msg);
|
|
|
err = gss_msg->msg.errno;
|
|
|
}
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
gss_release_msg(gss_msg);
|
|
|
out:
|
|
|
dprintk("RPC: %5u gss_refresh_upcall for uid %u result %d\n",
|
|
@@ -549,7 +548,7 @@ out:
|
|
|
static inline int
|
|
|
gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
|
|
|
{
|
|
|
- struct inode *inode;
|
|
|
+ struct rpc_inode *rpci;
|
|
|
struct rpc_cred *cred = &gss_cred->gc_base;
|
|
|
struct gss_upcall_msg *gss_msg;
|
|
|
DEFINE_WAIT(wait);
|
|
@@ -573,14 +572,14 @@ retry:
|
|
|
err = PTR_ERR(gss_msg);
|
|
|
goto out;
|
|
|
}
|
|
|
- inode = &gss_msg->inode->vfs_inode;
|
|
|
+ rpci = gss_msg->inode;
|
|
|
for (;;) {
|
|
|
prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE);
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) {
|
|
|
break;
|
|
|
}
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
if (fatal_signal_pending(current)) {
|
|
|
err = -ERESTARTSYS;
|
|
|
goto out_intr;
|
|
@@ -591,7 +590,7 @@ retry:
|
|
|
gss_cred_set_ctx(cred, gss_msg->ctx);
|
|
|
else
|
|
|
err = gss_msg->msg.errno;
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
out_intr:
|
|
|
finish_wait(&gss_msg->waitqueue, &wait);
|
|
|
gss_release_msg(gss_msg);
|
|
@@ -609,7 +608,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
|
|
|
const void *p, *end;
|
|
|
void *buf;
|
|
|
struct gss_upcall_msg *gss_msg;
|
|
|
- struct inode *inode = filp->f_path.dentry->d_inode;
|
|
|
+ struct rpc_inode *rpci = RPC_I(filp->f_dentry->d_inode);
|
|
|
struct gss_cl_ctx *ctx;
|
|
|
uid_t uid;
|
|
|
ssize_t err = -EFBIG;
|
|
@@ -639,14 +638,14 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
|
|
|
|
|
|
err = -ENOENT;
|
|
|
/* Find a matching upcall */
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
- gss_msg = __gss_find_upcall(RPC_I(inode), uid);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
+ gss_msg = __gss_find_upcall(rpci, uid);
|
|
|
if (gss_msg == NULL) {
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
goto err_put_ctx;
|
|
|
}
|
|
|
list_del_init(&gss_msg->list);
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
|
|
|
p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
|
|
|
if (IS_ERR(p)) {
|
|
@@ -674,9 +673,9 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
|
|
|
err = mlen;
|
|
|
|
|
|
err_release_msg:
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
__gss_unhash_msg(gss_msg);
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
gss_release_msg(gss_msg);
|
|
|
err_put_ctx:
|
|
|
gss_put_ctx(ctx);
|
|
@@ -726,7 +725,7 @@ gss_pipe_release(struct inode *inode)
|
|
|
struct gss_upcall_msg *gss_msg;
|
|
|
|
|
|
restart:
|
|
|
- spin_lock(&inode->i_lock);
|
|
|
+ spin_lock(&rpci->lock);
|
|
|
list_for_each_entry(gss_msg, &rpci->in_downcall, list) {
|
|
|
|
|
|
if (!list_empty(&gss_msg->msg.list))
|
|
@@ -734,11 +733,11 @@ restart:
|
|
|
gss_msg->msg.errno = -EPIPE;
|
|
|
atomic_inc(&gss_msg->count);
|
|
|
__gss_unhash_msg(gss_msg);
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
gss_release_msg(gss_msg);
|
|
|
goto restart;
|
|
|
}
|
|
|
- spin_unlock(&inode->i_lock);
|
|
|
+ spin_unlock(&rpci->lock);
|
|
|
|
|
|
put_pipe_version();
|
|
|
}
|