• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/net/sunrpc/auth_gss/

Lines Matching defs:gss_msg

284 gss_release_msg(struct gss_upcall_msg *gss_msg)
286 if (!atomic_dec_and_test(&gss_msg->count))
289 BUG_ON(!list_empty(&gss_msg->list));
290 if (gss_msg->ctx != NULL)
291 gss_put_ctx(gss_msg->ctx);
292 rpc_destroy_wait_queue(&gss_msg->rpc_waitqueue);
293 kfree(gss_msg);
316 gss_add_msg(struct gss_upcall_msg *gss_msg)
318 struct rpc_inode *rpci = gss_msg->inode;
323 old = __gss_find_upcall(rpci, gss_msg->uid);
325 atomic_inc(&gss_msg->count);
326 list_add(&gss_msg->list, &rpci->in_downcall);
328 gss_msg = old;
330 return gss_msg;
334 __gss_unhash_msg(struct gss_upcall_msg *gss_msg)
336 list_del_init(&gss_msg->list);
337 rpc_wake_up_status(&gss_msg->rpc_waitqueue, gss_msg->msg.errno);
338 wake_up_all(&gss_msg->waitqueue);
339 atomic_dec(&gss_msg->count);
343 gss_unhash_msg(struct gss_upcall_msg *gss_msg)
345 struct inode *inode = &gss_msg->inode->vfs_inode;
347 if (list_empty(&gss_msg->list))
350 if (!list_empty(&gss_msg->list))
351 __gss_unhash_msg(gss_msg);
356 gss_handle_downcall_result(struct gss_cred *gss_cred, struct gss_upcall_msg *gss_msg)
358 switch (gss_msg->msg.errno) {
360 if (gss_msg->ctx == NULL)
363 gss_cred_set_ctx(&gss_cred->gc_base, gss_msg->ctx);
370 rpc_wake_up_status(&gss_msg->rpc_waitqueue, gss_msg->msg.errno);
378 struct gss_upcall_msg *gss_msg = gss_cred->gc_upcall;
379 struct inode *inode = &gss_msg->inode->vfs_inode;
382 gss_handle_downcall_result(gss_cred, gss_msg);
384 task->tk_status = gss_msg->msg.errno;
385 gss_release_msg(gss_msg);
388 static void gss_encode_v0_msg(struct gss_upcall_msg *gss_msg)
390 gss_msg->msg.data = &gss_msg->uid;
391 gss_msg->msg.len = sizeof(gss_msg->uid);
394 static void gss_encode_v1_msg(struct gss_upcall_msg *gss_msg,
397 struct gss_api_mech *mech = gss_msg->auth->mech;
398 char *p = gss_msg->databuf;
401 gss_msg->msg.len = sprintf(gss_msg->databuf, "mech=%s uid=%d ",
403 gss_msg->uid);
404 p += gss_msg->msg.len;
408 gss_msg->msg.len += len;
413 gss_msg->msg.len += len;
417 gss_msg->msg.len += len;
422 gss_msg->msg.len += len;
425 gss_msg->msg.len += len;
427 gss_msg->msg.data = gss_msg->databuf;
428 BUG_ON(gss_msg->msg.len > UPCALL_BUF_LEN);
431 static void gss_encode_msg(struct gss_upcall_msg *gss_msg,
435 gss_encode_v0_msg(gss_msg);
437 gss_encode_v1_msg(gss_msg, clnt, machine_cred);
444 struct gss_upcall_msg *gss_msg;
447 gss_msg = kzalloc(sizeof(*gss_msg), GFP_NOFS);
448 if (gss_msg == NULL)
452 kfree(gss_msg);
455 gss_msg->inode = RPC_I(gss_auth->dentry[vers]->d_inode);
456 INIT_LIST_HEAD(&gss_msg->list);
457 rpc_init_wait_queue(&gss_msg->rpc_waitqueue, "RPCSEC_GSS upcall waitq");
458 init_waitqueue_head(&gss_msg->waitqueue);
459 atomic_set(&gss_msg->count, 1);
460 gss_msg->uid = uid;
461 gss_msg->auth = gss_auth;
462 gss_encode_msg(gss_msg, clnt, machine_cred);
463 return gss_msg;
471 struct gss_upcall_msg *gss_new, *gss_msg;
477 gss_msg = gss_add_msg(gss_new);
478 if (gss_msg == gss_new) {
483 gss_msg = ERR_PTR(res);
487 return gss_msg;
510 struct gss_upcall_msg *gss_msg;
516 gss_msg = gss_setup_upcall(task->tk_client, gss_auth, cred);
517 if (PTR_ERR(gss_msg) == -EAGAIN) {
523 if (IS_ERR(gss_msg)) {
524 err = PTR_ERR(gss_msg);
527 inode = &gss_msg->inode->vfs_inode;
531 else if (gss_msg->ctx == NULL && gss_msg->msg.errno >= 0) {
533 gss_cred->gc_upcall = gss_msg;
535 atomic_inc(&gss_msg->count);
536 rpc_sleep_on(&gss_msg->rpc_waitqueue, task, gss_upcall_callback);
538 gss_handle_downcall_result(gss_cred, gss_msg);
539 err = gss_msg->msg.errno;
542 gss_release_msg(gss_msg);
554 struct gss_upcall_msg *gss_msg;
560 gss_msg = gss_setup_upcall(gss_auth->client, gss_auth, cred);
561 if (PTR_ERR(gss_msg) == -EAGAIN) {
570 if (IS_ERR(gss_msg)) {
571 err = PTR_ERR(gss_msg);
574 inode = &gss_msg->inode->vfs_inode;
576 prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_INTERRUPTIBLE);
578 if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) {
588 if (gss_msg->ctx)
589 gss_cred_set_ctx(cred, gss_msg->ctx);
591 err = gss_msg->msg.errno;
594 finish_wait(&gss_msg->waitqueue, &wait);
595 gss_release_msg(gss_msg);
629 struct gss_upcall_msg *gss_msg;
661 gss_msg = __gss_find_upcall(RPC_I(inode), uid);
662 if (gss_msg == NULL) {
666 list_del_init(&gss_msg->list);
669 p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
675 gss_msg->msg.errno = err;
682 gss_msg->msg.errno = -EAGAIN;
691 gss_msg->ctx = gss_get_ctx(ctx);
696 __gss_unhash_msg(gss_msg);
698 gss_release_msg(gss_msg);
744 struct gss_upcall_msg *gss_msg;
748 list_for_each_entry(gss_msg, &rpci->in_downcall, list) {
750 if (!list_empty(&gss_msg->msg.list))
752 gss_msg->msg.errno = -EPIPE;
753 atomic_inc(&gss_msg->count);
754 __gss_unhash_msg(gss_msg);
756 gss_release_msg(gss_msg);
767 struct gss_upcall_msg *gss_msg = container_of(msg, struct gss_upcall_msg, msg);
771 gss_msg);
772 atomic_inc(&gss_msg->count);
773 gss_unhash_msg(gss_msg);
776 gss_release_msg(gss_msg);