Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

SUNRPC: cleanup GSS pipes usage

Currently gss auth holds RPC inode pointer which is now redundant since it
requires only pipes operations which takes private pipe data as an argument.
Thus this code can be cleaned and all references to RPC inode can be replaced
with privtae pipe data references.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

authored by

Stanislav Kinsbursky and committed by
Trond Myklebust
9beae467 d706ed1f

+38 -38
+38 -38
net/sunrpc/auth_gss/auth_gss.c
··· 112 112 /* gss_cred_set_ctx: 113 113 * called by gss_upcall_callback and gss_create_upcall in order 114 114 * to set the gss context. The actual exchange of an old context 115 - * and a new one is protected by the rpci->pipe->lock. 115 + * and a new one is protected by the pipe->lock. 116 116 */ 117 117 static void 118 118 gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx) ··· 251 251 struct rpc_pipe_msg msg; 252 252 struct list_head list; 253 253 struct gss_auth *auth; 254 - struct rpc_inode *inode; 254 + struct rpc_pipe *pipe; 255 255 struct rpc_wait_queue rpc_waitqueue; 256 256 wait_queue_head_t waitqueue; 257 257 struct gss_cl_ctx *ctx; ··· 294 294 } 295 295 296 296 static struct gss_upcall_msg * 297 - __gss_find_upcall(struct rpc_inode *rpci, uid_t uid) 297 + __gss_find_upcall(struct rpc_pipe *pipe, uid_t uid) 298 298 { 299 299 struct gss_upcall_msg *pos; 300 - list_for_each_entry(pos, &rpci->pipe->in_downcall, list) { 300 + list_for_each_entry(pos, &pipe->in_downcall, list) { 301 301 if (pos->uid != uid) 302 302 continue; 303 303 atomic_inc(&pos->count); ··· 315 315 static inline struct gss_upcall_msg * 316 316 gss_add_msg(struct gss_upcall_msg *gss_msg) 317 317 { 318 - struct rpc_inode *rpci = gss_msg->inode; 318 + struct rpc_pipe *pipe = gss_msg->pipe; 319 319 struct gss_upcall_msg *old; 320 320 321 - spin_lock(&rpci->pipe->lock); 322 - old = __gss_find_upcall(rpci, gss_msg->uid); 321 + spin_lock(&pipe->lock); 322 + old = __gss_find_upcall(pipe, gss_msg->uid); 323 323 if (old == NULL) { 324 324 atomic_inc(&gss_msg->count); 325 - list_add(&gss_msg->list, &rpci->pipe->in_downcall); 325 + list_add(&gss_msg->list, &pipe->in_downcall); 326 326 } else 327 327 gss_msg = old; 328 - spin_unlock(&rpci->pipe->lock); 328 + spin_unlock(&pipe->lock); 329 329 return gss_msg; 330 330 } 331 331 ··· 341 341 static void 342 342 gss_unhash_msg(struct gss_upcall_msg *gss_msg) 343 343 { 344 - struct rpc_inode *rpci = gss_msg->inode; 344 + struct rpc_pipe *pipe = gss_msg->pipe; 345 345 346 346 if (list_empty(&gss_msg->list)) 347 347 return; 348 - spin_lock(&rpci->pipe->lock); 348 + spin_lock(&pipe->lock); 349 349 if (!list_empty(&gss_msg->list)) 350 350 __gss_unhash_msg(gss_msg); 351 - spin_unlock(&rpci->pipe->lock); 351 + spin_unlock(&pipe->lock); 352 352 } 353 353 354 354 static void ··· 375 375 struct gss_cred *gss_cred = container_of(task->tk_rqstp->rq_cred, 376 376 struct gss_cred, gc_base); 377 377 struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall; 378 - struct rpc_inode *rpci = gss_msg->inode; 378 + struct rpc_pipe *pipe = gss_msg->pipe; 379 379 380 - spin_lock(&rpci->pipe->lock); 380 + spin_lock(&pipe->lock); 381 381 gss_handle_downcall_result(gss_cred, gss_msg); 382 - spin_unlock(&rpci->pipe->lock); 382 + spin_unlock(&pipe->lock); 383 383 task->tk_status = gss_msg->msg.errno; 384 384 gss_release_msg(gss_msg); 385 385 } ··· 449 449 kfree(gss_msg); 450 450 return ERR_PTR(vers); 451 451 } 452 - gss_msg->inode = RPC_I(gss_auth->dentry[vers]->d_inode); 452 + gss_msg->pipe = RPC_I(gss_auth->dentry[vers]->d_inode)->pipe; 453 453 INIT_LIST_HEAD(&gss_msg->list); 454 454 rpc_init_wait_queue(&gss_msg->rpc_waitqueue, "RPCSEC_GSS upcall waitq"); 455 455 init_waitqueue_head(&gss_msg->waitqueue); ··· 473 473 return gss_new; 474 474 gss_msg = gss_add_msg(gss_new); 475 475 if (gss_msg == gss_new) { 476 - int res = rpc_queue_upcall(gss_new->inode->pipe, &gss_new->msg); 476 + int res = rpc_queue_upcall(gss_new->pipe, &gss_new->msg); 477 477 if (res) { 478 478 gss_unhash_msg(gss_new); 479 479 gss_msg = ERR_PTR(res); ··· 504 504 struct gss_cred *gss_cred = container_of(cred, 505 505 struct gss_cred, gc_base); 506 506 struct gss_upcall_msg *gss_msg; 507 - struct rpc_inode *rpci; 507 + struct rpc_pipe *pipe; 508 508 int err = 0; 509 509 510 510 dprintk("RPC: %5u gss_refresh_upcall for uid %u\n", task->tk_pid, ··· 522 522 err = PTR_ERR(gss_msg); 523 523 goto out; 524 524 } 525 - rpci = gss_msg->inode; 526 - spin_lock(&rpci->pipe->lock); 525 + pipe = gss_msg->pipe; 526 + spin_lock(&pipe->lock); 527 527 if (gss_cred->gc_upcall != NULL) 528 528 rpc_sleep_on(&gss_cred->gc_upcall->rpc_waitqueue, task, NULL); 529 529 else if (gss_msg->ctx == NULL && gss_msg->msg.errno >= 0) { ··· 536 536 gss_handle_downcall_result(gss_cred, gss_msg); 537 537 err = gss_msg->msg.errno; 538 538 } 539 - spin_unlock(&rpci->pipe->lock); 539 + spin_unlock(&pipe->lock); 540 540 gss_release_msg(gss_msg); 541 541 out: 542 542 dprintk("RPC: %5u gss_refresh_upcall for uid %u result %d\n", ··· 547 547 static inline int 548 548 gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred) 549 549 { 550 - struct rpc_inode *rpci; 550 + struct rpc_pipe *pipe; 551 551 struct rpc_cred *cred = &gss_cred->gc_base; 552 552 struct gss_upcall_msg *gss_msg; 553 553 DEFINE_WAIT(wait); ··· 571 571 err = PTR_ERR(gss_msg); 572 572 goto out; 573 573 } 574 - rpci = gss_msg->inode; 574 + pipe = gss_msg->pipe; 575 575 for (;;) { 576 576 prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE); 577 - spin_lock(&rpci->pipe->lock); 577 + spin_lock(&pipe->lock); 578 578 if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) { 579 579 break; 580 580 } 581 - spin_unlock(&rpci->pipe->lock); 581 + spin_unlock(&pipe->lock); 582 582 if (fatal_signal_pending(current)) { 583 583 err = -ERESTARTSYS; 584 584 goto out_intr; ··· 589 589 gss_cred_set_ctx(cred, gss_msg->ctx); 590 590 else 591 591 err = gss_msg->msg.errno; 592 - spin_unlock(&rpci->pipe->lock); 592 + spin_unlock(&pipe->lock); 593 593 out_intr: 594 594 finish_wait(&gss_msg->waitqueue, &wait); 595 595 gss_release_msg(gss_msg); ··· 607 607 const void *p, *end; 608 608 void *buf; 609 609 struct gss_upcall_msg *gss_msg; 610 - struct rpc_inode *rpci = RPC_I(filp->f_dentry->d_inode); 610 + struct rpc_pipe *pipe = RPC_I(filp->f_dentry->d_inode)->pipe; 611 611 struct gss_cl_ctx *ctx; 612 612 uid_t uid; 613 613 ssize_t err = -EFBIG; ··· 637 637 638 638 err = -ENOENT; 639 639 /* Find a matching upcall */ 640 - spin_lock(&rpci->pipe->lock); 641 - gss_msg = __gss_find_upcall(rpci, uid); 640 + spin_lock(&pipe->lock); 641 + gss_msg = __gss_find_upcall(pipe, uid); 642 642 if (gss_msg == NULL) { 643 - spin_unlock(&rpci->pipe->lock); 643 + spin_unlock(&pipe->lock); 644 644 goto err_put_ctx; 645 645 } 646 646 list_del_init(&gss_msg->list); 647 - spin_unlock(&rpci->pipe->lock); 647 + spin_unlock(&pipe->lock); 648 648 649 649 p = gss_fill_context(p, end, ctx, gss_msg->auth->mech); 650 650 if (IS_ERR(p)) { ··· 672 672 err = mlen; 673 673 674 674 err_release_msg: 675 - spin_lock(&rpci->pipe->lock); 675 + spin_lock(&pipe->lock); 676 676 __gss_unhash_msg(gss_msg); 677 - spin_unlock(&rpci->pipe->lock); 677 + spin_unlock(&pipe->lock); 678 678 gss_release_msg(gss_msg); 679 679 err_put_ctx: 680 680 gss_put_ctx(ctx); ··· 720 720 static void 721 721 gss_pipe_release(struct inode *inode) 722 722 { 723 - struct rpc_inode *rpci = RPC_I(inode); 723 + struct rpc_pipe *pipe = RPC_I(inode)->pipe; 724 724 struct gss_upcall_msg *gss_msg; 725 725 726 726 restart: 727 - spin_lock(&rpci->pipe->lock); 728 - list_for_each_entry(gss_msg, &rpci->pipe->in_downcall, list) { 727 + spin_lock(&pipe->lock); 728 + list_for_each_entry(gss_msg, &pipe->in_downcall, list) { 729 729 730 730 if (!list_empty(&gss_msg->msg.list)) 731 731 continue; 732 732 gss_msg->msg.errno = -EPIPE; 733 733 atomic_inc(&gss_msg->count); 734 734 __gss_unhash_msg(gss_msg); 735 - spin_unlock(&rpci->pipe->lock); 735 + spin_unlock(&pipe->lock); 736 736 gss_release_msg(gss_msg); 737 737 goto restart; 738 738 } 739 - spin_unlock(&rpci->pipe->lock); 739 + spin_unlock(&pipe->lock); 740 740 741 741 put_pipe_version(); 742 742 }