aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/auth_gss
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2011-12-26 07:43:32 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-01-31 18:20:24 -0500
commitba9e097593f371ebd102580a0c5b1b2cf55636a0 (patch)
tree737cda4281e4d77738149e8cd481d7414ccaf160 /net/sunrpc/auth_gss
parent766347bec3490111e1c4482af7c7394868c2aed1 (diff)
SUNRPC: split SUNPRC PipeFS pipe data and inode creation
Generally, pipe data is used only for pipes, and thus allocating space for it on every RPC inode allocation is redundant. This patch splits private SUNRPC PipeFS pipe data and inode, makes pipe data allocated only for pipe inodes. This patch is also is a next step towards to to removing PipeFS inode references from kernel code other than PipeFS itself. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc/auth_gss')
-rw-r--r--net/sunrpc/auth_gss/auth_gss.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index a0844f92a447..e933484e55ef 100644
--- a/net/sunrpc/auth_gss/auth_gss.c
+++ b/net/sunrpc/auth_gss/auth_gss.c
@@ -112,7 +112,7 @@ gss_put_ctx(struct gss_cl_ctx *ctx)
112/* gss_cred_set_ctx: 112/* gss_cred_set_ctx:
113 * called by gss_upcall_callback and gss_create_upcall in order 113 * called by gss_upcall_callback and gss_create_upcall in order
114 * to set the gss context. The actual exchange of an old context 114 * to set the gss context. The actual exchange of an old context
115 * and a new one is protected by the rpci->lock. 115 * and a new one is protected by the rpci->pipe->lock.
116 */ 116 */
117static void 117static void
118gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx) 118gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx)
@@ -297,7 +297,7 @@ static struct gss_upcall_msg *
297__gss_find_upcall(struct rpc_inode *rpci, uid_t uid) 297__gss_find_upcall(struct rpc_inode *rpci, uid_t uid)
298{ 298{
299 struct gss_upcall_msg *pos; 299 struct gss_upcall_msg *pos;
300 list_for_each_entry(pos, &rpci->in_downcall, list) { 300 list_for_each_entry(pos, &rpci->pipe->in_downcall, list) {
301 if (pos->uid != uid) 301 if (pos->uid != uid)
302 continue; 302 continue;
303 atomic_inc(&pos->count); 303 atomic_inc(&pos->count);
@@ -318,14 +318,14 @@ gss_add_msg(struct gss_upcall_msg *gss_msg)
318 struct rpc_inode *rpci = gss_msg->inode; 318 struct rpc_inode *rpci = gss_msg->inode;
319 struct gss_upcall_msg *old; 319 struct gss_upcall_msg *old;
320 320
321 spin_lock(&rpci->lock); 321 spin_lock(&rpci->pipe->lock);
322 old = __gss_find_upcall(rpci, gss_msg->uid); 322 old = __gss_find_upcall(rpci, gss_msg->uid);
323 if (old == NULL) { 323 if (old == NULL) {
324 atomic_inc(&gss_msg->count); 324 atomic_inc(&gss_msg->count);
325 list_add(&gss_msg->list, &rpci->in_downcall); 325 list_add(&gss_msg->list, &rpci->pipe->in_downcall);
326 } else 326 } else
327 gss_msg = old; 327 gss_msg = old;
328 spin_unlock(&rpci->lock); 328 spin_unlock(&rpci->pipe->lock);
329 return gss_msg; 329 return gss_msg;
330} 330}
331 331
@@ -345,10 +345,10 @@ gss_unhash_msg(struct gss_upcall_msg *gss_msg)
345 345
346 if (list_empty(&gss_msg->list)) 346 if (list_empty(&gss_msg->list))
347 return; 347 return;
348 spin_lock(&rpci->lock); 348 spin_lock(&rpci->pipe->lock);
349 if (!list_empty(&gss_msg->list)) 349 if (!list_empty(&gss_msg->list))
350 __gss_unhash_msg(gss_msg); 350 __gss_unhash_msg(gss_msg);
351 spin_unlock(&rpci->lock); 351 spin_unlock(&rpci->pipe->lock);
352} 352}
353 353
354static void 354static void
@@ -377,9 +377,9 @@ gss_upcall_callback(struct rpc_task *task)
377 struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall; 377 struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall;
378 struct rpc_inode *rpci = gss_msg->inode; 378 struct rpc_inode *rpci = gss_msg->inode;
379 379
380 spin_lock(&rpci->lock); 380 spin_lock(&rpci->pipe->lock);
381 gss_handle_downcall_result(gss_cred, gss_msg); 381 gss_handle_downcall_result(gss_cred, gss_msg);
382 spin_unlock(&rpci->lock); 382 spin_unlock(&rpci->pipe->lock);
383 task->tk_status = gss_msg->msg.errno; 383 task->tk_status = gss_msg->msg.errno;
384 gss_release_msg(gss_msg); 384 gss_release_msg(gss_msg);
385} 385}
@@ -524,7 +524,7 @@ gss_refresh_upcall(struct rpc_task *task)
524 goto out; 524 goto out;
525 } 525 }
526 rpci = gss_msg->inode; 526 rpci = gss_msg->inode;
527 spin_lock(&rpci->lock); 527 spin_lock(&rpci->pipe->lock);
528 if (gss_cred->gc_upcall != NULL) 528 if (gss_cred->gc_upcall != NULL)
529 rpc_sleep_on(&gss_cred->gc_upcall->rpc_waitqueue, task, NULL); 529 rpc_sleep_on(&gss_cred->gc_upcall->rpc_waitqueue, task, NULL);
530 else if (gss_msg->ctx == NULL && gss_msg->msg.errno >= 0) { 530 else if (gss_msg->ctx == NULL && gss_msg->msg.errno >= 0) {
@@ -537,7 +537,7 @@ gss_refresh_upcall(struct rpc_task *task)
537 gss_handle_downcall_result(gss_cred, gss_msg); 537 gss_handle_downcall_result(gss_cred, gss_msg);
538 err = gss_msg->msg.errno; 538 err = gss_msg->msg.errno;
539 } 539 }
540 spin_unlock(&rpci->lock); 540 spin_unlock(&rpci->pipe->lock);
541 gss_release_msg(gss_msg); 541 gss_release_msg(gss_msg);
542out: 542out:
543 dprintk("RPC: %5u gss_refresh_upcall for uid %u result %d\n", 543 dprintk("RPC: %5u gss_refresh_upcall for uid %u result %d\n",
@@ -575,11 +575,11 @@ retry:
575 rpci = gss_msg->inode; 575 rpci = gss_msg->inode;
576 for (;;) { 576 for (;;) {
577 prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE); 577 prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE);
578 spin_lock(&rpci->lock); 578 spin_lock(&rpci->pipe->lock);
579 if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) { 579 if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) {
580 break; 580 break;
581 } 581 }
582 spin_unlock(&rpci->lock); 582 spin_unlock(&rpci->pipe->lock);
583 if (fatal_signal_pending(current)) { 583 if (fatal_signal_pending(current)) {
584 err = -ERESTARTSYS; 584 err = -ERESTARTSYS;
585 goto out_intr; 585 goto out_intr;
@@ -590,7 +590,7 @@ retry:
590 gss_cred_set_ctx(cred, gss_msg->ctx); 590 gss_cred_set_ctx(cred, gss_msg->ctx);
591 else 591 else
592 err = gss_msg->msg.errno; 592 err = gss_msg->msg.errno;
593 spin_unlock(&rpci->lock); 593 spin_unlock(&rpci->pipe->lock);
594out_intr: 594out_intr:
595 finish_wait(&gss_msg->waitqueue, &wait); 595 finish_wait(&gss_msg->waitqueue, &wait);
596 gss_release_msg(gss_msg); 596 gss_release_msg(gss_msg);
@@ -638,14 +638,14 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
638 638
639 err = -ENOENT; 639 err = -ENOENT;
640 /* Find a matching upcall */ 640 /* Find a matching upcall */
641 spin_lock(&rpci->lock); 641 spin_lock(&rpci->pipe->lock);
642 gss_msg = __gss_find_upcall(rpci, uid); 642 gss_msg = __gss_find_upcall(rpci, uid);
643 if (gss_msg == NULL) { 643 if (gss_msg == NULL) {
644 spin_unlock(&rpci->lock); 644 spin_unlock(&rpci->pipe->lock);
645 goto err_put_ctx; 645 goto err_put_ctx;
646 } 646 }
647 list_del_init(&gss_msg->list); 647 list_del_init(&gss_msg->list);
648 spin_unlock(&rpci->lock); 648 spin_unlock(&rpci->pipe->lock);
649 649
650 p = gss_fill_context(p, end, ctx, gss_msg->auth->mech); 650 p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
651 if (IS_ERR(p)) { 651 if (IS_ERR(p)) {
@@ -673,9 +673,9 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
673 err = mlen; 673 err = mlen;
674 674
675err_release_msg: 675err_release_msg:
676 spin_lock(&rpci->lock); 676 spin_lock(&rpci->pipe->lock);
677 __gss_unhash_msg(gss_msg); 677 __gss_unhash_msg(gss_msg);
678 spin_unlock(&rpci->lock); 678 spin_unlock(&rpci->pipe->lock);
679 gss_release_msg(gss_msg); 679 gss_release_msg(gss_msg);
680err_put_ctx: 680err_put_ctx:
681 gss_put_ctx(ctx); 681 gss_put_ctx(ctx);
@@ -725,19 +725,19 @@ gss_pipe_release(struct inode *inode)
725 struct gss_upcall_msg *gss_msg; 725 struct gss_upcall_msg *gss_msg;
726 726
727restart: 727restart:
728 spin_lock(&rpci->lock); 728 spin_lock(&rpci->pipe->lock);
729 list_for_each_entry(gss_msg, &rpci->in_downcall, list) { 729 list_for_each_entry(gss_msg, &rpci->pipe->in_downcall, list) {
730 730
731 if (!list_empty(&gss_msg->msg.list)) 731 if (!list_empty(&gss_msg->msg.list))
732 continue; 732 continue;
733 gss_msg->msg.errno = -EPIPE; 733 gss_msg->msg.errno = -EPIPE;
734 atomic_inc(&gss_msg->count); 734 atomic_inc(&gss_msg->count);
735 __gss_unhash_msg(gss_msg); 735 __gss_unhash_msg(gss_msg);
736 spin_unlock(&rpci->lock); 736 spin_unlock(&rpci->pipe->lock);
737 gss_release_msg(gss_msg); 737 gss_release_msg(gss_msg);
738 goto restart; 738 goto restart;
739 } 739 }
740 spin_unlock(&rpci->lock); 740 spin_unlock(&rpci->pipe->lock);
741 741
742 put_pipe_version(); 742 put_pipe_version();
743} 743}