linux/net/sunrpc/clnt.c
<<
>>
Prefs
   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 *  NB: BSD uses a more intelligent approach to guessing when a request
  17 *  or reply has been lost by keeping the RTO estimate for each procedure.
  18 *  We currently make do with a constant timeout value.
  19 *
  20 *  Copyright (C) 1992,1993 Rick Sladkey <jrs@world.std.com>
  21 *  Copyright (C) 1995,1996 Olaf Kirch <okir@monad.swb.de>
  22 */
  23
  24#include <asm/system.h>
  25
  26#include <linux/module.h>
  27#include <linux/types.h>
  28#include <linux/kallsyms.h>
  29#include <linux/mm.h>
  30#include <linux/slab.h>
  31#include <linux/smp_lock.h>
  32#include <linux/utsname.h>
  33#include <linux/workqueue.h>
  34#include <linux/in6.h>
  35
  36#include <linux/sunrpc/clnt.h>
  37#include <linux/sunrpc/rpc_pipe_fs.h>
  38#include <linux/sunrpc/metrics.h>
  39
  40
  41#ifdef RPC_DEBUG
  42# define RPCDBG_FACILITY        RPCDBG_CALL
  43#endif
  44
  45#define dprint_status(t)                                        \
  46        dprintk("RPC: %5u %s (status %d)\n", t->tk_pid,         \
  47                        __func__, t->tk_status)
  48
  49/*
  50 * All RPC clients are linked into this list
  51 */
  52static LIST_HEAD(all_clients);
  53static DEFINE_SPINLOCK(rpc_client_lock);
  54
  55static DECLARE_WAIT_QUEUE_HEAD(destroy_wait);
  56
  57
  58static void     call_start(struct rpc_task *task);
  59static void     call_reserve(struct rpc_task *task);
  60static void     call_reserveresult(struct rpc_task *task);
  61static void     call_allocate(struct rpc_task *task);
  62static void     call_decode(struct rpc_task *task);
  63static void     call_bind(struct rpc_task *task);
  64static void     call_bind_status(struct rpc_task *task);
  65static void     call_transmit(struct rpc_task *task);
  66static void     call_status(struct rpc_task *task);
  67static void     call_transmit_status(struct rpc_task *task);
  68static void     call_refresh(struct rpc_task *task);
  69static void     call_refreshresult(struct rpc_task *task);
  70static void     call_timeout(struct rpc_task *task);
  71static void     call_connect(struct rpc_task *task);
  72static void     call_connect_status(struct rpc_task *task);
  73
  74static __be32   *rpc_encode_header(struct rpc_task *task);
  75static __be32   *rpc_verify_header(struct rpc_task *task);
  76static int      rpc_ping(struct rpc_clnt *clnt, int flags);
  77
  78static void rpc_register_client(struct rpc_clnt *clnt)
  79{
  80        spin_lock(&rpc_client_lock);
  81        list_add(&clnt->cl_clients, &all_clients);
  82        spin_unlock(&rpc_client_lock);
  83}
  84
  85static void rpc_unregister_client(struct rpc_clnt *clnt)
  86{
  87        spin_lock(&rpc_client_lock);
  88        list_del(&clnt->cl_clients);
  89        spin_unlock(&rpc_client_lock);
  90}
  91
  92static int
  93rpc_setup_pipedir(struct rpc_clnt *clnt, char *dir_name)
  94{
  95        static uint32_t clntid;
  96        int error;
  97
  98        clnt->cl_vfsmnt = ERR_PTR(-ENOENT);
  99        clnt->cl_dentry = ERR_PTR(-ENOENT);
 100        if (dir_name == NULL)
 101                return 0;
 102
 103        clnt->cl_vfsmnt = rpc_get_mount();
 104        if (IS_ERR(clnt->cl_vfsmnt))
 105                return PTR_ERR(clnt->cl_vfsmnt);
 106
 107        for (;;) {
 108                snprintf(clnt->cl_pathname, sizeof(clnt->cl_pathname),
 109                                "%s/clnt%x", dir_name,
 110                                (unsigned int)clntid++);
 111                clnt->cl_pathname[sizeof(clnt->cl_pathname) - 1] = '\0';
 112                clnt->cl_dentry = rpc_mkdir(clnt->cl_pathname, clnt);
 113                if (!IS_ERR(clnt->cl_dentry))
 114                        return 0;
 115                error = PTR_ERR(clnt->cl_dentry);
 116                if (error != -EEXIST) {
 117                        printk(KERN_INFO "RPC: Couldn't create pipefs entry %s, error %d\n",
 118                                        clnt->cl_pathname, error);
 119                        rpc_put_mount();
 120                        return error;
 121                }
 122        }
 123}
 124
 125static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt)
 126{
 127        struct rpc_program      *program = args->program;
 128        struct rpc_version      *version;
 129        struct rpc_clnt         *clnt = NULL;
 130        struct rpc_auth         *auth;
 131        int err;
 132        size_t len;
 133
 134        /* sanity check the name before trying to print it */
 135        err = -EINVAL;
 136        len = strlen(args->servername);
 137        if (len > RPC_MAXNETNAMELEN)
 138                goto out_no_rpciod;
 139        len++;
 140
 141        dprintk("RPC:       creating %s client for %s (xprt %p)\n",
 142                        program->name, args->servername, xprt);
 143
 144        err = rpciod_up();
 145        if (err)
 146                goto out_no_rpciod;
 147        err = -EINVAL;
 148        if (!xprt)
 149                goto out_no_xprt;
 150
 151        if (args->version >= program->nrvers)
 152                goto out_err;
 153        version = program->version[args->version];
 154        if (version == NULL)
 155                goto out_err;
 156
 157        err = -ENOMEM;
 158        clnt = kzalloc(sizeof(*clnt), GFP_KERNEL);
 159        if (!clnt)
 160                goto out_err;
 161        clnt->cl_parent = clnt;
 162
 163        clnt->cl_server = clnt->cl_inline_name;
 164        if (len > sizeof(clnt->cl_inline_name)) {
 165                char *buf = kmalloc(len, GFP_KERNEL);
 166                if (buf != NULL)
 167                        clnt->cl_server = buf;
 168                else
 169                        len = sizeof(clnt->cl_inline_name);
 170        }
 171        strlcpy(clnt->cl_server, args->servername, len);
 172
 173        clnt->cl_xprt     = xprt;
 174        clnt->cl_procinfo = version->procs;
 175        clnt->cl_maxproc  = version->nrprocs;
 176        clnt->cl_protname = program->name;
 177        clnt->cl_prog     = args->prognumber ? : program->number;
 178        clnt->cl_vers     = version->number;
 179        clnt->cl_stats    = program->stats;
 180        clnt->cl_metrics  = rpc_alloc_iostats(clnt);
 181        err = -ENOMEM;
 182        if (clnt->cl_metrics == NULL)
 183                goto out_no_stats;
 184        clnt->cl_program  = program;
 185        INIT_LIST_HEAD(&clnt->cl_tasks);
 186        spin_lock_init(&clnt->cl_lock);
 187
 188        if (!xprt_bound(clnt->cl_xprt))
 189                clnt->cl_autobind = 1;
 190
 191        clnt->cl_timeout = xprt->timeout;
 192        if (args->timeout != NULL) {
 193                memcpy(&clnt->cl_timeout_default, args->timeout,
 194                                sizeof(clnt->cl_timeout_default));
 195                clnt->cl_timeout = &clnt->cl_timeout_default;
 196        }
 197
 198        clnt->cl_rtt = &clnt->cl_rtt_default;
 199        rpc_init_rtt(&clnt->cl_rtt_default, clnt->cl_timeout->to_initval);
 200        clnt->cl_principal = NULL;
 201        if (args->client_name) {
 202                clnt->cl_principal = kstrdup(args->client_name, GFP_KERNEL);
 203                if (!clnt->cl_principal)
 204                        goto out_no_principal;
 205        }
 206
 207        kref_init(&clnt->cl_kref);
 208
 209        err = rpc_setup_pipedir(clnt, program->pipe_dir_name);
 210        if (err < 0)
 211                goto out_no_path;
 212
 213        auth = rpcauth_create(args->authflavor, clnt);
 214        if (IS_ERR(auth)) {
 215                printk(KERN_INFO "RPC: Couldn't create auth handle (flavor %u)\n",
 216                                args->authflavor);
 217                err = PTR_ERR(auth);
 218                goto out_no_auth;
 219        }
 220
 221        /* save the nodename */
 222        clnt->cl_nodelen = strlen(init_utsname()->nodename);
 223        if (clnt->cl_nodelen > UNX_MAXNODENAME)
 224                clnt->cl_nodelen = UNX_MAXNODENAME;
 225        memcpy(clnt->cl_nodename, init_utsname()->nodename, clnt->cl_nodelen);
 226        rpc_register_client(clnt);
 227        return clnt;
 228
 229out_no_auth:
 230        if (!IS_ERR(clnt->cl_dentry)) {
 231                rpc_rmdir(clnt->cl_dentry);
 232                rpc_put_mount();
 233        }
 234out_no_path:
 235        kfree(clnt->cl_principal);
 236out_no_principal:
 237        rpc_free_iostats(clnt->cl_metrics);
 238out_no_stats:
 239        if (clnt->cl_server != clnt->cl_inline_name)
 240                kfree(clnt->cl_server);
 241        kfree(clnt);
 242out_err:
 243        xprt_put(xprt);
 244out_no_xprt:
 245        rpciod_down();
 246out_no_rpciod:
 247        return ERR_PTR(err);
 248}
 249
 250/*
 251 * rpc_create - create an RPC client and transport with one call
 252 * @args: rpc_clnt create argument structure
 253 *
 254 * Creates and initializes an RPC transport and an RPC client.
 255 *
 256 * It can ping the server in order to determine if it is up, and to see if
 257 * it supports this program and version.  RPC_CLNT_CREATE_NOPING disables
 258 * this behavior so asynchronous tasks can also use rpc_create.
 259 */
 260struct rpc_clnt *rpc_create(struct rpc_create_args *args)
 261{
 262        struct rpc_xprt *xprt;
 263        struct rpc_clnt *clnt;
 264        struct xprt_create xprtargs = {
 265                .ident = args->protocol,
 266                .srcaddr = args->saddress,
 267                .dstaddr = args->address,
 268                .addrlen = args->addrsize,
 269        };
 270        char servername[48];
 271
 272        /*
 273         * If the caller chooses not to specify a hostname, whip
 274         * up a string representation of the passed-in address.
 275         */
 276        if (args->servername == NULL) {
 277                servername[0] = '\0';
 278                switch (args->address->sa_family) {
 279                case AF_INET: {
 280                        struct sockaddr_in *sin =
 281                                        (struct sockaddr_in *)args->address;
 282                        snprintf(servername, sizeof(servername), "%pI4",
 283                                 &sin->sin_addr.s_addr);
 284                        break;
 285                }
 286                case AF_INET6: {
 287                        struct sockaddr_in6 *sin =
 288                                        (struct sockaddr_in6 *)args->address;
 289                        snprintf(servername, sizeof(servername), "%pI6",
 290                                 &sin->sin6_addr);
 291                        break;
 292                }
 293                default:
 294                        /* caller wants default server name, but
 295                         * address family isn't recognized. */
 296                        return ERR_PTR(-EINVAL);
 297                }
 298                args->servername = servername;
 299        }
 300
 301        xprt = xprt_create_transport(&xprtargs);
 302        if (IS_ERR(xprt))
 303                return (struct rpc_clnt *)xprt;
 304
 305        /*
 306         * By default, kernel RPC client connects from a reserved port.
 307         * CAP_NET_BIND_SERVICE will not be set for unprivileged requesters,
 308         * but it is always enabled for rpciod, which handles the connect
 309         * operation.
 310         */
 311        xprt->resvport = 1;
 312        if (args->flags & RPC_CLNT_CREATE_NONPRIVPORT)
 313                xprt->resvport = 0;
 314
 315        clnt = rpc_new_client(args, xprt);
 316        if (IS_ERR(clnt))
 317                return clnt;
 318
 319        if (!(args->flags & RPC_CLNT_CREATE_NOPING)) {
 320                int err = rpc_ping(clnt, RPC_TASK_SOFT);
 321                if (err != 0) {
 322                        rpc_shutdown_client(clnt);
 323                        return ERR_PTR(err);
 324                }
 325        }
 326
 327        clnt->cl_softrtry = 1;
 328        if (args->flags & RPC_CLNT_CREATE_HARDRTRY)
 329                clnt->cl_softrtry = 0;
 330
 331        if (args->flags & RPC_CLNT_CREATE_AUTOBIND)
 332                clnt->cl_autobind = 1;
 333        if (args->flags & RPC_CLNT_CREATE_DISCRTRY)
 334                clnt->cl_discrtry = 1;
 335        if (!(args->flags & RPC_CLNT_CREATE_QUIET))
 336                clnt->cl_chatty = 1;
 337
 338        return clnt;
 339}
 340EXPORT_SYMBOL_GPL(rpc_create);
 341
 342/*
 343 * This function clones the RPC client structure. It allows us to share the
 344 * same transport while varying parameters such as the authentication
 345 * flavour.
 346 */
 347struct rpc_clnt *
 348rpc_clone_client(struct rpc_clnt *clnt)
 349{
 350        struct rpc_clnt *new;
 351        int err = -ENOMEM;
 352
 353        new = kmemdup(clnt, sizeof(*new), GFP_KERNEL);
 354        if (!new)
 355                goto out_no_clnt;
 356        new->cl_parent = clnt;
 357        /* Turn off autobind on clones */
 358        new->cl_autobind = 0;
 359        INIT_LIST_HEAD(&new->cl_tasks);
 360        spin_lock_init(&new->cl_lock);
 361        rpc_init_rtt(&new->cl_rtt_default, clnt->cl_timeout->to_initval);
 362        new->cl_metrics = rpc_alloc_iostats(clnt);
 363        if (new->cl_metrics == NULL)
 364                goto out_no_stats;
 365        if (clnt->cl_principal) {
 366                new->cl_principal = kstrdup(clnt->cl_principal, GFP_KERNEL);
 367                if (new->cl_principal == NULL)
 368                        goto out_no_principal;
 369        }
 370        kref_init(&new->cl_kref);
 371        err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name);
 372        if (err != 0)
 373                goto out_no_path;
 374        if (new->cl_auth)
 375                atomic_inc(&new->cl_auth->au_count);
 376        xprt_get(clnt->cl_xprt);
 377        kref_get(&clnt->cl_kref);
 378        rpc_register_client(new);
 379        rpciod_up();
 380        return new;
 381out_no_path:
 382        kfree(new->cl_principal);
 383out_no_principal:
 384        rpc_free_iostats(new->cl_metrics);
 385out_no_stats:
 386        kfree(new);
 387out_no_clnt:
 388        dprintk("RPC:       %s: returned error %d\n", __func__, err);
 389        return ERR_PTR(err);
 390}
 391EXPORT_SYMBOL_GPL(rpc_clone_client);
 392
 393/*
 394 * Properly shut down an RPC client, terminating all outstanding
 395 * requests.
 396 */
 397void rpc_shutdown_client(struct rpc_clnt *clnt)
 398{
 399        dprintk("RPC:       shutting down %s client for %s\n",
 400                        clnt->cl_protname, clnt->cl_server);
 401
 402        while (!list_empty(&clnt->cl_tasks)) {
 403                rpc_killall_tasks(clnt);
 404                wait_event_timeout(destroy_wait,
 405                        list_empty(&clnt->cl_tasks), 1*HZ);
 406        }
 407
 408        rpc_release_client(clnt);
 409}
 410EXPORT_SYMBOL_GPL(rpc_shutdown_client);
 411
 412/*
 413 * Free an RPC client
 414 */
 415static void
 416rpc_free_client(struct kref *kref)
 417{
 418        struct rpc_clnt *clnt = container_of(kref, struct rpc_clnt, cl_kref);
 419
 420        dprintk("RPC:       destroying %s client for %s\n",
 421                        clnt->cl_protname, clnt->cl_server);
 422        if (!IS_ERR(clnt->cl_dentry)) {
 423                rpc_rmdir(clnt->cl_dentry);
 424                rpc_put_mount();
 425        }
 426        if (clnt->cl_parent != clnt) {
 427                rpc_release_client(clnt->cl_parent);
 428                goto out_free;
 429        }
 430        if (clnt->cl_server != clnt->cl_inline_name)
 431                kfree(clnt->cl_server);
 432out_free:
 433        rpc_unregister_client(clnt);
 434        rpc_free_iostats(clnt->cl_metrics);
 435        kfree(clnt->cl_principal);
 436        clnt->cl_metrics = NULL;
 437        xprt_put(clnt->cl_xprt);
 438        rpciod_down();
 439        kfree(clnt);
 440}
 441
 442/*
 443 * Free an RPC client
 444 */
 445static void
 446rpc_free_auth(struct kref *kref)
 447{
 448        struct rpc_clnt *clnt = container_of(kref, struct rpc_clnt, cl_kref);
 449
 450        if (clnt->cl_auth == NULL) {
 451                rpc_free_client(kref);
 452                return;
 453        }
 454
 455        /*
 456         * Note: RPCSEC_GSS may need to send NULL RPC calls in order to
 457         *       release remaining GSS contexts. This mechanism ensures
 458         *       that it can do so safely.
 459         */
 460        kref_init(kref);
 461        rpcauth_release(clnt->cl_auth);
 462        clnt->cl_auth = NULL;
 463        kref_put(kref, rpc_free_client);
 464}
 465
 466/*
 467 * Release reference to the RPC client
 468 */
 469void
 470rpc_release_client(struct rpc_clnt *clnt)
 471{
 472        dprintk("RPC:       rpc_release_client(%p)\n", clnt);
 473
 474        if (list_empty(&clnt->cl_tasks))
 475                wake_up(&destroy_wait);
 476        kref_put(&clnt->cl_kref, rpc_free_auth);
 477}
 478
 479/**
 480 * rpc_bind_new_program - bind a new RPC program to an existing client
 481 * @old: old rpc_client
 482 * @program: rpc program to set
 483 * @vers: rpc program version
 484 *
 485 * Clones the rpc client and sets up a new RPC program. This is mainly
 486 * of use for enabling different RPC programs to share the same transport.
 487 * The Sun NFSv2/v3 ACL protocol can do this.
 488 */
 489struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *old,
 490                                      struct rpc_program *program,
 491                                      u32 vers)
 492{
 493        struct rpc_clnt *clnt;
 494        struct rpc_version *version;
 495        int err;
 496
 497        BUG_ON(vers >= program->nrvers || !program->version[vers]);
 498        version = program->version[vers];
 499        clnt = rpc_clone_client(old);
 500        if (IS_ERR(clnt))
 501                goto out;
 502        clnt->cl_procinfo = version->procs;
 503        clnt->cl_maxproc  = version->nrprocs;
 504        clnt->cl_protname = program->name;
 505        clnt->cl_prog     = program->number;
 506        clnt->cl_vers     = version->number;
 507        clnt->cl_stats    = program->stats;
 508        err = rpc_ping(clnt, RPC_TASK_SOFT);
 509        if (err != 0) {
 510                rpc_shutdown_client(clnt);
 511                clnt = ERR_PTR(err);
 512        }
 513out:
 514        return clnt;
 515}
 516EXPORT_SYMBOL_GPL(rpc_bind_new_program);
 517
 518/*
 519 * Default callback for async RPC calls
 520 */
 521static void
 522rpc_default_callback(struct rpc_task *task, void *data)
 523{
 524}
 525
 526static const struct rpc_call_ops rpc_default_ops = {
 527        .rpc_call_done = rpc_default_callback,
 528};
 529
 530/**
 531 * rpc_run_task - Allocate a new RPC task, then run rpc_execute against it
 532 * @task_setup_data: pointer to task initialisation data
 533 */
 534struct rpc_task *rpc_run_task(const struct rpc_task_setup *task_setup_data)
 535{
 536        struct rpc_task *task, *ret;
 537
 538        task = rpc_new_task(task_setup_data);
 539        if (task == NULL) {
 540                rpc_release_calldata(task_setup_data->callback_ops,
 541                                task_setup_data->callback_data);
 542                ret = ERR_PTR(-ENOMEM);
 543                goto out;
 544        }
 545
 546        if (task->tk_status != 0) {
 547                ret = ERR_PTR(task->tk_status);
 548                rpc_put_task(task);
 549                goto out;
 550        }
 551        atomic_inc(&task->tk_count);
 552        rpc_execute(task);
 553        ret = task;
 554out:
 555        return ret;
 556}
 557EXPORT_SYMBOL_GPL(rpc_run_task);
 558
 559/**
 560 * rpc_call_sync - Perform a synchronous RPC call
 561 * @clnt: pointer to RPC client
 562 * @msg: RPC call parameters
 563 * @flags: RPC call flags
 564 */
 565int rpc_call_sync(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags)
 566{
 567        struct rpc_task *task;
 568        struct rpc_task_setup task_setup_data = {
 569                .rpc_client = clnt,
 570                .rpc_message = msg,
 571                .callback_ops = &rpc_default_ops,
 572                .flags = flags,
 573        };
 574        int status;
 575
 576        BUG_ON(flags & RPC_TASK_ASYNC);
 577
 578        task = rpc_run_task(&task_setup_data);
 579        if (IS_ERR(task))
 580                return PTR_ERR(task);
 581        status = task->tk_status;
 582        rpc_put_task(task);
 583        return status;
 584}
 585EXPORT_SYMBOL_GPL(rpc_call_sync);
 586
 587/**
 588 * rpc_call_async - Perform an asynchronous RPC call
 589 * @clnt: pointer to RPC client
 590 * @msg: RPC call parameters
 591 * @flags: RPC call flags
 592 * @tk_ops: RPC call ops
 593 * @data: user call data
 594 */
 595int
 596rpc_call_async(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags,
 597               const struct rpc_call_ops *tk_ops, void *data)
 598{
 599        struct rpc_task *task;
 600        struct rpc_task_setup task_setup_data = {
 601                .rpc_client = clnt,
 602                .rpc_message = msg,
 603                .callback_ops = tk_ops,
 604                .callback_data = data,
 605                .flags = flags|RPC_TASK_ASYNC,
 606        };
 607
 608        task = rpc_run_task(&task_setup_data);
 609        if (IS_ERR(task))
 610                return PTR_ERR(task);
 611        rpc_put_task(task);
 612        return 0;
 613}
 614EXPORT_SYMBOL_GPL(rpc_call_async);
 615
 616void
 617rpc_call_start(struct rpc_task *task)
 618{
 619        task->tk_action = call_start;
 620}
 621EXPORT_SYMBOL_GPL(rpc_call_start);
 622
 623/**
 624 * rpc_peeraddr - extract remote peer address from clnt's xprt
 625 * @clnt: RPC client structure
 626 * @buf: target buffer
 627 * @bufsize: length of target buffer
 628 *
 629 * Returns the number of bytes that are actually in the stored address.
 630 */
 631size_t rpc_peeraddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize)
 632{
 633        size_t bytes;
 634        struct rpc_xprt *xprt = clnt->cl_xprt;
 635
 636        bytes = sizeof(xprt->addr);
 637        if (bytes > bufsize)
 638                bytes = bufsize;
 639        memcpy(buf, &clnt->cl_xprt->addr, bytes);
 640        return xprt->addrlen;
 641}
 642EXPORT_SYMBOL_GPL(rpc_peeraddr);
 643
 644/**
 645 * rpc_peeraddr2str - return remote peer address in printable format
 646 * @clnt: RPC client structure
 647 * @format: address format
 648 *
 649 */
 650const char *rpc_peeraddr2str(struct rpc_clnt *clnt,
 651                             enum rpc_display_format_t format)
 652{
 653        struct rpc_xprt *xprt = clnt->cl_xprt;
 654
 655        if (xprt->address_strings[format] != NULL)
 656                return xprt->address_strings[format];
 657        else
 658                return "unprintable";
 659}
 660EXPORT_SYMBOL_GPL(rpc_peeraddr2str);
 661
 662void
 663rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize)
 664{
 665        struct rpc_xprt *xprt = clnt->cl_xprt;
 666        if (xprt->ops->set_buffer_size)
 667                xprt->ops->set_buffer_size(xprt, sndsize, rcvsize);
 668}
 669EXPORT_SYMBOL_GPL(rpc_setbufsize);
 670
 671/*
 672 * Return size of largest payload RPC client can support, in bytes
 673 *
 674 * For stream transports, this is one RPC record fragment (see RFC
 675 * 1831), as we don't support multi-record requests yet.  For datagram
 676 * transports, this is the size of an IP packet minus the IP, UDP, and
 677 * RPC header sizes.
 678 */
 679size_t rpc_max_payload(struct rpc_clnt *clnt)
 680{
 681        return clnt->cl_xprt->max_payload;
 682}
 683EXPORT_SYMBOL_GPL(rpc_max_payload);
 684
 685/**
 686 * rpc_force_rebind - force transport to check that remote port is unchanged
 687 * @clnt: client to rebind
 688 *
 689 */
 690void rpc_force_rebind(struct rpc_clnt *clnt)
 691{
 692        if (clnt->cl_autobind)
 693                xprt_clear_bound(clnt->cl_xprt);
 694}
 695EXPORT_SYMBOL_GPL(rpc_force_rebind);
 696
 697/*
 698 * Restart an (async) RPC call. Usually called from within the
 699 * exit handler.
 700 */
 701void
 702rpc_restart_call(struct rpc_task *task)
 703{
 704        if (RPC_ASSASSINATED(task))
 705                return;
 706
 707        task->tk_action = call_start;
 708}
 709EXPORT_SYMBOL_GPL(rpc_restart_call);
 710
 711#ifdef RPC_DEBUG
 712static const char *rpc_proc_name(const struct rpc_task *task)
 713{
 714        const struct rpc_procinfo *proc = task->tk_msg.rpc_proc;
 715
 716        if (proc) {
 717                if (proc->p_name)
 718                        return proc->p_name;
 719                else
 720                        return "NULL";
 721        } else
 722                return "no proc";
 723}
 724#endif
 725
 726/*
 727 * 0.  Initial state
 728 *
 729 *     Other FSM states can be visited zero or more times, but
 730 *     this state is visited exactly once for each RPC.
 731 */
 732static void
 733call_start(struct rpc_task *task)
 734{
 735        struct rpc_clnt *clnt = task->tk_client;
 736
 737        dprintk("RPC: %5u call_start %s%d proc %s (%s)\n", task->tk_pid,
 738                        clnt->cl_protname, clnt->cl_vers,
 739                        rpc_proc_name(task),
 740                        (RPC_IS_ASYNC(task) ? "async" : "sync"));
 741
 742        /* Increment call count */
 743        task->tk_msg.rpc_proc->p_count++;
 744        clnt->cl_stats->rpccnt++;
 745        task->tk_action = call_reserve;
 746}
 747
 748/*
 749 * 1.   Reserve an RPC call slot
 750 */
 751static void
 752call_reserve(struct rpc_task *task)
 753{
 754        dprint_status(task);
 755
 756        if (!rpcauth_uptodatecred(task)) {
 757                task->tk_action = call_refresh;
 758                return;
 759        }
 760
 761        task->tk_status  = 0;
 762        task->tk_action  = call_reserveresult;
 763        xprt_reserve(task);
 764}
 765
 766/*
 767 * 1b.  Grok the result of xprt_reserve()
 768 */
 769static void
 770call_reserveresult(struct rpc_task *task)
 771{
 772        int status = task->tk_status;
 773
 774        dprint_status(task);
 775
 776        /*
 777         * After a call to xprt_reserve(), we must have either
 778         * a request slot or else an error status.
 779         */
 780        task->tk_status = 0;
 781        if (status >= 0) {
 782                if (task->tk_rqstp) {
 783                        task->tk_action = call_allocate;
 784                        return;
 785                }
 786
 787                printk(KERN_ERR "%s: status=%d, but no request slot, exiting\n",
 788                                __func__, status);
 789                rpc_exit(task, -EIO);
 790                return;
 791        }
 792
 793        /*
 794         * Even though there was an error, we may have acquired
 795         * a request slot somehow.  Make sure not to leak it.
 796         */
 797        if (task->tk_rqstp) {
 798                printk(KERN_ERR "%s: status=%d, request allocated anyway\n",
 799                                __func__, status);
 800                xprt_release(task);
 801        }
 802
 803        switch (status) {
 804        case -EAGAIN:   /* woken up; retry */
 805                task->tk_action = call_reserve;
 806                return;
 807        case -EIO:      /* probably a shutdown */
 808                break;
 809        default:
 810                printk(KERN_ERR "%s: unrecognized error %d, exiting\n",
 811                                __func__, status);
 812                break;
 813        }
 814        rpc_exit(task, status);
 815}
 816
 817/*
 818 * 2.   Allocate the buffer. For details, see sched.c:rpc_malloc.
 819 *      (Note: buffer memory is freed in xprt_release).
 820 */
 821static void
 822call_allocate(struct rpc_task *task)
 823{
 824        unsigned int slack = task->tk_msg.rpc_cred->cr_auth->au_cslack;
 825        struct rpc_rqst *req = task->tk_rqstp;
 826        struct rpc_xprt *xprt = task->tk_xprt;
 827        struct rpc_procinfo *proc = task->tk_msg.rpc_proc;
 828
 829        dprint_status(task);
 830
 831        task->tk_status = 0;
 832        task->tk_action = call_bind;
 833
 834        if (req->rq_buffer)
 835                return;
 836
 837        if (proc->p_proc != 0) {
 838                BUG_ON(proc->p_arglen == 0);
 839                if (proc->p_decode != NULL)
 840                        BUG_ON(proc->p_replen == 0);
 841        }
 842
 843        /*
 844         * Calculate the size (in quads) of the RPC call
 845         * and reply headers, and convert both values
 846         * to byte sizes.
 847         */
 848        req->rq_callsize = RPC_CALLHDRSIZE + (slack << 1) + proc->p_arglen;
 849        req->rq_callsize <<= 2;
 850        req->rq_rcvsize = RPC_REPHDRSIZE + slack + proc->p_replen;
 851        req->rq_rcvsize <<= 2;
 852
 853        req->rq_buffer = xprt->ops->buf_alloc(task,
 854                                        req->rq_callsize + req->rq_rcvsize);
 855        if (req->rq_buffer != NULL)
 856                return;
 857
 858        dprintk("RPC: %5u rpc_buffer allocation failed\n", task->tk_pid);
 859
 860        if (RPC_IS_ASYNC(task) || !signalled()) {
 861                task->tk_action = call_allocate;
 862                rpc_delay(task, HZ>>4);
 863                return;
 864        }
 865
 866        rpc_exit(task, -ERESTARTSYS);
 867}
 868
 869static inline int
 870rpc_task_need_encode(struct rpc_task *task)
 871{
 872        return task->tk_rqstp->rq_snd_buf.len == 0;
 873}
 874
 875static inline void
 876rpc_task_force_reencode(struct rpc_task *task)
 877{
 878        task->tk_rqstp->rq_snd_buf.len = 0;
 879}
 880
 881static inline void
 882rpc_xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
 883{
 884        buf->head[0].iov_base = start;
 885        buf->head[0].iov_len = len;
 886        buf->tail[0].iov_len = 0;
 887        buf->page_len = 0;
 888        buf->flags = 0;
 889        buf->len = 0;
 890        buf->buflen = len;
 891}
 892
 893/*
 894 * 3.   Encode arguments of an RPC call
 895 */
 896static void
 897rpc_xdr_encode(struct rpc_task *task)
 898{
 899        struct rpc_rqst *req = task->tk_rqstp;
 900        kxdrproc_t      encode;
 901        __be32          *p;
 902
 903        dprint_status(task);
 904
 905        rpc_xdr_buf_init(&req->rq_snd_buf,
 906                         req->rq_buffer,
 907                         req->rq_callsize);
 908        rpc_xdr_buf_init(&req->rq_rcv_buf,
 909                         (char *)req->rq_buffer + req->rq_callsize,
 910                         req->rq_rcvsize);
 911
 912        p = rpc_encode_header(task);
 913        if (p == NULL) {
 914                printk(KERN_INFO "RPC: couldn't encode RPC header, exit EIO\n");
 915                rpc_exit(task, -EIO);
 916                return;
 917        }
 918
 919        encode = task->tk_msg.rpc_proc->p_encode;
 920        if (encode == NULL)
 921                return;
 922
 923        task->tk_status = rpcauth_wrap_req(task, encode, req, p,
 924                        task->tk_msg.rpc_argp);
 925}
 926
 927/*
 928 * 4.   Get the server port number if not yet set
 929 */
 930static void
 931call_bind(struct rpc_task *task)
 932{
 933        struct rpc_xprt *xprt = task->tk_xprt;
 934
 935        dprint_status(task);
 936
 937        task->tk_action = call_connect;
 938        if (!xprt_bound(xprt)) {
 939                task->tk_action = call_bind_status;
 940                task->tk_timeout = xprt->bind_timeout;
 941                xprt->ops->rpcbind(task);
 942        }
 943}
 944
 945/*
 946 * 4a.  Sort out bind result
 947 */
 948static void
 949call_bind_status(struct rpc_task *task)
 950{
 951        int status = -EIO;
 952
 953        if (task->tk_status >= 0) {
 954                dprint_status(task);
 955                task->tk_status = 0;
 956                task->tk_action = call_connect;
 957                return;
 958        }
 959
 960        switch (task->tk_status) {
 961        case -ENOMEM:
 962                dprintk("RPC: %5u rpcbind out of memory\n", task->tk_pid);
 963                rpc_delay(task, HZ >> 2);
 964                goto retry_timeout;
 965        case -EACCES:
 966                dprintk("RPC: %5u remote rpcbind: RPC program/version "
 967                                "unavailable\n", task->tk_pid);
 968                /* fail immediately if this is an RPC ping */
 969                if (task->tk_msg.rpc_proc->p_proc == 0) {
 970                        status = -EOPNOTSUPP;
 971                        break;
 972                }
 973                rpc_delay(task, 3*HZ);
 974                goto retry_timeout;
 975        case -ETIMEDOUT:
 976                dprintk("RPC: %5u rpcbind request timed out\n",
 977                                task->tk_pid);
 978                goto retry_timeout;
 979        case -EPFNOSUPPORT:
 980                /* server doesn't support any rpcbind version we know of */
 981                dprintk("RPC: %5u remote rpcbind service unavailable\n",
 982                                task->tk_pid);
 983                break;
 984        case -EPROTONOSUPPORT:
 985                dprintk("RPC: %5u remote rpcbind version unavailable, retrying\n",
 986                                task->tk_pid);
 987                task->tk_status = 0;
 988                task->tk_action = call_bind;
 989                return;
 990        default:
 991                dprintk("RPC: %5u unrecognized rpcbind error (%d)\n",
 992                                task->tk_pid, -task->tk_status);
 993        }
 994
 995        rpc_exit(task, status);
 996        return;
 997
 998retry_timeout:
 999        task->tk_action = call_timeout;
1000}
1001
1002/*
1003 * 4b.  Connect to the RPC server
1004 */
1005static void
1006call_connect(struct rpc_task *task)
1007{
1008        struct rpc_xprt *xprt = task->tk_xprt;
1009
1010        dprintk("RPC: %5u call_connect xprt %p %s connected\n",
1011                        task->tk_pid, xprt,
1012                        (xprt_connected(xprt) ? "is" : "is not"));
1013
1014        task->tk_action = call_transmit;
1015        if (!xprt_connected(xprt)) {
1016                task->tk_action = call_connect_status;
1017                if (task->tk_status < 0)
1018                        return;
1019                xprt_connect(task);
1020        }
1021}
1022
1023/*
1024 * 4c.  Sort out connect result
1025 */
1026static void
1027call_connect_status(struct rpc_task *task)
1028{
1029        struct rpc_clnt *clnt = task->tk_client;
1030        int status = task->tk_status;
1031
1032        dprint_status(task);
1033
1034        task->tk_status = 0;
1035        if (status >= 0 || status == -EAGAIN) {
1036                clnt->cl_stats->netreconn++;
1037                task->tk_action = call_transmit;
1038                return;
1039        }
1040
1041        switch (status) {
1042                /* if soft mounted, test if we've timed out */
1043        case -ETIMEDOUT:
1044                task->tk_action = call_timeout;
1045                break;
1046        default:
1047                rpc_exit(task, -EIO);
1048        }
1049}
1050
1051/*
1052 * 5.   Transmit the RPC request, and wait for reply
1053 */
1054static void
1055call_transmit(struct rpc_task *task)
1056{
1057        dprint_status(task);
1058
1059        task->tk_action = call_status;
1060        if (task->tk_status < 0)
1061                return;
1062        task->tk_status = xprt_prepare_transmit(task);
1063        if (task->tk_status != 0)
1064                return;
1065        task->tk_action = call_transmit_status;
1066        /* Encode here so that rpcsec_gss can use correct sequence number. */
1067        if (rpc_task_need_encode(task)) {
1068                BUG_ON(task->tk_rqstp->rq_bytes_sent != 0);
1069                rpc_xdr_encode(task);
1070                /* Did the encode result in an error condition? */
1071                if (task->tk_status != 0) {
1072                        /* Was the error nonfatal? */
1073                        if (task->tk_status == -EAGAIN)
1074                                rpc_delay(task, HZ >> 4);
1075                        else
1076                                rpc_exit(task, task->tk_status);
1077                        return;
1078                }
1079        }
1080        xprt_transmit(task);
1081        if (task->tk_status < 0)
1082                return;
1083        /*
1084         * On success, ensure that we call xprt_end_transmit() before sleeping
1085         * in order to allow access to the socket to other RPC requests.
1086         */
1087        call_transmit_status(task);
1088        if (task->tk_msg.rpc_proc->p_decode != NULL)
1089                return;
1090        task->tk_action = rpc_exit_task;
1091        rpc_wake_up_queued_task(&task->tk_xprt->pending, task);
1092}
1093
1094/*
1095 * 5a.  Handle cleanup after a transmission
1096 */
1097static void
1098call_transmit_status(struct rpc_task *task)
1099{
1100        task->tk_action = call_status;
1101        switch (task->tk_status) {
1102        case -EAGAIN:
1103                break;
1104        default:
1105                xprt_end_transmit(task);
1106                /*
1107                 * Special cases: if we've been waiting on the
1108                 * socket's write_space() callback, or if the
1109                 * socket just returned a connection error,
1110                 * then hold onto the transport lock.
1111                 */
1112        case -ECONNREFUSED:
1113        case -ECONNRESET:
1114        case -ENOTCONN:
1115        case -EHOSTDOWN:
1116        case -EHOSTUNREACH:
1117        case -ENETUNREACH:
1118        case -EPIPE:
1119                rpc_task_force_reencode(task);
1120        }
1121}
1122
1123/*
1124 * 6.   Sort out the RPC call status
1125 */
1126static void
1127call_status(struct rpc_task *task)
1128{
1129        struct rpc_clnt *clnt = task->tk_client;
1130        struct rpc_rqst *req = task->tk_rqstp;
1131        int             status;
1132
1133        if (req->rq_received > 0 && !req->rq_bytes_sent)
1134                task->tk_status = req->rq_received;
1135
1136        dprint_status(task);
1137
1138        status = task->tk_status;
1139        if (status >= 0) {
1140                task->tk_action = call_decode;
1141                return;
1142        }
1143
1144        task->tk_status = 0;
1145        switch(status) {
1146        case -EHOSTDOWN:
1147        case -EHOSTUNREACH:
1148        case -ENETUNREACH:
1149                /*
1150                 * Delay any retries for 3 seconds, then handle as if it
1151                 * were a timeout.
1152                 */
1153                rpc_delay(task, 3*HZ);
1154        case -ETIMEDOUT:
1155                task->tk_action = call_timeout;
1156                if (task->tk_client->cl_discrtry)
1157                        xprt_conditional_disconnect(task->tk_xprt,
1158                                        req->rq_connect_cookie);
1159                break;
1160        case -ECONNRESET:
1161        case -ECONNREFUSED:
1162                rpc_force_rebind(clnt);
1163                rpc_delay(task, 3*HZ);
1164        case -EPIPE:
1165        case -ENOTCONN:
1166                task->tk_action = call_bind;
1167                break;
1168        case -EAGAIN:
1169                task->tk_action = call_transmit;
1170                break;
1171        case -EIO:
1172                /* shutdown or soft timeout */
1173                rpc_exit(task, status);
1174                break;
1175        default:
1176                if (clnt->cl_chatty)
1177                        printk("%s: RPC call returned error %d\n",
1178                               clnt->cl_protname, -status);
1179                rpc_exit(task, status);
1180        }
1181}
1182
1183/*
1184 * 6a.  Handle RPC timeout
1185 *      We do not release the request slot, so we keep using the
1186 *      same XID for all retransmits.
1187 */
1188static void
1189call_timeout(struct rpc_task *task)
1190{
1191        struct rpc_clnt *clnt = task->tk_client;
1192
1193        if (xprt_adjust_timeout(task->tk_rqstp) == 0) {
1194                dprintk("RPC: %5u call_timeout (minor)\n", task->tk_pid);
1195                goto retry;
1196        }
1197
1198        dprintk("RPC: %5u call_timeout (major)\n", task->tk_pid);
1199        task->tk_timeouts++;
1200
1201        if (RPC_IS_SOFT(task)) {
1202                if (clnt->cl_chatty)
1203                        printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
1204                                clnt->cl_protname, clnt->cl_server);
1205                rpc_exit(task, -EIO);
1206                return;
1207        }
1208
1209        if (!(task->tk_flags & RPC_CALL_MAJORSEEN)) {
1210                task->tk_flags |= RPC_CALL_MAJORSEEN;
1211                if (clnt->cl_chatty)
1212                        printk(KERN_NOTICE "%s: server %s not responding, still trying\n",
1213                        clnt->cl_protname, clnt->cl_server);
1214        }
1215        rpc_force_rebind(clnt);
1216        /*
1217         * Did our request time out due to an RPCSEC_GSS out-of-sequence
1218         * event? RFC2203 requires the server to drop all such requests.
1219         */
1220        rpcauth_invalcred(task);
1221
1222retry:
1223        clnt->cl_stats->rpcretrans++;
1224        task->tk_action = call_bind;
1225        task->tk_status = 0;
1226}
1227
1228/*
1229 * 7.   Decode the RPC reply
1230 */
1231static void
1232call_decode(struct rpc_task *task)
1233{
1234        struct rpc_clnt *clnt = task->tk_client;
1235        struct rpc_rqst *req = task->tk_rqstp;
1236        kxdrproc_t      decode = task->tk_msg.rpc_proc->p_decode;
1237        __be32          *p;
1238
1239        dprintk("RPC: %5u call_decode (status %d)\n",
1240                        task->tk_pid, task->tk_status);
1241
1242        if (task->tk_flags & RPC_CALL_MAJORSEEN) {
1243                if (clnt->cl_chatty)
1244                        printk(KERN_NOTICE "%s: server %s OK\n",
1245                                clnt->cl_protname, clnt->cl_server);
1246                task->tk_flags &= ~RPC_CALL_MAJORSEEN;
1247        }
1248
1249        /*
1250         * Ensure that we see all writes made by xprt_complete_rqst()
1251         * before it changed req->rq_received.
1252         */
1253        smp_rmb();
1254        req->rq_rcv_buf.len = req->rq_private_buf.len;
1255
1256        /* Check that the softirq receive buffer is valid */
1257        WARN_ON(memcmp(&req->rq_rcv_buf, &req->rq_private_buf,
1258                                sizeof(req->rq_rcv_buf)) != 0);
1259
1260        if (req->rq_rcv_buf.len < 12) {
1261                if (!RPC_IS_SOFT(task)) {
1262                        task->tk_action = call_bind;
1263                        clnt->cl_stats->rpcretrans++;
1264                        goto out_retry;
1265                }
1266                dprintk("RPC:       %s: too small RPC reply size (%d bytes)\n",
1267                                clnt->cl_protname, task->tk_status);
1268                task->tk_action = call_timeout;
1269                goto out_retry;
1270        }
1271
1272        p = rpc_verify_header(task);
1273        if (IS_ERR(p)) {
1274                if (p == ERR_PTR(-EAGAIN))
1275                        goto out_retry;
1276                return;
1277        }
1278
1279        task->tk_action = rpc_exit_task;
1280
1281        if (decode) {
1282                task->tk_status = rpcauth_unwrap_resp(task, decode, req, p,
1283                                                      task->tk_msg.rpc_resp);
1284        }
1285        dprintk("RPC: %5u call_decode result %d\n", task->tk_pid,
1286                        task->tk_status);
1287        return;
1288out_retry:
1289        task->tk_status = 0;
1290        /* Note: rpc_verify_header() may have freed the RPC slot */
1291        if (task->tk_rqstp == req) {
1292                req->rq_received = req->rq_rcv_buf.len = 0;
1293                if (task->tk_client->cl_discrtry)
1294                        xprt_conditional_disconnect(task->tk_xprt,
1295                                        req->rq_connect_cookie);
1296        }
1297}
1298
1299/*
1300 * 8.   Refresh the credentials if rejected by the server
1301 */
1302static void
1303call_refresh(struct rpc_task *task)
1304{
1305        dprint_status(task);
1306
1307        task->tk_action = call_refreshresult;
1308        task->tk_status = 0;
1309        task->tk_client->cl_stats->rpcauthrefresh++;
1310        rpcauth_refreshcred(task);
1311}
1312
1313/*
1314 * 8a.  Process the results of a credential refresh
1315 */
1316static void
1317call_refreshresult(struct rpc_task *task)
1318{
1319        int status = task->tk_status;
1320
1321        dprint_status(task);
1322
1323        task->tk_status = 0;
1324        task->tk_action = call_reserve;
1325        if (status >= 0 && rpcauth_uptodatecred(task))
1326                return;
1327        if (status == -EACCES) {
1328                rpc_exit(task, -EACCES);
1329                return;
1330        }
1331        task->tk_action = call_refresh;
1332        if (status != -ETIMEDOUT)
1333                rpc_delay(task, 3*HZ);
1334        return;
1335}
1336
1337static __be32 *
1338rpc_encode_header(struct rpc_task *task)
1339{
1340        struct rpc_clnt *clnt = task->tk_client;
1341        struct rpc_rqst *req = task->tk_rqstp;
1342        __be32          *p = req->rq_svec[0].iov_base;
1343
1344        /* FIXME: check buffer size? */
1345
1346        p = xprt_skip_transport_header(task->tk_xprt, p);
1347        *p++ = req->rq_xid;             /* XID */
1348        *p++ = htonl(RPC_CALL);         /* CALL */
1349        *p++ = htonl(RPC_VERSION);      /* RPC version */
1350        *p++ = htonl(clnt->cl_prog);    /* program number */
1351        *p++ = htonl(clnt->cl_vers);    /* program version */
1352        *p++ = htonl(task->tk_msg.rpc_proc->p_proc);    /* procedure */
1353        p = rpcauth_marshcred(task, p);
1354        req->rq_slen = xdr_adjust_iovec(&req->rq_svec[0], p);
1355        return p;
1356}
1357
1358static __be32 *
1359rpc_verify_header(struct rpc_task *task)
1360{
1361        struct kvec *iov = &task->tk_rqstp->rq_rcv_buf.head[0];
1362        int len = task->tk_rqstp->rq_rcv_buf.len >> 2;
1363        __be32  *p = iov->iov_base;
1364        u32 n;
1365        int error = -EACCES;
1366
1367        if ((task->tk_rqstp->rq_rcv_buf.len & 3) != 0) {
1368                /* RFC-1014 says that the representation of XDR data must be a
1369                 * multiple of four bytes
1370                 * - if it isn't pointer subtraction in the NFS client may give
1371                 *   undefined results
1372                 */
1373                dprintk("RPC: %5u %s: XDR representation not a multiple of"
1374                       " 4 bytes: 0x%x\n", task->tk_pid, __func__,
1375                       task->tk_rqstp->rq_rcv_buf.len);
1376                goto out_eio;
1377        }
1378        if ((len -= 3) < 0)
1379                goto out_overflow;
1380        p += 1; /* skip XID */
1381
1382        if ((n = ntohl(*p++)) != RPC_REPLY) {
1383                dprintk("RPC: %5u %s: not an RPC reply: %x\n",
1384                                task->tk_pid, __func__, n);
1385                goto out_garbage;
1386        }
1387        if ((n = ntohl(*p++)) != RPC_MSG_ACCEPTED) {
1388                if (--len < 0)
1389                        goto out_overflow;
1390                switch ((n = ntohl(*p++))) {
1391                        case RPC_AUTH_ERROR:
1392                                break;
1393                        case RPC_MISMATCH:
1394                                dprintk("RPC: %5u %s: RPC call version "
1395                                                "mismatch!\n",
1396                                                task->tk_pid, __func__);
1397                                error = -EPROTONOSUPPORT;
1398                                goto out_err;
1399                        default:
1400                                dprintk("RPC: %5u %s: RPC call rejected, "
1401                                                "unknown error: %x\n",
1402                                                task->tk_pid, __func__, n);
1403                                goto out_eio;
1404                }
1405                if (--len < 0)
1406                        goto out_overflow;
1407                switch ((n = ntohl(*p++))) {
1408                case RPC_AUTH_REJECTEDCRED:
1409                case RPC_AUTH_REJECTEDVERF:
1410                case RPCSEC_GSS_CREDPROBLEM:
1411                case RPCSEC_GSS_CTXPROBLEM:
1412                        if (!task->tk_cred_retry)
1413                                break;
1414                        task->tk_cred_retry--;
1415                        dprintk("RPC: %5u %s: retry stale creds\n",
1416                                        task->tk_pid, __func__);
1417                        rpcauth_invalcred(task);
1418                        /* Ensure we obtain a new XID! */
1419                        xprt_release(task);
1420                        task->tk_action = call_refresh;
1421                        goto out_retry;
1422                case RPC_AUTH_BADCRED:
1423                case RPC_AUTH_BADVERF:
1424                        /* possibly garbled cred/verf? */
1425                        if (!task->tk_garb_retry)
1426                                break;
1427                        task->tk_garb_retry--;
1428                        dprintk("RPC: %5u %s: retry garbled creds\n",
1429                                        task->tk_pid, __func__);
1430                        task->tk_action = call_bind;
1431                        goto out_retry;
1432                case RPC_AUTH_TOOWEAK:
1433                        printk(KERN_NOTICE "RPC: server %s requires stronger "
1434                               "authentication.\n", task->tk_client->cl_server);
1435                        break;
1436                default:
1437                        dprintk("RPC: %5u %s: unknown auth error: %x\n",
1438                                        task->tk_pid, __func__, n);
1439                        error = -EIO;
1440                }
1441                dprintk("RPC: %5u %s: call rejected %d\n",
1442                                task->tk_pid, __func__, n);
1443                goto out_err;
1444        }
1445        if (!(p = rpcauth_checkverf(task, p))) {
1446                dprintk("RPC: %5u %s: auth check failed\n",
1447                                task->tk_pid, __func__);
1448                goto out_garbage;               /* bad verifier, retry */
1449        }
1450        len = p - (__be32 *)iov->iov_base - 1;
1451        if (len < 0)
1452                goto out_overflow;
1453        switch ((n = ntohl(*p++))) {
1454        case RPC_SUCCESS:
1455                return p;
1456        case RPC_PROG_UNAVAIL:
1457                dprintk("RPC: %5u %s: program %u is unsupported by server %s\n",
1458                                task->tk_pid, __func__,
1459                                (unsigned int)task->tk_client->cl_prog,
1460                                task->tk_client->cl_server);
1461                error = -EPFNOSUPPORT;
1462                goto out_err;
1463        case RPC_PROG_MISMATCH:
1464                dprintk("RPC: %5u %s: program %u, version %u unsupported by "
1465                                "server %s\n", task->tk_pid, __func__,
1466                                (unsigned int)task->tk_client->cl_prog,
1467                                (unsigned int)task->tk_client->cl_vers,
1468                                task->tk_client->cl_server);
1469                error = -EPROTONOSUPPORT;
1470                goto out_err;
1471        case RPC_PROC_UNAVAIL:
1472                dprintk("RPC: %5u %s: proc %s unsupported by program %u, "
1473                                "version %u on server %s\n",
1474                                task->tk_pid, __func__,
1475                                rpc_proc_name(task),
1476                                task->tk_client->cl_prog,
1477                                task->tk_client->cl_vers,
1478                                task->tk_client->cl_server);
1479                error = -EOPNOTSUPP;
1480                goto out_err;
1481        case RPC_GARBAGE_ARGS:
1482                dprintk("RPC: %5u %s: server saw garbage\n",
1483                                task->tk_pid, __func__);
1484                break;                  /* retry */
1485        default:
1486                dprintk("RPC: %5u %s: server accept status: %x\n",
1487                                task->tk_pid, __func__, n);
1488                /* Also retry */
1489        }
1490
1491out_garbage:
1492        task->tk_client->cl_stats->rpcgarbage++;
1493        if (task->tk_garb_retry) {
1494                task->tk_garb_retry--;
1495                dprintk("RPC: %5u %s: retrying\n",
1496                                task->tk_pid, __func__);
1497                task->tk_action = call_bind;
1498out_retry:
1499                return ERR_PTR(-EAGAIN);
1500        }
1501out_eio:
1502        error = -EIO;
1503out_err:
1504        rpc_exit(task, error);
1505        dprintk("RPC: %5u %s: call failed with error %d\n", task->tk_pid,
1506                        __func__, error);
1507        return ERR_PTR(error);
1508out_overflow:
1509        dprintk("RPC: %5u %s: server reply was truncated.\n", task->tk_pid,
1510                        __func__);
1511        goto out_garbage;
1512}
1513
1514static int rpcproc_encode_null(void *rqstp, __be32 *data, void *obj)
1515{
1516        return 0;
1517}
1518
1519static int rpcproc_decode_null(void *rqstp, __be32 *data, void *obj)
1520{
1521        return 0;
1522}
1523
1524static struct rpc_procinfo rpcproc_null = {
1525        .p_encode = rpcproc_encode_null,
1526        .p_decode = rpcproc_decode_null,
1527};
1528
1529static int rpc_ping(struct rpc_clnt *clnt, int flags)
1530{
1531        struct rpc_message msg = {
1532                .rpc_proc = &rpcproc_null,
1533        };
1534        int err;
1535        msg.rpc_cred = authnull_ops.lookup_cred(NULL, NULL, 0);
1536        err = rpc_call_sync(clnt, &msg, flags);
1537        put_rpccred(msg.rpc_cred);
1538        return err;
1539}
1540
1541struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, int flags)
1542{
1543        struct rpc_message msg = {
1544                .rpc_proc = &rpcproc_null,
1545                .rpc_cred = cred,
1546        };
1547        struct rpc_task_setup task_setup_data = {
1548                .rpc_client = clnt,
1549                .rpc_message = &msg,
1550                .callback_ops = &rpc_default_ops,
1551                .flags = flags,
1552        };
1553        return rpc_run_task(&task_setup_data);
1554}
1555EXPORT_SYMBOL_GPL(rpc_call_null);
1556
1557#ifdef RPC_DEBUG
1558static void rpc_show_header(void)
1559{
1560        printk(KERN_INFO "-pid- flgs status -client- --rqstp- "
1561                "-timeout ---ops--\n");
1562}
1563
1564static void rpc_show_task(const struct rpc_clnt *clnt,
1565                          const struct rpc_task *task)
1566{
1567        const char *rpc_waitq = "none";
1568        char *p, action[KSYM_SYMBOL_LEN];
1569
1570        if (RPC_IS_QUEUED(task))
1571                rpc_waitq = rpc_qname(task->tk_waitqueue);
1572
1573        /* map tk_action pointer to a function name; then trim off
1574         * the "+0x0 [sunrpc]" */
1575        sprint_symbol(action, (unsigned long)task->tk_action);
1576        p = strchr(action, '+');
1577        if (p)
1578                *p = '\0';
1579
1580        printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s\n",
1581                task->tk_pid, task->tk_flags, task->tk_status,
1582                clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
1583                clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
1584                action, rpc_waitq);
1585}
1586
1587void rpc_show_tasks(void)
1588{
1589        struct rpc_clnt *clnt;
1590        struct rpc_task *task;
1591        int header = 0;
1592
1593        spin_lock(&rpc_client_lock);
1594        list_for_each_entry(clnt, &all_clients, cl_clients) {
1595                spin_lock(&clnt->cl_lock);
1596                list_for_each_entry(task, &clnt->cl_tasks, tk_task) {
1597                        if (!header) {
1598                                rpc_show_header();
1599                                header++;
1600                        }
1601                        rpc_show_task(clnt, task);
1602                }
1603                spin_unlock(&clnt->cl_lock);
1604        }
1605        spin_unlock(&rpc_client_lock);
1606}
1607#endif
1608