Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 294366
b: refs/heads/master
c: ba9e097
h: refs/heads/master
v: v3
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Jan 31, 2012
1 parent 3958f6e commit ae7a3b5
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 123 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 766347bec3490111e1c4482af7c7394868c2aed1
refs/heads/master: ba9e097593f371ebd102580a0c5b1b2cf55636a0
10 changes: 7 additions & 3 deletions trunk/include/linux/sunrpc/rpc_pipe_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,7 @@ struct rpc_pipe_ops {
void (*destroy_msg)(struct rpc_pipe_msg *);
};

struct rpc_inode {
struct inode vfs_inode;
void *private;
struct rpc_pipe {
struct list_head pipe;
struct list_head in_upcall;
struct list_head in_downcall;
Expand All @@ -38,6 +36,12 @@ struct rpc_inode {
spinlock_t lock;
};

struct rpc_inode {
struct inode vfs_inode;
void *private;
struct rpc_pipe *pipe;
};

static inline struct rpc_inode *
RPC_I(struct inode *inode)
{
Expand Down
46 changes: 23 additions & 23 deletions trunk/net/sunrpc/auth_gss/auth_gss.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 rpci->lock.
* and a new one is protected by the rpci->pipe->lock.
*/
static void
gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx)
Expand Down Expand Up @@ -297,7 +297,7 @@ static struct gss_upcall_msg *
__gss_find_upcall(struct rpc_inode *rpci, uid_t uid)
{
struct gss_upcall_msg *pos;
list_for_each_entry(pos, &rpci->in_downcall, list) {
list_for_each_entry(pos, &rpci->pipe->in_downcall, list) {
if (pos->uid != uid)
continue;
atomic_inc(&pos->count);
Expand All @@ -318,14 +318,14 @@ gss_add_msg(struct gss_upcall_msg *gss_msg)
struct rpc_inode *rpci = gss_msg->inode;
struct gss_upcall_msg *old;

spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->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);
list_add(&gss_msg->list, &rpci->pipe->in_downcall);
} else
gss_msg = old;
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
return gss_msg;
}

Expand All @@ -345,10 +345,10 @@ gss_unhash_msg(struct gss_upcall_msg *gss_msg)

if (list_empty(&gss_msg->list))
return;
spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->lock);
if (!list_empty(&gss_msg->list))
__gss_unhash_msg(gss_msg);
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
}

static void
Expand Down Expand Up @@ -377,9 +377,9 @@ gss_upcall_callback(struct rpc_task *task)
struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall;
struct rpc_inode *rpci = gss_msg->inode;

spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->lock);
gss_handle_downcall_result(gss_cred, gss_msg);
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
task->tk_status = gss_msg->msg.errno;
gss_release_msg(gss_msg);
}
Expand Down Expand Up @@ -524,7 +524,7 @@ gss_refresh_upcall(struct rpc_task *task)
goto out;
}
rpci = gss_msg->inode;
spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->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) {
Expand All @@ -537,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(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
gss_release_msg(gss_msg);
out:
dprintk("RPC: %5u gss_refresh_upcall for uid %u result %d\n",
Expand Down Expand Up @@ -575,11 +575,11 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
rpci = gss_msg->inode;
for (;;) {
prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE);
spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->lock);
if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) {
break;
}
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
if (fatal_signal_pending(current)) {
err = -ERESTARTSYS;
goto out_intr;
Expand All @@ -590,7 +590,7 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
gss_cred_set_ctx(cred, gss_msg->ctx);
else
err = gss_msg->msg.errno;
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
out_intr:
finish_wait(&gss_msg->waitqueue, &wait);
gss_release_msg(gss_msg);
Expand Down Expand Up @@ -638,14 +638,14 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)

err = -ENOENT;
/* Find a matching upcall */
spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->lock);
gss_msg = __gss_find_upcall(rpci, uid);
if (gss_msg == NULL) {
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
goto err_put_ctx;
}
list_del_init(&gss_msg->list);
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);

p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
if (IS_ERR(p)) {
Expand Down Expand Up @@ -673,9 +673,9 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
err = mlen;

err_release_msg:
spin_lock(&rpci->lock);
spin_lock(&rpci->pipe->lock);
__gss_unhash_msg(gss_msg);
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
gss_release_msg(gss_msg);
err_put_ctx:
gss_put_ctx(ctx);
Expand Down Expand Up @@ -725,19 +725,19 @@ gss_pipe_release(struct inode *inode)
struct gss_upcall_msg *gss_msg;

restart:
spin_lock(&rpci->lock);
list_for_each_entry(gss_msg, &rpci->in_downcall, list) {
spin_lock(&rpci->pipe->lock);
list_for_each_entry(gss_msg, &rpci->pipe->in_downcall, list) {

if (!list_empty(&gss_msg->msg.list))
continue;
gss_msg->msg.errno = -EPIPE;
atomic_inc(&gss_msg->count);
__gss_unhash_msg(gss_msg);
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);
gss_release_msg(gss_msg);
goto restart;
}
spin_unlock(&rpci->lock);
spin_unlock(&rpci->pipe->lock);

put_pipe_version();
}
Expand Down
Loading

0 comments on commit ae7a3b5

Please sign in to comment.