1 /* 2 * linux/net/sunrpc/clnt.c 3 * 4 * This file contains the high-level RPC interface. 5 * It is modeled as a finite state machine to support both synchronous 6 * and asynchronous requests. 7 * 8 * - RPC header generation and argument serialization. 9 * - Credential refresh. 10 * - TCP connect handling. 11 * - Retry of operation when it is suspected the operation failed because 12 * of uid squashing on the server, or when the credentials were stale 13 * and need to be refreshed, or when a packet was damaged in transit. 14 * This may be have to be moved to the VFS layer. 15 * 16 * Copyright (C) 1992,1993 Rick Sladkey <jrs@world.std.com> 17 * Copyright (C) 1995,1996 Olaf Kirch <okir@monad.swb.de> 18 */ 19 20 21 #include <linux/module.h> 22 #include <linux/types.h> 23 #include <linux/kallsyms.h> 24 #include <linux/mm.h> 25 #include <linux/namei.h> 26 #include <linux/mount.h> 27 #include <linux/slab.h> 28 #include <linux/utsname.h> 29 #include <linux/workqueue.h> 30 #include <linux/in.h> 31 #include <linux/in6.h> 32 #include <linux/un.h> 33 #include <linux/rcupdate.h> 34 35 #include <linux/sunrpc/clnt.h> 36 #include <linux/sunrpc/addr.h> 37 #include <linux/sunrpc/rpc_pipe_fs.h> 38 #include <linux/sunrpc/metrics.h> 39 #include <linux/sunrpc/bc_xprt.h> 40 #include <trace/events/sunrpc.h> 41 42 #include "sunrpc.h" 43 #include "netns.h" 44 45 #ifdef RPC_DEBUG 46 # define RPCDBG_FACILITY RPCDBG_CALL 47 #endif 48 49 #define dprint_status(t) \ 50 dprintk("RPC: %5u %s (status %d)\n", t->tk_pid, \ 51 __func__, t->tk_status) 52 53 /* 54 * All RPC clients are linked into this list 55 */ 56 57 static DECLARE_WAIT_QUEUE_HEAD(destroy_wait); 58 59 60 static void call_start(struct rpc_task *task); 61 static void call_reserve(struct rpc_task *task); 62 static void call_reserveresult(struct rpc_task *task); 63 static void call_allocate(struct rpc_task *task); 64 static void call_decode(struct rpc_task *task); 65 static void call_bind(struct rpc_task *task); 66 static void call_bind_status(struct rpc_task *task); 67 static void call_transmit(struct rpc_task *task); 68 #if defined(CONFIG_SUNRPC_BACKCHANNEL) 69 static void call_bc_transmit(struct rpc_task *task); 70 #endif /* CONFIG_SUNRPC_BACKCHANNEL */ 71 static void call_status(struct rpc_task *task); 72 static void call_transmit_status(struct rpc_task *task); 73 static void call_refresh(struct rpc_task *task); 74 static void call_refreshresult(struct rpc_task *task); 75 static void call_timeout(struct rpc_task *task); 76 static void call_connect(struct rpc_task *task); 77 static void call_connect_status(struct rpc_task *task); 78 79 static __be32 *rpc_encode_header(struct rpc_task *task); 80 static __be32 *rpc_verify_header(struct rpc_task *task); 81 static int rpc_ping(struct rpc_clnt *clnt); 82 83 static void rpc_register_client(struct rpc_clnt *clnt) 84 { 85 struct net *net = rpc_net_ns(clnt); 86 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); 87 88 spin_lock(&sn->rpc_client_lock); 89 list_add(&clnt->cl_clients, &sn->all_clients); 90 spin_unlock(&sn->rpc_client_lock); 91 } 92 93 static void rpc_unregister_client(struct rpc_clnt *clnt) 94 { 95 struct net *net = rpc_net_ns(clnt); 96 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); 97 98 spin_lock(&sn->rpc_client_lock); 99 list_del(&clnt->cl_clients); 100 spin_unlock(&sn->rpc_client_lock); 101 } 102 103 static void __rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) 104 { 105 if (clnt->cl_dentry) { 106 if (clnt->cl_auth && clnt->cl_auth->au_ops->pipes_destroy) 107 clnt->cl_auth->au_ops->pipes_destroy(clnt->cl_auth); 108 rpc_remove_client_dir(clnt->cl_dentry); 109 } 110 clnt->cl_dentry = NULL; 111 } 112 113 static void rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) 114 { 115 struct net *net = rpc_net_ns(clnt); 116 struct super_block *pipefs_sb; 117 118 pipefs_sb = rpc_get_sb_net(net); 119 if (pipefs_sb) { 120 __rpc_clnt_remove_pipedir(clnt); 121 rpc_put_sb_net(net); 122 } 123 } 124 125 static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb, 126 struct rpc_clnt *clnt, 127 const char *dir_name) 128 { 129 static uint32_t clntid; 130 char name[15]; 131 struct qstr q = { .name = name }; 132 struct dentry *dir, *dentry; 133 int error; 134 135 dir = rpc_d_lookup_sb(sb, dir_name); 136 if (dir == NULL) { 137 pr_info("RPC: pipefs directory doesn't exist: %s\n", dir_name); 138 return dir; 139 } 140 for (;;) { 141 q.len = snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++); 142 name[sizeof(name) - 1] = '\0'; 143 q.hash = full_name_hash(q.name, q.len); 144 dentry = rpc_create_client_dir(dir, &q, clnt); 145 if (!IS_ERR(dentry)) 146 break; 147 error = PTR_ERR(dentry); 148 if (error != -EEXIST) { 149 printk(KERN_INFO "RPC: Couldn't create pipefs entry" 150 " %s/%s, error %d\n", 151 dir_name, name, error); 152 break; 153 } 154 } 155 dput(dir); 156 return dentry; 157 } 158 159 static int 160 rpc_setup_pipedir(struct rpc_clnt *clnt, const char *dir_name) 161 { 162 struct net *net = rpc_net_ns(clnt); 163 struct super_block *pipefs_sb; 164 struct dentry *dentry; 165 166 clnt->cl_dentry = NULL; 167 if (dir_name == NULL) 168 return 0; 169 pipefs_sb = rpc_get_sb_net(net); 170 if (!pipefs_sb) 171 return 0; 172 dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt, dir_name); 173 rpc_put_sb_net(net); 174 if (IS_ERR(dentry)) 175 return PTR_ERR(dentry); 176 clnt->cl_dentry = dentry; 177 return 0; 178 } 179 180 static inline int rpc_clnt_skip_event(struct rpc_clnt *clnt, unsigned long event) 181 { 182 if (((event == RPC_PIPEFS_MOUNT) && clnt->cl_dentry) || 183 ((event == RPC_PIPEFS_UMOUNT) && !clnt->cl_dentry)) 184 return 1; 185 return 0; 186 } 187 188 static int __rpc_clnt_handle_event(struct rpc_clnt *clnt, unsigned long event, 189 struct super_block *sb) 190 { 191 struct dentry *dentry; 192 int err = 0; 193 194 switch (event) { 195 case RPC_PIPEFS_MOUNT: 196 dentry = rpc_setup_pipedir_sb(sb, clnt, 197 clnt->cl_program->pipe_dir_name); 198 if (!dentry) 199 return -ENOENT; 200 if (IS_ERR(dentry)) 201 return PTR_ERR(dentry); 202 clnt->cl_dentry = dentry; 203 if (clnt->cl_auth->au_ops->pipes_create) { 204 err = clnt->cl_auth->au_ops->pipes_create(clnt->cl_auth); 205 if (err) 206 __rpc_clnt_remove_pipedir(clnt); 207 } 208 break; 209 case RPC_PIPEFS_UMOUNT: 210 __rpc_clnt_remove_pipedir(clnt); 211 break; 212 default: 213 printk(KERN_ERR "%s: unknown event: %ld\n", __func__, event); 214 return -ENOTSUPP; 215 } 216 return err; 217 } 218 219 static int __rpc_pipefs_event(struct rpc_clnt *clnt, unsigned long event, 220 struct super_block *sb) 221 { 222 int error = 0; 223 224 for (;; clnt = clnt->cl_parent) { 225 if (!rpc_clnt_skip_event(clnt, event)) 226 error = __rpc_clnt_handle_event(clnt, event, sb); 227 if (error || clnt == clnt->cl_parent) 228 break; 229 } 230 return error; 231 } 232 233 static struct rpc_clnt *rpc_get_client_for_event(struct net *net, int event) 234 { 235 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); 236 struct rpc_clnt *clnt; 237 238 spin_lock(&sn->rpc_client_lock); 239 list_for_each_entry(clnt, &sn->all_clients, cl_clients) { 240 if (clnt->cl_program->pipe_dir_name == NULL) 241 continue; 242 if (rpc_clnt_skip_event(clnt, event)) 243 continue; 244 if (atomic_inc_not_zero(&clnt->cl_count) == 0) 245 continue; 246 spin_unlock(&sn->rpc_client_lock); 247 return clnt; 248 } 249 spin_unlock(&sn->rpc_client_lock); 250 return NULL; 251 } 252 253 static int rpc_pipefs_event(struct notifier_block *nb, unsigned long event, 254 void *ptr) 255 { 256 struct super_block *sb = ptr; 257 struct rpc_clnt *clnt; 258 int error = 0; 259 260 while ((clnt = rpc_get_client_for_event(sb->s_fs_info, event))) { 261 error = __rpc_pipefs_event(clnt, event, sb); 262 rpc_release_client(clnt); 263 if (error) 264 break; 265 } 266 return error; 267 } 268 269 static struct notifier_block rpc_clients_block = { 270 .notifier_call = rpc_pipefs_event, 271 .priority = SUNRPC_PIPEFS_RPC_PRIO, 272 }; 273 274 int rpc_clients_notifier_register(void) 275 { 276 return rpc_pipefs_notifier_register(&rpc_clients_block); 277 } 278 279 void rpc_clients_notifier_unregister(void) 280 { 281 return rpc_pipefs_notifier_unregister(&rpc_clients_block); 282 } 283 284 static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename) 285 { 286 clnt->cl_nodelen = strlen(nodename); 287 if (clnt->cl_nodelen > UNX_MAXNODENAME) 288 clnt->cl_nodelen = UNX_MAXNODENAME; 289 memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen); 290 } 291 292 static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt) 293 { 294 const struct rpc_program *program = args->program; 295 const struct rpc_version *version; 296 struct rpc_clnt *clnt = NULL; 297 struct rpc_auth *auth; 298 int err; 299 300 /* sanity check the name before trying to print it */ 301 dprintk("RPC: creating %s client for %s (xprt %p)\n", 302 program->name, args->servername, xprt); 303 304 err = rpciod_up(); 305 if (err) 306 goto out_no_rpciod; 307 308 err = -EINVAL; 309 if (args->version >= program->nrvers) 310 goto out_err; 311 version = program->version[args->version]; 312 if (version == NULL) 313 goto out_err; 314 315 err = -ENOMEM; 316 clnt = kzalloc(sizeof(*clnt), GFP_KERNEL); 317 if (!clnt) 318 goto out_err; 319 clnt->cl_parent = clnt; 320 321 rcu_assign_pointer(clnt->cl_xprt, xprt); 322 clnt->cl_procinfo = version->procs; 323 clnt->cl_maxproc = version->nrprocs; 324 clnt->cl_protname = program->name; 325 clnt->cl_prog = args->prognumber ? : program->number; 326 clnt->cl_vers = version->number; 327 clnt->cl_stats = program->stats; 328 clnt->cl_metrics = rpc_alloc_iostats(clnt); 329 err = -ENOMEM; 330 if (clnt->cl_metrics == NULL) 331 goto out_no_stats; 332 clnt->cl_program = program; 333 INIT_LIST_HEAD(&clnt->cl_tasks); 334 spin_lock_init(&clnt->cl_lock); 335 336 if (!xprt_bound(xprt)) 337 clnt->cl_autobind = 1; 338 339 clnt->cl_timeout = xprt->timeout; 340 if (args->timeout != NULL) { 341 memcpy(&clnt->cl_timeout_default, args->timeout, 342 sizeof(clnt->cl_timeout_default)); 343 clnt->cl_timeout = &clnt->cl_timeout_default; 344 } 345 346 clnt->cl_rtt = &clnt->cl_rtt_default; 347 rpc_init_rtt(&clnt->cl_rtt_default, clnt->cl_timeout->to_initval); 348 clnt->cl_principal = NULL; 349 if (args->client_name) { 350 clnt->cl_principal = kstrdup(args->client_name, GFP_KERNEL); 351 if (!clnt->cl_principal) 352 goto out_no_principal; 353 } 354 355 atomic_set(&clnt->cl_count, 1); 356 357 err = rpc_setup_pipedir(clnt, program->pipe_dir_name); 358 if (err < 0) 359 goto out_no_path; 360 361 auth = rpcauth_create(args->authflavor, clnt); 362 if (IS_ERR(auth)) { 363 dprintk("RPC: Couldn't create auth handle (flavor %u)\n", 364 args->authflavor); 365 err = PTR_ERR(auth); 366 goto out_no_auth; 367 } 368 369 /* save the nodename */ 370 rpc_clnt_set_nodename(clnt, utsname()->nodename); 371 rpc_register_client(clnt); 372 return clnt; 373 374 out_no_auth: 375 rpc_clnt_remove_pipedir(clnt); 376 out_no_path: 377 kfree(clnt->cl_principal); 378 out_no_principal: 379 rpc_free_iostats(clnt->cl_metrics); 380 out_no_stats: 381 kfree(clnt); 382 out_err: 383 rpciod_down(); 384 out_no_rpciod: 385 xprt_put(xprt); 386 return ERR_PTR(err); 387 } 388 389 /** 390 * rpc_create - create an RPC client and transport with one call 391 * @args: rpc_clnt create argument structure 392 * 393 * Creates and initializes an RPC transport and an RPC client. 394 * 395 * It can ping the server in order to determine if it is up, and to see if 396 * it supports this program and version. RPC_CLNT_CREATE_NOPING disables 397 * this behavior so asynchronous tasks can also use rpc_create. 398 */ 399 struct rpc_clnt *rpc_create(struct rpc_create_args *args) 400 { 401 struct rpc_xprt *xprt; 402 struct rpc_clnt *clnt; 403 struct xprt_create xprtargs = { 404 .net = args->net, 405 .ident = args->protocol, 406 .srcaddr = args->saddress, 407 .dstaddr = args->address, 408 .addrlen = args->addrsize, 409 .servername = args->servername, 410 .bc_xprt = args->bc_xprt, 411 }; 412 char servername[48]; 413 414 if (args->flags & RPC_CLNT_CREATE_INFINITE_SLOTS) 415 xprtargs.flags |= XPRT_CREATE_INFINITE_SLOTS; 416 if (args->flags & RPC_CLNT_CREATE_NO_IDLE_TIMEOUT) 417 xprtargs.flags |= XPRT_CREATE_NO_IDLE_TIMEOUT; 418 /* 419 * If the caller chooses not to specify a hostname, whip 420 * up a string representation of the passed-in address. 421 */ 422 if (xprtargs.servername == NULL) { 423 struct sockaddr_un *sun = 424 (struct sockaddr_un *)args->address; 425 struct sockaddr_in *sin = 426 (struct sockaddr_in *)args->address; 427 struct sockaddr_in6 *sin6 = 428 (struct sockaddr_in6 *)args->address; 429 430 servername[0] = '\0'; 431 switch (args->address->sa_family) { 432 case AF_LOCAL: 433 snprintf(servername, sizeof(servername), "%s", 434 sun->sun_path); 435 break; 436 case AF_INET: 437 snprintf(servername, sizeof(servername), "%pI4", 438 &sin->sin_addr.s_addr); 439 break; 440 case AF_INET6: 441 snprintf(servername, sizeof(servername), "%pI6", 442 &sin6->sin6_addr); 443 break; 444 default: 445 /* caller wants default server name, but 446 * address family isn't recognized. */ 447 return ERR_PTR(-EINVAL); 448 } 449 xprtargs.servername = servername; 450 } 451 452 xprt = xprt_create_transport(&xprtargs); 453 if (IS_ERR(xprt)) 454 return (struct rpc_clnt *)xprt; 455 456 /* 457 * By default, kernel RPC client connects from a reserved port. 458 * CAP_NET_BIND_SERVICE will not be set for unprivileged requesters, 459 * but it is always enabled for rpciod, which handles the connect 460 * operation. 461 */ 462 xprt->resvport = 1; 463 if (args->flags & RPC_CLNT_CREATE_NONPRIVPORT) 464 xprt->resvport = 0; 465 466 clnt = rpc_new_client(args, xprt); 467 if (IS_ERR(clnt)) 468 return clnt; 469 470 if (!(args->flags & RPC_CLNT_CREATE_NOPING)) { 471 int err = rpc_ping(clnt); 472 if (err != 0) { 473 rpc_shutdown_client(clnt); 474 return ERR_PTR(err); 475 } 476 } 477 478 clnt->cl_softrtry = 1; 479 if (args->flags & RPC_CLNT_CREATE_HARDRTRY) 480 clnt->cl_softrtry = 0; 481 482 if (args->flags & RPC_CLNT_CREATE_AUTOBIND) 483 clnt->cl_autobind = 1; 484 if (args->flags & RPC_CLNT_CREATE_DISCRTRY) 485 clnt->cl_discrtry = 1; 486 if (!(args->flags & RPC_CLNT_CREATE_QUIET)) 487 clnt->cl_chatty = 1; 488 489 return clnt; 490 } 491 EXPORT_SYMBOL_GPL(rpc_create); 492 493 /* 494 * This function clones the RPC client structure. It allows us to share the 495 * same transport while varying parameters such as the authentication 496 * flavour. 497 */ 498 static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args, 499 struct rpc_clnt *clnt) 500 { 501 struct rpc_xprt *xprt; 502 struct rpc_clnt *new; 503 int err; 504 505 err = -ENOMEM; 506 rcu_read_lock(); 507 xprt = xprt_get(rcu_dereference(clnt->cl_xprt)); 508 rcu_read_unlock(); 509 if (xprt == NULL) 510 goto out_err; 511 args->servername = xprt->servername; 512 513 new = rpc_new_client(args, xprt); 514 if (IS_ERR(new)) { 515 err = PTR_ERR(new); 516 goto out_err; 517 } 518 519 atomic_inc(&clnt->cl_count); 520 new->cl_parent = clnt; 521 522 /* Turn off autobind on clones */ 523 new->cl_autobind = 0; 524 new->cl_softrtry = clnt->cl_softrtry; 525 new->cl_discrtry = clnt->cl_discrtry; 526 new->cl_chatty = clnt->cl_chatty; 527 return new; 528 529 out_err: 530 dprintk("RPC: %s: returned error %d\n", __func__, err); 531 return ERR_PTR(err); 532 } 533 534 /** 535 * rpc_clone_client - Clone an RPC client structure 536 * 537 * @clnt: RPC client whose parameters are copied 538 * 539 * Returns a fresh RPC client or an ERR_PTR. 540 */ 541 struct rpc_clnt *rpc_clone_client(struct rpc_clnt *clnt) 542 { 543 struct rpc_create_args args = { 544 .program = clnt->cl_program, 545 .prognumber = clnt->cl_prog, 546 .version = clnt->cl_vers, 547 .authflavor = clnt->cl_auth->au_flavor, 548 .client_name = clnt->cl_principal, 549 }; 550 return __rpc_clone_client(&args, clnt); 551 } 552 EXPORT_SYMBOL_GPL(rpc_clone_client); 553 554 /** 555 * rpc_clone_client_set_auth - Clone an RPC client structure and set its auth 556 * 557 * @clnt: RPC client whose parameters are copied 558 * @flavor: security flavor for new client 559 * 560 * Returns a fresh RPC client or an ERR_PTR. 561 */ 562 struct rpc_clnt * 563 rpc_clone_client_set_auth(struct rpc_clnt *clnt, rpc_authflavor_t flavor) 564 { 565 struct rpc_create_args args = { 566 .program = clnt->cl_program, 567 .prognumber = clnt->cl_prog, 568 .version = clnt->cl_vers, 569 .authflavor = flavor, 570 .client_name = clnt->cl_principal, 571 }; 572 return __rpc_clone_client(&args, clnt); 573 } 574 EXPORT_SYMBOL_GPL(rpc_clone_client_set_auth); 575 576 /* 577 * Kill all tasks for the given client. 578 * XXX: kill their descendants as well? 579 */ 580 void rpc_killall_tasks(struct rpc_clnt *clnt) 581 { 582 struct rpc_task *rovr; 583 584 585 if (list_empty(&clnt->cl_tasks)) 586 return; 587 dprintk("RPC: killing all tasks for client %p\n", clnt); 588 /* 589 * Spin lock all_tasks to prevent changes... 590 */ 591 spin_lock(&clnt->cl_lock); 592 list_for_each_entry(rovr, &clnt->cl_tasks, tk_task) { 593 if (!RPC_IS_ACTIVATED(rovr)) 594 continue; 595 if (!(rovr->tk_flags & RPC_TASK_KILLED)) { 596 rovr->tk_flags |= RPC_TASK_KILLED; 597 rpc_exit(rovr, -EIO); 598 if (RPC_IS_QUEUED(rovr)) 599 rpc_wake_up_queued_task(rovr->tk_waitqueue, 600 rovr); 601 } 602 } 603 spin_unlock(&clnt->cl_lock); 604 } 605 EXPORT_SYMBOL_GPL(rpc_killall_tasks); 606 607 /* 608 * Properly shut down an RPC client, terminating all outstanding 609 * requests. 610 */ 611 void rpc_shutdown_client(struct rpc_clnt *clnt) 612 { 613 might_sleep(); 614 615 dprintk_rcu("RPC: shutting down %s client for %s\n", 616 clnt->cl_protname, 617 rcu_dereference(clnt->cl_xprt)->servername); 618 619 while (!list_empty(&clnt->cl_tasks)) { 620 rpc_killall_tasks(clnt); 621 wait_event_timeout(destroy_wait, 622 list_empty(&clnt->cl_tasks), 1*HZ); 623 } 624 625 rpc_release_client(clnt); 626 } 627 EXPORT_SYMBOL_GPL(rpc_shutdown_client); 628 629 /* 630 * Free an RPC client 631 */ 632 static void 633 rpc_free_client(struct rpc_clnt *clnt) 634 { 635 dprintk_rcu("RPC: destroying %s client for %s\n", 636 clnt->cl_protname, 637 rcu_dereference(clnt->cl_xprt)->servername); 638 if (clnt->cl_parent != clnt) 639 rpc_release_client(clnt->cl_parent); 640 rpc_unregister_client(clnt); 641 rpc_clnt_remove_pipedir(clnt); 642 rpc_free_iostats(clnt->cl_metrics); 643 kfree(clnt->cl_principal); 644 clnt->cl_metrics = NULL; 645 xprt_put(rcu_dereference_raw(clnt->cl_xprt)); 646 rpciod_down(); 647 kfree(clnt); 648 } 649 650 /* 651 * Free an RPC client 652 */ 653 static void 654 rpc_free_auth(struct rpc_clnt *clnt) 655 { 656 if (clnt->cl_auth == NULL) { 657 rpc_free_client(clnt); 658 return; 659 } 660 661 /* 662 * Note: RPCSEC_GSS may need to send NULL RPC calls in order to 663 * release remaining GSS contexts. This mechanism ensures 664 * that it can do so safely. 665 */ 666 atomic_inc(&clnt->cl_count); 667 rpcauth_release(clnt->cl_auth); 668 clnt->cl_auth = NULL; 669 if (atomic_dec_and_test(&clnt->cl_count)) 670 rpc_free_client(clnt); 671 } 672 673 /* 674 * Release reference to the RPC client 675 */ 676 void 677 rpc_release_client(struct rpc_clnt *clnt) 678 { 679 dprintk("RPC: rpc_release_client(%p)\n", clnt); 680 681 if (list_empty(&clnt->cl_tasks)) 682 wake_up(&destroy_wait); 683 if (atomic_dec_and_test(&clnt->cl_count)) 684 rpc_free_auth(clnt); 685 } 686 EXPORT_SYMBOL_GPL(rpc_release_client); 687 688 /** 689 * rpc_bind_new_program - bind a new RPC program to an existing client 690 * @old: old rpc_client 691 * @program: rpc program to set 692 * @vers: rpc program version 693 * 694 * Clones the rpc client and sets up a new RPC program. This is mainly 695 * of use for enabling different RPC programs to share the same transport. 696 * The Sun NFSv2/v3 ACL protocol can do this. 697 */ 698 struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *old, 699 const struct rpc_program *program, 700 u32 vers) 701 { 702 struct rpc_create_args args = { 703 .program = program, 704 .prognumber = program->number, 705 .version = vers, 706 .authflavor = old->cl_auth->au_flavor, 707 .client_name = old->cl_principal, 708 }; 709 struct rpc_clnt *clnt; 710 int err; 711 712 clnt = __rpc_clone_client(&args, old); 713 if (IS_ERR(clnt)) 714 goto out; 715 err = rpc_ping(clnt); 716 if (err != 0) { 717 rpc_shutdown_client(clnt); 718 clnt = ERR_PTR(err); 719 } 720 out: 721 return clnt; 722 } 723 EXPORT_SYMBOL_GPL(rpc_bind_new_program); 724 725 void rpc_task_release_client(struct rpc_task *task) 726 { 727 struct rpc_clnt *clnt = task->tk_client; 728 729 if (clnt != NULL) { 730 /* Remove from client task list */ 731 spin_lock(&clnt->cl_lock); 732 list_del(&task->tk_task); 733 spin_unlock(&clnt->cl_lock); 734 task->tk_client = NULL; 735 736 rpc_release_client(clnt); 737 } 738 } 739 740 static 741 void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt) 742 { 743 if (clnt != NULL) { 744 rpc_task_release_client(task); 745 task->tk_client = clnt; 746 atomic_inc(&clnt->cl_count); 747 if (clnt->cl_softrtry) 748 task->tk_flags |= RPC_TASK_SOFT; 749 if (sk_memalloc_socks()) { 750 struct rpc_xprt *xprt; 751 752 rcu_read_lock(); 753 xprt = rcu_dereference(clnt->cl_xprt); 754 if (xprt->swapper) 755 task->tk_flags |= RPC_TASK_SWAPPER; 756 rcu_read_unlock(); 757 } 758 /* Add to the client's list of all tasks */ 759 spin_lock(&clnt->cl_lock); 760 list_add_tail(&task->tk_task, &clnt->cl_tasks); 761 spin_unlock(&clnt->cl_lock); 762 } 763 } 764 765 void rpc_task_reset_client(struct rpc_task *task, struct rpc_clnt *clnt) 766 { 767 rpc_task_release_client(task); 768 rpc_task_set_client(task, clnt); 769 } 770 EXPORT_SYMBOL_GPL(rpc_task_reset_client); 771 772 773 static void 774 rpc_task_set_rpc_message(struct rpc_task *task, const struct rpc_message *msg) 775 { 776 if (msg != NULL) { 777 task->tk_msg.rpc_proc = msg->rpc_proc; 778 task->tk_msg.rpc_argp = msg->rpc_argp; 779 task->tk_msg.rpc_resp = msg->rpc_resp; 780 if (msg->rpc_cred != NULL) 781 task->tk_msg.rpc_cred = get_rpccred(msg->rpc_cred); 782 } 783 } 784 785 /* 786 * Default callback for async RPC calls 787 */ 788 static void 789 rpc_default_callback(struct rpc_task *task, void *data) 790 { 791 } 792 793 static const struct rpc_call_ops rpc_default_ops = { 794 .rpc_call_done = rpc_default_callback, 795 }; 796 797 /** 798 * rpc_run_task - Allocate a new RPC task, then run rpc_execute against it 799 * @task_setup_data: pointer to task initialisation data 800 */ 801 struct rpc_task *rpc_run_task(const struct rpc_task_setup *task_setup_data) 802 { 803 struct rpc_task *task; 804 805 task = rpc_new_task(task_setup_data); 806 if (IS_ERR(task)) 807 goto out; 808 809 rpc_task_set_client(task, task_setup_data->rpc_client); 810 rpc_task_set_rpc_message(task, task_setup_data->rpc_message); 811 812 if (task->tk_action == NULL) 813 rpc_call_start(task); 814 815 atomic_inc(&task->tk_count); 816 rpc_execute(task); 817 out: 818 return task; 819 } 820 EXPORT_SYMBOL_GPL(rpc_run_task); 821 822 /** 823 * rpc_call_sync - Perform a synchronous RPC call 824 * @clnt: pointer to RPC client 825 * @msg: RPC call parameters 826 * @flags: RPC call flags 827 */ 828 int rpc_call_sync(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags) 829 { 830 struct rpc_task *task; 831 struct rpc_task_setup task_setup_data = { 832 .rpc_client = clnt, 833 .rpc_message = msg, 834 .callback_ops = &rpc_default_ops, 835 .flags = flags, 836 }; 837 int status; 838 839 WARN_ON_ONCE(flags & RPC_TASK_ASYNC); 840 if (flags & RPC_TASK_ASYNC) { 841 rpc_release_calldata(task_setup_data.callback_ops, 842 task_setup_data.callback_data); 843 return -EINVAL; 844 } 845 846 task = rpc_run_task(&task_setup_data); 847 if (IS_ERR(task)) 848 return PTR_ERR(task); 849 status = task->tk_status; 850 rpc_put_task(task); 851 return status; 852 } 853 EXPORT_SYMBOL_GPL(rpc_call_sync); 854 855 /** 856 * rpc_call_async - Perform an asynchronous RPC call 857 * @clnt: pointer to RPC client 858 * @msg: RPC call parameters 859 * @flags: RPC call flags 860 * @tk_ops: RPC call ops 861 * @data: user call data 862 */ 863 int 864 rpc_call_async(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, 865 const struct rpc_call_ops *tk_ops, void *data) 866 { 867 struct rpc_task *task; 868 struct rpc_task_setup task_setup_data = { 869 .rpc_client = clnt, 870 .rpc_message = msg, 871 .callback_ops = tk_ops, 872 .callback_data = data, 873 .flags = flags|RPC_TASK_ASYNC, 874 }; 875 876 task = rpc_run_task(&task_setup_data); 877 if (IS_ERR(task)) 878 return PTR_ERR(task); 879 rpc_put_task(task); 880 return 0; 881 } 882 EXPORT_SYMBOL_GPL(rpc_call_async); 883 884 #if defined(CONFIG_SUNRPC_BACKCHANNEL) 885 /** 886 * rpc_run_bc_task - Allocate a new RPC task for backchannel use, then run 887 * rpc_execute against it 888 * @req: RPC request 889 * @tk_ops: RPC call ops 890 */ 891 struct rpc_task *rpc_run_bc_task(struct rpc_rqst *req, 892 const struct rpc_call_ops *tk_ops) 893 { 894 struct rpc_task *task; 895 struct xdr_buf *xbufp = &req->rq_snd_buf; 896 struct rpc_task_setup task_setup_data = { 897 .callback_ops = tk_ops, 898 }; 899 900 dprintk("RPC: rpc_run_bc_task req= %p\n", req); 901 /* 902 * Create an rpc_task to send the data 903 */ 904 task = rpc_new_task(&task_setup_data); 905 if (IS_ERR(task)) { 906 xprt_free_bc_request(req); 907 goto out; 908 } 909 task->tk_rqstp = req; 910 911 /* 912 * Set up the xdr_buf length. 913 * This also indicates that the buffer is XDR encoded already. 914 */ 915 xbufp->len = xbufp->head[0].iov_len + xbufp->page_len + 916 xbufp->tail[0].iov_len; 917 918 task->tk_action = call_bc_transmit; 919 atomic_inc(&task->tk_count); 920 WARN_ON_ONCE(atomic_read(&task->tk_count) != 2); 921 rpc_execute(task); 922 923 out: 924 dprintk("RPC: rpc_run_bc_task: task= %p\n", task); 925 return task; 926 } 927 #endif /* CONFIG_SUNRPC_BACKCHANNEL */ 928 929 void 930 rpc_call_start(struct rpc_task *task) 931 { 932 task->tk_action = call_start; 933 } 934 EXPORT_SYMBOL_GPL(rpc_call_start); 935 936 /** 937 * rpc_peeraddr - extract remote peer address from clnt's xprt 938 * @clnt: RPC client structure 939 * @buf: target buffer 940 * @bufsize: length of target buffer 941 * 942 * Returns the number of bytes that are actually in the stored address. 943 */ 944 size_t rpc_peeraddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize) 945 { 946 size_t bytes; 947 struct rpc_xprt *xprt; 948 949 rcu_read_lock(); 950 xprt = rcu_dereference(clnt->cl_xprt); 951 952 bytes = xprt->addrlen; 953 if (bytes > bufsize) 954 bytes = bufsize; 955 memcpy(buf, &xprt->addr, bytes); 956 rcu_read_unlock(); 957 958 return bytes; 959 } 960 EXPORT_SYMBOL_GPL(rpc_peeraddr); 961 962 /** 963 * rpc_peeraddr2str - return remote peer address in printable format 964 * @clnt: RPC client structure 965 * @format: address format 966 * 967 * NB: the lifetime of the memory referenced by the returned pointer is 968 * the same as the rpc_xprt itself. As long as the caller uses this 969 * pointer, it must hold the RCU read lock. 970 */ 971 const char *rpc_peeraddr2str(struct rpc_clnt *clnt, 972 enum rpc_display_format_t format) 973 { 974 struct rpc_xprt *xprt; 975 976 xprt = rcu_dereference(clnt->cl_xprt); 977 978 if (xprt->address_strings[format] != NULL) 979 return xprt->address_strings[format]; 980 else 981 return "unprintable"; 982 } 983 EXPORT_SYMBOL_GPL(rpc_peeraddr2str); 984 985 static const struct sockaddr_in rpc_inaddr_loopback = { 986 .sin_family = AF_INET, 987 .sin_addr.s_addr = htonl(INADDR_ANY), 988 }; 989 990 static const struct sockaddr_in6 rpc_in6addr_loopback = { 991 .sin6_family = AF_INET6, 992 .sin6_addr = IN6ADDR_ANY_INIT, 993 }; 994 995 /* 996 * Try a getsockname() on a connected datagram socket. Using a 997 * connected datagram socket prevents leaving a socket in TIME_WAIT. 998 * This conserves the ephemeral port number space. 999 * 1000 * Returns zero and fills in "buf" if successful; otherwise, a 1001 * negative errno is returned. 1002 */ 1003 static int rpc_sockname(struct net *net, struct sockaddr *sap, size_t salen, 1004 struct sockaddr *buf, int buflen) 1005 { 1006 struct socket *sock; 1007 int err; 1008 1009 err = __sock_create(net, sap->sa_family, 1010 SOCK_DGRAM, IPPROTO_UDP, &sock, 1); 1011 if (err < 0) { 1012 dprintk("RPC: can't create UDP socket (%d)\n", err); 1013 goto out; 1014 } 1015 1016 switch (sap->sa_family) { 1017 case AF_INET: 1018 err = kernel_bind(sock, 1019 (struct sockaddr *)&rpc_inaddr_loopback, 1020 sizeof(rpc_inaddr_loopback)); 1021 break; 1022 case AF_INET6: 1023 err = kernel_bind(sock, 1024 (struct sockaddr *)&rpc_in6addr_loopback, 1025 sizeof(rpc_in6addr_loopback)); 1026 break; 1027 default: 1028 err = -EAFNOSUPPORT; 1029 goto out; 1030 } 1031 if (err < 0) { 1032 dprintk("RPC: can't bind UDP socket (%d)\n", err); 1033 goto out_release; 1034 } 1035 1036 err = kernel_connect(sock, sap, salen, 0); 1037 if (err < 0) { 1038 dprintk("RPC: can't connect UDP socket (%d)\n", err); 1039 goto out_release; 1040 } 1041 1042 err = kernel_getsockname(sock, buf, &buflen); 1043 if (err < 0) { 1044 dprintk("RPC: getsockname failed (%d)\n", err); 1045 goto out_release; 1046 } 1047 1048 err = 0; 1049 if (buf->sa_family == AF_INET6) { 1050 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)buf; 1051 sin6->sin6_scope_id = 0; 1052 } 1053 dprintk("RPC: %s succeeded\n", __func__); 1054 1055 out_release: 1056 sock_release(sock); 1057 out: 1058 return err; 1059 } 1060 1061 /* 1062 * Scraping a connected socket failed, so we don't have a useable 1063 * local address. Fallback: generate an address that will prevent 1064 * the server from calling us back. 1065 * 1066 * Returns zero and fills in "buf" if successful; otherwise, a 1067 * negative errno is returned. 1068 */ 1069 static int rpc_anyaddr(int family, struct sockaddr *buf, size_t buflen) 1070 { 1071 switch (family) { 1072 case AF_INET: 1073 if (buflen < sizeof(rpc_inaddr_loopback)) 1074 return -EINVAL; 1075 memcpy(buf, &rpc_inaddr_loopback, 1076 sizeof(rpc_inaddr_loopback)); 1077 break; 1078 case AF_INET6: 1079 if (buflen < sizeof(rpc_in6addr_loopback)) 1080 return -EINVAL; 1081 memcpy(buf, &rpc_in6addr_loopback, 1082 sizeof(rpc_in6addr_loopback)); 1083 default: 1084 dprintk("RPC: %s: address family not supported\n", 1085 __func__); 1086 return -EAFNOSUPPORT; 1087 } 1088 dprintk("RPC: %s: succeeded\n", __func__); 1089 return 0; 1090 } 1091 1092 /** 1093 * rpc_localaddr - discover local endpoint address for an RPC client 1094 * @clnt: RPC client structure 1095 * @buf: target buffer 1096 * @buflen: size of target buffer, in bytes 1097 * 1098 * Returns zero and fills in "buf" and "buflen" if successful; 1099 * otherwise, a negative errno is returned. 1100 * 1101 * This works even if the underlying transport is not currently connected, 1102 * or if the upper layer never previously provided a source address. 1103 * 1104 * The result of this function call is transient: multiple calls in 1105 * succession may give different results, depending on how local 1106 * networking configuration changes over time. 1107 */ 1108 int rpc_localaddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t buflen) 1109 { 1110 struct sockaddr_storage address; 1111 struct sockaddr *sap = (struct sockaddr *)&address; 1112 struct rpc_xprt *xprt; 1113 struct net *net; 1114 size_t salen; 1115 int err; 1116 1117 rcu_read_lock(); 1118 xprt = rcu_dereference(clnt->cl_xprt); 1119 salen = xprt->addrlen; 1120 memcpy(sap, &xprt->addr, salen); 1121 net = get_net(xprt->xprt_net); 1122 rcu_read_unlock(); 1123 1124 rpc_set_port(sap, 0); 1125 err = rpc_sockname(net, sap, salen, buf, buflen); 1126 put_net(net); 1127 if (err != 0) 1128 /* Couldn't discover local address, return ANYADDR */ 1129 return rpc_anyaddr(sap->sa_family, buf, buflen); 1130 return 0; 1131 } 1132 EXPORT_SYMBOL_GPL(rpc_localaddr); 1133 1134 void 1135 rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize) 1136 { 1137 struct rpc_xprt *xprt; 1138 1139 rcu_read_lock(); 1140 xprt = rcu_dereference(clnt->cl_xprt); 1141 if (xprt->ops->set_buffer_size) 1142 xprt->ops->set_buffer_size(xprt, sndsize, rcvsize); 1143 rcu_read_unlock(); 1144 } 1145 EXPORT_SYMBOL_GPL(rpc_setbufsize); 1146 1147 /** 1148 * rpc_protocol - Get transport protocol number for an RPC client 1149 * @clnt: RPC client to query 1150 * 1151 */ 1152 int rpc_protocol(struct rpc_clnt *clnt) 1153 { 1154 int protocol; 1155 1156 rcu_read_lock(); 1157 protocol = rcu_dereference(clnt->cl_xprt)->prot; 1158 rcu_read_unlock(); 1159 return protocol; 1160 } 1161 EXPORT_SYMBOL_GPL(rpc_protocol); 1162 1163 /** 1164 * rpc_net_ns - Get the network namespace for this RPC client 1165 * @clnt: RPC client to query 1166 * 1167 */ 1168 struct net *rpc_net_ns(struct rpc_clnt *clnt) 1169 { 1170 struct net *ret; 1171 1172 rcu_read_lock(); 1173 ret = rcu_dereference(clnt->cl_xprt)->xprt_net; 1174 rcu_read_unlock(); 1175 return ret; 1176 } 1177 EXPORT_SYMBOL_GPL(rpc_net_ns); 1178 1179 /** 1180 * rpc_max_payload - Get maximum payload size for a transport, in bytes 1181 * @clnt: RPC client to query 1182 * 1183 * For stream transports, this is one RPC record fragment (see RFC 1184 * 1831), as we don't support multi-record requests yet. For datagram 1185 * transports, this is the size of an IP packet minus the IP, UDP, and 1186 * RPC header sizes. 1187 */ 1188 size_t rpc_max_payload(struct rpc_clnt *clnt) 1189 { 1190 size_t ret; 1191 1192 rcu_read_lock(); 1193 ret = rcu_dereference(clnt->cl_xprt)->max_payload; 1194 rcu_read_unlock(); 1195 return ret; 1196 } 1197 EXPORT_SYMBOL_GPL(rpc_max_payload); 1198 1199 /** 1200 * rpc_get_timeout - Get timeout for transport in units of HZ 1201 * @clnt: RPC client to query 1202 */ 1203 unsigned long rpc_get_timeout(struct rpc_clnt *clnt) 1204 { 1205 unsigned long ret; 1206 1207 rcu_read_lock(); 1208 ret = rcu_dereference(clnt->cl_xprt)->timeout->to_initval; 1209 rcu_read_unlock(); 1210 return ret; 1211 } 1212 EXPORT_SYMBOL_GPL(rpc_get_timeout); 1213 1214 /** 1215 * rpc_force_rebind - force transport to check that remote port is unchanged 1216 * @clnt: client to rebind 1217 * 1218 */ 1219 void rpc_force_rebind(struct rpc_clnt *clnt) 1220 { 1221 if (clnt->cl_autobind) { 1222 rcu_read_lock(); 1223 xprt_clear_bound(rcu_dereference(clnt->cl_xprt)); 1224 rcu_read_unlock(); 1225 } 1226 } 1227 EXPORT_SYMBOL_GPL(rpc_force_rebind); 1228 1229 /* 1230 * Restart an (async) RPC call from the call_prepare state. 1231 * Usually called from within the exit handler. 1232 */ 1233 int 1234 rpc_restart_call_prepare(struct rpc_task *task) 1235 { 1236 if (RPC_ASSASSINATED(task)) 1237 return 0; 1238 task->tk_action = call_start; 1239 if (task->tk_ops->rpc_call_prepare != NULL) 1240 task->tk_action = rpc_prepare_task; 1241 return 1; 1242 } 1243 EXPORT_SYMBOL_GPL(rpc_restart_call_prepare); 1244 1245 /* 1246 * Restart an (async) RPC call. Usually called from within the 1247 * exit handler. 1248 */ 1249 int 1250 rpc_restart_call(struct rpc_task *task) 1251 { 1252 if (RPC_ASSASSINATED(task)) 1253 return 0; 1254 task->tk_action = call_start; 1255 return 1; 1256 } 1257 EXPORT_SYMBOL_GPL(rpc_restart_call); 1258 1259 #ifdef RPC_DEBUG 1260 static const char *rpc_proc_name(const struct rpc_task *task) 1261 { 1262 const struct rpc_procinfo *proc = task->tk_msg.rpc_proc; 1263 1264 if (proc) { 1265 if (proc->p_name) 1266 return proc->p_name; 1267 else 1268 return "NULL"; 1269 } else 1270 return "no proc"; 1271 } 1272 #endif 1273 1274 /* 1275 * 0. Initial state 1276 * 1277 * Other FSM states can be visited zero or more times, but 1278 * this state is visited exactly once for each RPC. 1279 */ 1280 static void 1281 call_start(struct rpc_task *task) 1282 { 1283 struct rpc_clnt *clnt = task->tk_client; 1284 1285 dprintk("RPC: %5u call_start %s%d proc %s (%s)\n", task->tk_pid, 1286 clnt->cl_protname, clnt->cl_vers, 1287 rpc_proc_name(task), 1288 (RPC_IS_ASYNC(task) ? "async" : "sync")); 1289 1290 /* Increment call count */ 1291 task->tk_msg.rpc_proc->p_count++; 1292 clnt->cl_stats->rpccnt++; 1293 task->tk_action = call_reserve; 1294 } 1295 1296 /* 1297 * 1. Reserve an RPC call slot 1298 */ 1299 static void 1300 call_reserve(struct rpc_task *task) 1301 { 1302 dprint_status(task); 1303 1304 task->tk_status = 0; 1305 task->tk_action = call_reserveresult; 1306 xprt_reserve(task); 1307 } 1308 1309 static void call_retry_reserve(struct rpc_task *task); 1310 1311 /* 1312 * 1b. Grok the result of xprt_reserve() 1313 */ 1314 static void 1315 call_reserveresult(struct rpc_task *task) 1316 { 1317 int status = task->tk_status; 1318 1319 dprint_status(task); 1320 1321 /* 1322 * After a call to xprt_reserve(), we must have either 1323 * a request slot or else an error status. 1324 */ 1325 task->tk_status = 0; 1326 if (status >= 0) { 1327 if (task->tk_rqstp) { 1328 task->tk_action = call_refresh; 1329 return; 1330 } 1331 1332 printk(KERN_ERR "%s: status=%d, but no request slot, exiting\n", 1333 __func__, status); 1334 rpc_exit(task, -EIO); 1335 return; 1336 } 1337 1338 /* 1339 * Even though there was an error, we may have acquired 1340 * a request slot somehow. Make sure not to leak it. 1341 */ 1342 if (task->tk_rqstp) { 1343 printk(KERN_ERR "%s: status=%d, request allocated anyway\n", 1344 __func__, status); 1345 xprt_release(task); 1346 } 1347 1348 switch (status) { 1349 case -ENOMEM: 1350 rpc_delay(task, HZ >> 2); 1351 case -EAGAIN: /* woken up; retry */ 1352 task->tk_action = call_retry_reserve; 1353 return; 1354 case -EIO: /* probably a shutdown */ 1355 break; 1356 default: 1357 printk(KERN_ERR "%s: unrecognized error %d, exiting\n", 1358 __func__, status); 1359 break; 1360 } 1361 rpc_exit(task, status); 1362 } 1363 1364 /* 1365 * 1c. Retry reserving an RPC call slot 1366 */ 1367 static void 1368 call_retry_reserve(struct rpc_task *task) 1369 { 1370 dprint_status(task); 1371 1372 task->tk_status = 0; 1373 task->tk_action = call_reserveresult; 1374 xprt_retry_reserve(task); 1375 } 1376 1377 /* 1378 * 2. Bind and/or refresh the credentials 1379 */ 1380 static void 1381 call_refresh(struct rpc_task *task) 1382 { 1383 dprint_status(task); 1384 1385 task->tk_action = call_refreshresult; 1386 task->tk_status = 0; 1387 task->tk_client->cl_stats->rpcauthrefresh++; 1388 rpcauth_refreshcred(task); 1389 } 1390 1391 /* 1392 * 2a. Process the results of a credential refresh 1393 */ 1394 static void 1395 call_refreshresult(struct rpc_task *task) 1396 { 1397 int status = task->tk_status; 1398 1399 dprint_status(task); 1400 1401 task->tk_status = 0; 1402 task->tk_action = call_refresh; 1403 switch (status) { 1404 case 0: 1405 if (rpcauth_uptodatecred(task)) 1406 task->tk_action = call_allocate; 1407 return; 1408 case -ETIMEDOUT: 1409 rpc_delay(task, 3*HZ); 1410 case -EKEYEXPIRED: 1411 case -EAGAIN: 1412 status = -EACCES; 1413 if (!task->tk_cred_retry) 1414 break; 1415 task->tk_cred_retry--; 1416 dprintk("RPC: %5u %s: retry refresh creds\n", 1417 task->tk_pid, __func__); 1418 return; 1419 } 1420 dprintk("RPC: %5u %s: refresh creds failed with error %d\n", 1421 task->tk_pid, __func__, status); 1422 rpc_exit(task, status); 1423 } 1424 1425 /* 1426 * 2b. Allocate the buffer. For details, see sched.c:rpc_malloc. 1427 * (Note: buffer memory is freed in xprt_release). 1428 */ 1429 static void 1430 call_allocate(struct rpc_task *task) 1431 { 1432 unsigned int slack = task->tk_rqstp->rq_cred->cr_auth->au_cslack; 1433 struct rpc_rqst *req = task->tk_rqstp; 1434 struct rpc_xprt *xprt = req->rq_xprt; 1435 struct rpc_procinfo *proc = task->tk_msg.rpc_proc; 1436 1437 dprint_status(task); 1438 1439 task->tk_status = 0; 1440 task->tk_action = call_bind; 1441 1442 if (req->rq_buffer) 1443 return; 1444 1445 if (proc->p_proc != 0) { 1446 BUG_ON(proc->p_arglen == 0); 1447 if (proc->p_decode != NULL) 1448 BUG_ON(proc->p_replen == 0); 1449 } 1450 1451 /* 1452 * Calculate the size (in quads) of the RPC call 1453 * and reply headers, and convert both values 1454 * to byte sizes. 1455 */ 1456 req->rq_callsize = RPC_CALLHDRSIZE + (slack << 1) + proc->p_arglen; 1457 req->rq_callsize <<= 2; 1458 req->rq_rcvsize = RPC_REPHDRSIZE + slack + proc->p_replen; 1459 req->rq_rcvsize <<= 2; 1460 1461 req->rq_buffer = xprt->ops->buf_alloc(task, 1462 req->rq_callsize + req->rq_rcvsize); 1463 if (req->rq_buffer != NULL) 1464 return; 1465 1466 dprintk("RPC: %5u rpc_buffer allocation failed\n", task->tk_pid); 1467 1468 if (RPC_IS_ASYNC(task) || !fatal_signal_pending(current)) { 1469 task->tk_action = call_allocate; 1470 rpc_delay(task, HZ>>4); 1471 return; 1472 } 1473 1474 rpc_exit(task, -ERESTARTSYS); 1475 } 1476 1477 static inline int 1478 rpc_task_need_encode(struct rpc_task *task) 1479 { 1480 return task->tk_rqstp->rq_snd_buf.len == 0; 1481 } 1482 1483 static inline void 1484 rpc_task_force_reencode(struct rpc_task *task) 1485 { 1486 task->tk_rqstp->rq_snd_buf.len = 0; 1487 task->tk_rqstp->rq_bytes_sent = 0; 1488 } 1489 1490 static inline void 1491 rpc_xdr_buf_init(struct xdr_buf *buf, void *start, size_t len) 1492 { 1493 buf->head[0].iov_base = start; 1494 buf->head[0].iov_len = len; 1495 buf->tail[0].iov_len = 0; 1496 buf->page_len = 0; 1497 buf->flags = 0; 1498 buf->len = 0; 1499 buf->buflen = len; 1500 } 1501 1502 /* 1503 * 3. Encode arguments of an RPC call 1504 */ 1505 static void 1506 rpc_xdr_encode(struct rpc_task *task) 1507 { 1508 struct rpc_rqst *req = task->tk_rqstp; 1509 kxdreproc_t encode; 1510 __be32 *p; 1511 1512 dprint_status(task); 1513 1514 rpc_xdr_buf_init(&req->rq_snd_buf, 1515 req->rq_buffer, 1516 req->rq_callsize); 1517 rpc_xdr_buf_init(&req->rq_rcv_buf, 1518 (char *)req->rq_buffer + req->rq_callsize, 1519 req->rq_rcvsize); 1520 1521 p = rpc_encode_header(task); 1522 if (p == NULL) { 1523 printk(KERN_INFO "RPC: couldn't encode RPC header, exit EIO\n"); 1524 rpc_exit(task, -EIO); 1525 return; 1526 } 1527 1528 encode = task->tk_msg.rpc_proc->p_encode; 1529 if (encode == NULL) 1530 return; 1531 1532 task->tk_status = rpcauth_wrap_req(task, encode, req, p, 1533 task->tk_msg.rpc_argp); 1534 } 1535 1536 /* 1537 * 4. Get the server port number if not yet set 1538 */ 1539 static void 1540 call_bind(struct rpc_task *task) 1541 { 1542 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; 1543 1544 dprint_status(task); 1545 1546 task->tk_action = call_connect; 1547 if (!xprt_bound(xprt)) { 1548 task->tk_action = call_bind_status; 1549 task->tk_timeout = xprt->bind_timeout; 1550 xprt->ops->rpcbind(task); 1551 } 1552 } 1553 1554 /* 1555 * 4a. Sort out bind result 1556 */ 1557 static void 1558 call_bind_status(struct rpc_task *task) 1559 { 1560 int status = -EIO; 1561 1562 if (task->tk_status >= 0) { 1563 dprint_status(task); 1564 task->tk_status = 0; 1565 task->tk_action = call_connect; 1566 return; 1567 } 1568 1569 trace_rpc_bind_status(task); 1570 switch (task->tk_status) { 1571 case -ENOMEM: 1572 dprintk("RPC: %5u rpcbind out of memory\n", task->tk_pid); 1573 rpc_delay(task, HZ >> 2); 1574 goto retry_timeout; 1575 case -EACCES: 1576 dprintk("RPC: %5u remote rpcbind: RPC program/version " 1577 "unavailable\n", task->tk_pid); 1578 /* fail immediately if this is an RPC ping */ 1579 if (task->tk_msg.rpc_proc->p_proc == 0) { 1580 status = -EOPNOTSUPP; 1581 break; 1582 } 1583 if (task->tk_rebind_retry == 0) 1584 break; 1585 task->tk_rebind_retry--; 1586 rpc_delay(task, 3*HZ); 1587 goto retry_timeout; 1588 case -ETIMEDOUT: 1589 dprintk("RPC: %5u rpcbind request timed out\n", 1590 task->tk_pid); 1591 goto retry_timeout; 1592 case -EPFNOSUPPORT: 1593 /* server doesn't support any rpcbind version we know of */ 1594 dprintk("RPC: %5u unrecognized remote rpcbind service\n", 1595 task->tk_pid); 1596 break; 1597 case -EPROTONOSUPPORT: 1598 dprintk("RPC: %5u remote rpcbind version unavailable, retrying\n", 1599 task->tk_pid); 1600 task->tk_status = 0; 1601 task->tk_action = call_bind; 1602 return; 1603 case -ECONNREFUSED: /* connection problems */ 1604 case -ECONNRESET: 1605 case -ENOTCONN: 1606 case -EHOSTDOWN: 1607 case -EHOSTUNREACH: 1608 case -ENETUNREACH: 1609 case -EPIPE: 1610 dprintk("RPC: %5u remote rpcbind unreachable: %d\n", 1611 task->tk_pid, task->tk_status); 1612 if (!RPC_IS_SOFTCONN(task)) { 1613 rpc_delay(task, 5*HZ); 1614 goto retry_timeout; 1615 } 1616 status = task->tk_status; 1617 break; 1618 default: 1619 dprintk("RPC: %5u unrecognized rpcbind error (%d)\n", 1620 task->tk_pid, -task->tk_status); 1621 } 1622 1623 rpc_exit(task, status); 1624 return; 1625 1626 retry_timeout: 1627 task->tk_action = call_timeout; 1628 } 1629 1630 /* 1631 * 4b. Connect to the RPC server 1632 */ 1633 static void 1634 call_connect(struct rpc_task *task) 1635 { 1636 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; 1637 1638 dprintk("RPC: %5u call_connect xprt %p %s connected\n", 1639 task->tk_pid, xprt, 1640 (xprt_connected(xprt) ? "is" : "is not")); 1641 1642 task->tk_action = call_transmit; 1643 if (!xprt_connected(xprt)) { 1644 task->tk_action = call_connect_status; 1645 if (task->tk_status < 0) 1646 return; 1647 xprt_connect(task); 1648 } 1649 } 1650 1651 /* 1652 * 4c. Sort out connect result 1653 */ 1654 static void 1655 call_connect_status(struct rpc_task *task) 1656 { 1657 struct rpc_clnt *clnt = task->tk_client; 1658 int status = task->tk_status; 1659 1660 dprint_status(task); 1661 1662 trace_rpc_connect_status(task, status); 1663 switch (status) { 1664 /* if soft mounted, test if we've timed out */ 1665 case -ETIMEDOUT: 1666 task->tk_action = call_timeout; 1667 return; 1668 case -ECONNREFUSED: 1669 case -ECONNRESET: 1670 case -ENETUNREACH: 1671 if (RPC_IS_SOFTCONN(task)) 1672 break; 1673 /* retry with existing socket, after a delay */ 1674 case 0: 1675 case -EAGAIN: 1676 task->tk_status = 0; 1677 clnt->cl_stats->netreconn++; 1678 task->tk_action = call_transmit; 1679 return; 1680 } 1681 rpc_exit(task, status); 1682 } 1683 1684 /* 1685 * 5. Transmit the RPC request, and wait for reply 1686 */ 1687 static void 1688 call_transmit(struct rpc_task *task) 1689 { 1690 dprint_status(task); 1691 1692 task->tk_action = call_status; 1693 if (task->tk_status < 0) 1694 return; 1695 task->tk_status = xprt_prepare_transmit(task); 1696 if (task->tk_status != 0) 1697 return; 1698 task->tk_action = call_transmit_status; 1699 /* Encode here so that rpcsec_gss can use correct sequence number. */ 1700 if (rpc_task_need_encode(task)) { 1701 rpc_xdr_encode(task); 1702 /* Did the encode result in an error condition? */ 1703 if (task->tk_status != 0) { 1704 /* Was the error nonfatal? */ 1705 if (task->tk_status == -EAGAIN) 1706 rpc_delay(task, HZ >> 4); 1707 else 1708 rpc_exit(task, task->tk_status); 1709 return; 1710 } 1711 } 1712 xprt_transmit(task); 1713 if (task->tk_status < 0) 1714 return; 1715 /* 1716 * On success, ensure that we call xprt_end_transmit() before sleeping 1717 * in order to allow access to the socket to other RPC requests. 1718 */ 1719 call_transmit_status(task); 1720 if (rpc_reply_expected(task)) 1721 return; 1722 task->tk_action = rpc_exit_task; 1723 rpc_wake_up_queued_task(&task->tk_rqstp->rq_xprt->pending, task); 1724 } 1725 1726 /* 1727 * 5a. Handle cleanup after a transmission 1728 */ 1729 static void 1730 call_transmit_status(struct rpc_task *task) 1731 { 1732 task->tk_action = call_status; 1733 1734 /* 1735 * Common case: success. Force the compiler to put this 1736 * test first. 1737 */ 1738 if (task->tk_status == 0) { 1739 xprt_end_transmit(task); 1740 rpc_task_force_reencode(task); 1741 return; 1742 } 1743 1744 switch (task->tk_status) { 1745 case -EAGAIN: 1746 break; 1747 default: 1748 dprint_status(task); 1749 xprt_end_transmit(task); 1750 rpc_task_force_reencode(task); 1751 break; 1752 /* 1753 * Special cases: if we've been waiting on the 1754 * socket's write_space() callback, or if the 1755 * socket just returned a connection error, 1756 * then hold onto the transport lock. 1757 */ 1758 case -ECONNREFUSED: 1759 case -EHOSTDOWN: 1760 case -EHOSTUNREACH: 1761 case -ENETUNREACH: 1762 if (RPC_IS_SOFTCONN(task)) { 1763 xprt_end_transmit(task); 1764 rpc_exit(task, task->tk_status); 1765 break; 1766 } 1767 case -ECONNRESET: 1768 case -ENOTCONN: 1769 case -EPIPE: 1770 rpc_task_force_reencode(task); 1771 } 1772 } 1773 1774 #if defined(CONFIG_SUNRPC_BACKCHANNEL) 1775 /* 1776 * 5b. Send the backchannel RPC reply. On error, drop the reply. In 1777 * addition, disconnect on connectivity errors. 1778 */ 1779 static void 1780 call_bc_transmit(struct rpc_task *task) 1781 { 1782 struct rpc_rqst *req = task->tk_rqstp; 1783 1784 task->tk_status = xprt_prepare_transmit(task); 1785 if (task->tk_status == -EAGAIN) { 1786 /* 1787 * Could not reserve the transport. Try again after the 1788 * transport is released. 1789 */ 1790 task->tk_status = 0; 1791 task->tk_action = call_bc_transmit; 1792 return; 1793 } 1794 1795 task->tk_action = rpc_exit_task; 1796 if (task->tk_status < 0) { 1797 printk(KERN_NOTICE "RPC: Could not send backchannel reply " 1798 "error: %d\n", task->tk_status); 1799 return; 1800 } 1801 1802 xprt_transmit(task); 1803 xprt_end_transmit(task); 1804 dprint_status(task); 1805 switch (task->tk_status) { 1806 case 0: 1807 /* Success */ 1808 break; 1809 case -EHOSTDOWN: 1810 case -EHOSTUNREACH: 1811 case -ENETUNREACH: 1812 case -ETIMEDOUT: 1813 /* 1814 * Problem reaching the server. Disconnect and let the 1815 * forechannel reestablish the connection. The server will 1816 * have to retransmit the backchannel request and we'll 1817 * reprocess it. Since these ops are idempotent, there's no 1818 * need to cache our reply at this time. 1819 */ 1820 printk(KERN_NOTICE "RPC: Could not send backchannel reply " 1821 "error: %d\n", task->tk_status); 1822 xprt_conditional_disconnect(req->rq_xprt, 1823 req->rq_connect_cookie); 1824 break; 1825 default: 1826 /* 1827 * We were unable to reply and will have to drop the 1828 * request. The server should reconnect and retransmit. 1829 */ 1830 WARN_ON_ONCE(task->tk_status == -EAGAIN); 1831 printk(KERN_NOTICE "RPC: Could not send backchannel reply " 1832 "error: %d\n", task->tk_status); 1833 break; 1834 } 1835 rpc_wake_up_queued_task(&req->rq_xprt->pending, task); 1836 } 1837 #endif /* CONFIG_SUNRPC_BACKCHANNEL */ 1838 1839 /* 1840 * 6. Sort out the RPC call status 1841 */ 1842 static void 1843 call_status(struct rpc_task *task) 1844 { 1845 struct rpc_clnt *clnt = task->tk_client; 1846 struct rpc_rqst *req = task->tk_rqstp; 1847 int status; 1848 1849 if (req->rq_reply_bytes_recvd > 0 && !req->rq_bytes_sent) 1850 task->tk_status = req->rq_reply_bytes_recvd; 1851 1852 dprint_status(task); 1853 1854 status = task->tk_status; 1855 if (status >= 0) { 1856 task->tk_action = call_decode; 1857 return; 1858 } 1859 1860 trace_rpc_call_status(task); 1861 task->tk_status = 0; 1862 switch(status) { 1863 case -EHOSTDOWN: 1864 case -EHOSTUNREACH: 1865 case -ENETUNREACH: 1866 /* 1867 * Delay any retries for 3 seconds, then handle as if it 1868 * were a timeout. 1869 */ 1870 rpc_delay(task, 3*HZ); 1871 case -ETIMEDOUT: 1872 task->tk_action = call_timeout; 1873 if (task->tk_client->cl_discrtry) 1874 xprt_conditional_disconnect(req->rq_xprt, 1875 req->rq_connect_cookie); 1876 break; 1877 case -ECONNRESET: 1878 case -ECONNREFUSED: 1879 rpc_force_rebind(clnt); 1880 rpc_delay(task, 3*HZ); 1881 case -EPIPE: 1882 case -ENOTCONN: 1883 task->tk_action = call_bind; 1884 break; 1885 case -EAGAIN: 1886 task->tk_action = call_transmit; 1887 break; 1888 case -EIO: 1889 /* shutdown or soft timeout */ 1890 rpc_exit(task, status); 1891 break; 1892 default: 1893 if (clnt->cl_chatty) 1894 printk("%s: RPC call returned error %d\n", 1895 clnt->cl_protname, -status); 1896 rpc_exit(task, status); 1897 } 1898 } 1899 1900 /* 1901 * 6a. Handle RPC timeout 1902 * We do not release the request slot, so we keep using the 1903 * same XID for all retransmits. 1904 */ 1905 static void 1906 call_timeout(struct rpc_task *task) 1907 { 1908 struct rpc_clnt *clnt = task->tk_client; 1909 1910 if (xprt_adjust_timeout(task->tk_rqstp) == 0) { 1911 dprintk("RPC: %5u call_timeout (minor)\n", task->tk_pid); 1912 goto retry; 1913 } 1914 1915 dprintk("RPC: %5u call_timeout (major)\n", task->tk_pid); 1916 task->tk_timeouts++; 1917 1918 if (RPC_IS_SOFTCONN(task)) { 1919 rpc_exit(task, -ETIMEDOUT); 1920 return; 1921 } 1922 if (RPC_IS_SOFT(task)) { 1923 if (clnt->cl_chatty) { 1924 rcu_read_lock(); 1925 printk(KERN_NOTICE "%s: server %s not responding, timed out\n", 1926 clnt->cl_protname, 1927 rcu_dereference(clnt->cl_xprt)->servername); 1928 rcu_read_unlock(); 1929 } 1930 if (task->tk_flags & RPC_TASK_TIMEOUT) 1931 rpc_exit(task, -ETIMEDOUT); 1932 else 1933 rpc_exit(task, -EIO); 1934 return; 1935 } 1936 1937 if (!(task->tk_flags & RPC_CALL_MAJORSEEN)) { 1938 task->tk_flags |= RPC_CALL_MAJORSEEN; 1939 if (clnt->cl_chatty) { 1940 rcu_read_lock(); 1941 printk(KERN_NOTICE "%s: server %s not responding, still trying\n", 1942 clnt->cl_protname, 1943 rcu_dereference(clnt->cl_xprt)->servername); 1944 rcu_read_unlock(); 1945 } 1946 } 1947 rpc_force_rebind(clnt); 1948 /* 1949 * Did our request time out due to an RPCSEC_GSS out-of-sequence 1950 * event? RFC2203 requires the server to drop all such requests. 1951 */ 1952 rpcauth_invalcred(task); 1953 1954 retry: 1955 clnt->cl_stats->rpcretrans++; 1956 task->tk_action = call_bind; 1957 task->tk_status = 0; 1958 } 1959 1960 /* 1961 * 7. Decode the RPC reply 1962 */ 1963 static void 1964 call_decode(struct rpc_task *task) 1965 { 1966 struct rpc_clnt *clnt = task->tk_client; 1967 struct rpc_rqst *req = task->tk_rqstp; 1968 kxdrdproc_t decode = task->tk_msg.rpc_proc->p_decode; 1969 __be32 *p; 1970 1971 dprint_status(task); 1972 1973 if (task->tk_flags & RPC_CALL_MAJORSEEN) { 1974 if (clnt->cl_chatty) { 1975 rcu_read_lock(); 1976 printk(KERN_NOTICE "%s: server %s OK\n", 1977 clnt->cl_protname, 1978 rcu_dereference(clnt->cl_xprt)->servername); 1979 rcu_read_unlock(); 1980 } 1981 task->tk_flags &= ~RPC_CALL_MAJORSEEN; 1982 } 1983 1984 /* 1985 * Ensure that we see all writes made by xprt_complete_rqst() 1986 * before it changed req->rq_reply_bytes_recvd. 1987 */ 1988 smp_rmb(); 1989 req->rq_rcv_buf.len = req->rq_private_buf.len; 1990 1991 /* Check that the softirq receive buffer is valid */ 1992 WARN_ON(memcmp(&req->rq_rcv_buf, &req->rq_private_buf, 1993 sizeof(req->rq_rcv_buf)) != 0); 1994 1995 if (req->rq_rcv_buf.len < 12) { 1996 if (!RPC_IS_SOFT(task)) { 1997 task->tk_action = call_bind; 1998 clnt->cl_stats->rpcretrans++; 1999 goto out_retry; 2000 } 2001 dprintk("RPC: %s: too small RPC reply size (%d bytes)\n", 2002 clnt->cl_protname, task->tk_status); 2003 task->tk_action = call_timeout; 2004 goto out_retry; 2005 } 2006 2007 p = rpc_verify_header(task); 2008 if (IS_ERR(p)) { 2009 if (p == ERR_PTR(-EAGAIN)) 2010 goto out_retry; 2011 return; 2012 } 2013 2014 task->tk_action = rpc_exit_task; 2015 2016 if (decode) { 2017 task->tk_status = rpcauth_unwrap_resp(task, decode, req, p, 2018 task->tk_msg.rpc_resp); 2019 } 2020 dprintk("RPC: %5u call_decode result %d\n", task->tk_pid, 2021 task->tk_status); 2022 return; 2023 out_retry: 2024 task->tk_status = 0; 2025 /* Note: rpc_verify_header() may have freed the RPC slot */ 2026 if (task->tk_rqstp == req) { 2027 req->rq_reply_bytes_recvd = req->rq_rcv_buf.len = 0; 2028 if (task->tk_client->cl_discrtry) 2029 xprt_conditional_disconnect(req->rq_xprt, 2030 req->rq_connect_cookie); 2031 } 2032 } 2033 2034 static __be32 * 2035 rpc_encode_header(struct rpc_task *task) 2036 { 2037 struct rpc_clnt *clnt = task->tk_client; 2038 struct rpc_rqst *req = task->tk_rqstp; 2039 __be32 *p = req->rq_svec[0].iov_base; 2040 2041 /* FIXME: check buffer size? */ 2042 2043 p = xprt_skip_transport_header(req->rq_xprt, p); 2044 *p++ = req->rq_xid; /* XID */ 2045 *p++ = htonl(RPC_CALL); /* CALL */ 2046 *p++ = htonl(RPC_VERSION); /* RPC version */ 2047 *p++ = htonl(clnt->cl_prog); /* program number */ 2048 *p++ = htonl(clnt->cl_vers); /* program version */ 2049 *p++ = htonl(task->tk_msg.rpc_proc->p_proc); /* procedure */ 2050 p = rpcauth_marshcred(task, p); 2051 req->rq_slen = xdr_adjust_iovec(&req->rq_svec[0], p); 2052 return p; 2053 } 2054 2055 static __be32 * 2056 rpc_verify_header(struct rpc_task *task) 2057 { 2058 struct rpc_clnt *clnt = task->tk_client; 2059 struct kvec *iov = &task->tk_rqstp->rq_rcv_buf.head[0]; 2060 int len = task->tk_rqstp->rq_rcv_buf.len >> 2; 2061 __be32 *p = iov->iov_base; 2062 u32 n; 2063 int error = -EACCES; 2064 2065 if ((task->tk_rqstp->rq_rcv_buf.len & 3) != 0) { 2066 /* RFC-1014 says that the representation of XDR data must be a 2067 * multiple of four bytes 2068 * - if it isn't pointer subtraction in the NFS client may give 2069 * undefined results 2070 */ 2071 dprintk("RPC: %5u %s: XDR representation not a multiple of" 2072 " 4 bytes: 0x%x\n", task->tk_pid, __func__, 2073 task->tk_rqstp->rq_rcv_buf.len); 2074 goto out_eio; 2075 } 2076 if ((len -= 3) < 0) 2077 goto out_overflow; 2078 2079 p += 1; /* skip XID */ 2080 if ((n = ntohl(*p++)) != RPC_REPLY) { 2081 dprintk("RPC: %5u %s: not an RPC reply: %x\n", 2082 task->tk_pid, __func__, n); 2083 goto out_garbage; 2084 } 2085 2086 if ((n = ntohl(*p++)) != RPC_MSG_ACCEPTED) { 2087 if (--len < 0) 2088 goto out_overflow; 2089 switch ((n = ntohl(*p++))) { 2090 case RPC_AUTH_ERROR: 2091 break; 2092 case RPC_MISMATCH: 2093 dprintk("RPC: %5u %s: RPC call version mismatch!\n", 2094 task->tk_pid, __func__); 2095 error = -EPROTONOSUPPORT; 2096 goto out_err; 2097 default: 2098 dprintk("RPC: %5u %s: RPC call rejected, " 2099 "unknown error: %x\n", 2100 task->tk_pid, __func__, n); 2101 goto out_eio; 2102 } 2103 if (--len < 0) 2104 goto out_overflow; 2105 switch ((n = ntohl(*p++))) { 2106 case RPC_AUTH_REJECTEDCRED: 2107 case RPC_AUTH_REJECTEDVERF: 2108 case RPCSEC_GSS_CREDPROBLEM: 2109 case RPCSEC_GSS_CTXPROBLEM: 2110 if (!task->tk_cred_retry) 2111 break; 2112 task->tk_cred_retry--; 2113 dprintk("RPC: %5u %s: retry stale creds\n", 2114 task->tk_pid, __func__); 2115 rpcauth_invalcred(task); 2116 /* Ensure we obtain a new XID! */ 2117 xprt_release(task); 2118 task->tk_action = call_reserve; 2119 goto out_retry; 2120 case RPC_AUTH_BADCRED: 2121 case RPC_AUTH_BADVERF: 2122 /* possibly garbled cred/verf? */ 2123 if (!task->tk_garb_retry) 2124 break; 2125 task->tk_garb_retry--; 2126 dprintk("RPC: %5u %s: retry garbled creds\n", 2127 task->tk_pid, __func__); 2128 task->tk_action = call_bind; 2129 goto out_retry; 2130 case RPC_AUTH_TOOWEAK: 2131 rcu_read_lock(); 2132 printk(KERN_NOTICE "RPC: server %s requires stronger " 2133 "authentication.\n", 2134 rcu_dereference(clnt->cl_xprt)->servername); 2135 rcu_read_unlock(); 2136 break; 2137 default: 2138 dprintk("RPC: %5u %s: unknown auth error: %x\n", 2139 task->tk_pid, __func__, n); 2140 error = -EIO; 2141 } 2142 dprintk("RPC: %5u %s: call rejected %d\n", 2143 task->tk_pid, __func__, n); 2144 goto out_err; 2145 } 2146 if (!(p = rpcauth_checkverf(task, p))) { 2147 dprintk("RPC: %5u %s: auth check failed\n", 2148 task->tk_pid, __func__); 2149 goto out_garbage; /* bad verifier, retry */ 2150 } 2151 len = p - (__be32 *)iov->iov_base - 1; 2152 if (len < 0) 2153 goto out_overflow; 2154 switch ((n = ntohl(*p++))) { 2155 case RPC_SUCCESS: 2156 return p; 2157 case RPC_PROG_UNAVAIL: 2158 dprintk_rcu("RPC: %5u %s: program %u is unsupported " 2159 "by server %s\n", task->tk_pid, __func__, 2160 (unsigned int)clnt->cl_prog, 2161 rcu_dereference(clnt->cl_xprt)->servername); 2162 error = -EPFNOSUPPORT; 2163 goto out_err; 2164 case RPC_PROG_MISMATCH: 2165 dprintk_rcu("RPC: %5u %s: program %u, version %u unsupported " 2166 "by server %s\n", task->tk_pid, __func__, 2167 (unsigned int)clnt->cl_prog, 2168 (unsigned int)clnt->cl_vers, 2169 rcu_dereference(clnt->cl_xprt)->servername); 2170 error = -EPROTONOSUPPORT; 2171 goto out_err; 2172 case RPC_PROC_UNAVAIL: 2173 dprintk_rcu("RPC: %5u %s: proc %s unsupported by program %u, " 2174 "version %u on server %s\n", 2175 task->tk_pid, __func__, 2176 rpc_proc_name(task), 2177 clnt->cl_prog, clnt->cl_vers, 2178 rcu_dereference(clnt->cl_xprt)->servername); 2179 error = -EOPNOTSUPP; 2180 goto out_err; 2181 case RPC_GARBAGE_ARGS: 2182 dprintk("RPC: %5u %s: server saw garbage\n", 2183 task->tk_pid, __func__); 2184 break; /* retry */ 2185 default: 2186 dprintk("RPC: %5u %s: server accept status: %x\n", 2187 task->tk_pid, __func__, n); 2188 /* Also retry */ 2189 } 2190 2191 out_garbage: 2192 clnt->cl_stats->rpcgarbage++; 2193 if (task->tk_garb_retry) { 2194 task->tk_garb_retry--; 2195 dprintk("RPC: %5u %s: retrying\n", 2196 task->tk_pid, __func__); 2197 task->tk_action = call_bind; 2198 out_retry: 2199 return ERR_PTR(-EAGAIN); 2200 } 2201 out_eio: 2202 error = -EIO; 2203 out_err: 2204 rpc_exit(task, error); 2205 dprintk("RPC: %5u %s: call failed with error %d\n", task->tk_pid, 2206 __func__, error); 2207 return ERR_PTR(error); 2208 out_overflow: 2209 dprintk("RPC: %5u %s: server reply was truncated.\n", task->tk_pid, 2210 __func__); 2211 goto out_garbage; 2212 } 2213 2214 static void rpcproc_encode_null(void *rqstp, struct xdr_stream *xdr, void *obj) 2215 { 2216 } 2217 2218 static int rpcproc_decode_null(void *rqstp, struct xdr_stream *xdr, void *obj) 2219 { 2220 return 0; 2221 } 2222 2223 static struct rpc_procinfo rpcproc_null = { 2224 .p_encode = rpcproc_encode_null, 2225 .p_decode = rpcproc_decode_null, 2226 }; 2227 2228 static int rpc_ping(struct rpc_clnt *clnt) 2229 { 2230 struct rpc_message msg = { 2231 .rpc_proc = &rpcproc_null, 2232 }; 2233 int err; 2234 msg.rpc_cred = authnull_ops.lookup_cred(NULL, NULL, 0); 2235 err = rpc_call_sync(clnt, &msg, RPC_TASK_SOFT | RPC_TASK_SOFTCONN); 2236 put_rpccred(msg.rpc_cred); 2237 return err; 2238 } 2239 2240 struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, int flags) 2241 { 2242 struct rpc_message msg = { 2243 .rpc_proc = &rpcproc_null, 2244 .rpc_cred = cred, 2245 }; 2246 struct rpc_task_setup task_setup_data = { 2247 .rpc_client = clnt, 2248 .rpc_message = &msg, 2249 .callback_ops = &rpc_default_ops, 2250 .flags = flags, 2251 }; 2252 return rpc_run_task(&task_setup_data); 2253 } 2254 EXPORT_SYMBOL_GPL(rpc_call_null); 2255 2256 #ifdef RPC_DEBUG 2257 static void rpc_show_header(void) 2258 { 2259 printk(KERN_INFO "-pid- flgs status -client- --rqstp- " 2260 "-timeout ---ops--\n"); 2261 } 2262 2263 static void rpc_show_task(const struct rpc_clnt *clnt, 2264 const struct rpc_task *task) 2265 { 2266 const char *rpc_waitq = "none"; 2267 2268 if (RPC_IS_QUEUED(task)) 2269 rpc_waitq = rpc_qname(task->tk_waitqueue); 2270 2271 printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%ps q:%s\n", 2272 task->tk_pid, task->tk_flags, task->tk_status, 2273 clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops, 2274 clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task), 2275 task->tk_action, rpc_waitq); 2276 } 2277 2278 void rpc_show_tasks(struct net *net) 2279 { 2280 struct rpc_clnt *clnt; 2281 struct rpc_task *task; 2282 int header = 0; 2283 struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); 2284 2285 spin_lock(&sn->rpc_client_lock); 2286 list_for_each_entry(clnt, &sn->all_clients, cl_clients) { 2287 spin_lock(&clnt->cl_lock); 2288 list_for_each_entry(task, &clnt->cl_tasks, tk_task) { 2289 if (!header) { 2290 rpc_show_header(); 2291 header++; 2292 } 2293 rpc_show_task(clnt, task); 2294 } 2295 spin_unlock(&clnt->cl_lock); 2296 } 2297 spin_unlock(&sn->rpc_client_lock); 2298 } 2299 #endif 2300