.. | .. |
---|
109 | 109 | spinlock_t sv_cb_lock; /* protects the svc_cb_list */ |
---|
110 | 110 | wait_queue_head_t sv_cb_waitq; /* sleep here if there are no |
---|
111 | 111 | * entries in the svc_cb_list */ |
---|
112 | | - struct svc_xprt *sv_bc_xprt; /* callback on fore channel */ |
---|
| 112 | + bool sv_bc_enabled; /* service uses backchannel */ |
---|
113 | 113 | #endif /* CONFIG_SUNRPC_BACKCHANNEL */ |
---|
114 | 114 | }; |
---|
115 | 115 | |
---|
.. | .. |
---|
254 | 254 | struct page * *rq_page_end; /* one past the last page */ |
---|
255 | 255 | |
---|
256 | 256 | struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */ |
---|
| 257 | + struct bio_vec rq_bvec[RPCSVC_MAXPAGES]; |
---|
257 | 258 | |
---|
258 | 259 | __be32 rq_xid; /* transmission id */ |
---|
259 | 260 | u32 rq_prog; /* program number */ |
---|
.. | .. |
---|
299 | 300 | struct net *rq_bc_net; /* pointer to backchannel's |
---|
300 | 301 | * net namespace |
---|
301 | 302 | */ |
---|
| 303 | + void ** rq_lease_breaker; /* The v4 client breaking a lease */ |
---|
302 | 304 | }; |
---|
303 | 305 | |
---|
304 | 306 | #define SVC_NET(rqst) (rqst->rq_xprt ? rqst->rq_xprt->xpt_net : rqst->rq_bc_net) |
---|
.. | .. |
---|
380 | 382 | struct cache_deferred_req handle; |
---|
381 | 383 | size_t xprt_hlen; |
---|
382 | 384 | int argslen; |
---|
383 | | - __be32 args[0]; |
---|
| 385 | + __be32 args[]; |
---|
| 386 | +}; |
---|
| 387 | + |
---|
| 388 | +struct svc_process_info { |
---|
| 389 | + union { |
---|
| 390 | + int (*dispatch)(struct svc_rqst *, __be32 *); |
---|
| 391 | + struct { |
---|
| 392 | + unsigned int lovers; |
---|
| 393 | + unsigned int hivers; |
---|
| 394 | + } mismatch; |
---|
| 395 | + }; |
---|
384 | 396 | }; |
---|
385 | 397 | |
---|
386 | 398 | /* |
---|
.. | .. |
---|
397 | 409 | char * pg_class; /* class name: services sharing authentication */ |
---|
398 | 410 | struct svc_stat * pg_stats; /* rpc statistics */ |
---|
399 | 411 | int (*pg_authenticate)(struct svc_rqst *); |
---|
| 412 | + __be32 (*pg_init_request)(struct svc_rqst *, |
---|
| 413 | + const struct svc_program *, |
---|
| 414 | + struct svc_process_info *); |
---|
| 415 | + int (*pg_rpcbind_set)(struct net *net, |
---|
| 416 | + const struct svc_program *, |
---|
| 417 | + u32 version, int family, |
---|
| 418 | + unsigned short proto, |
---|
| 419 | + unsigned short port); |
---|
400 | 420 | }; |
---|
401 | 421 | |
---|
402 | 422 | /* |
---|
.. | .. |
---|
499 | 519 | void svc_reserve(struct svc_rqst *rqstp, int space); |
---|
500 | 520 | struct svc_pool * svc_pool_for_cpu(struct svc_serv *serv, int cpu); |
---|
501 | 521 | char * svc_print_addr(struct svc_rqst *, char *, size_t); |
---|
| 522 | +int svc_encode_read_payload(struct svc_rqst *rqstp, |
---|
| 523 | + unsigned int offset, |
---|
| 524 | + unsigned int length); |
---|
502 | 525 | unsigned int svc_fill_write_vector(struct svc_rqst *rqstp, |
---|
503 | 526 | struct page **pages, |
---|
504 | 527 | struct kvec *first, size_t total); |
---|
.. | .. |
---|
506 | 529 | struct kvec *first, void *p, |
---|
507 | 530 | size_t total); |
---|
508 | 531 | __be32 svc_return_autherr(struct svc_rqst *rqstp, __be32 auth_err); |
---|
| 532 | +__be32 svc_generic_init_request(struct svc_rqst *rqstp, |
---|
| 533 | + const struct svc_program *progp, |
---|
| 534 | + struct svc_process_info *procinfo); |
---|
| 535 | +int svc_generic_rpcbind_set(struct net *net, |
---|
| 536 | + const struct svc_program *progp, |
---|
| 537 | + u32 version, int family, |
---|
| 538 | + unsigned short proto, |
---|
| 539 | + unsigned short port); |
---|
| 540 | +int svc_rpcbind_set_version(struct net *net, |
---|
| 541 | + const struct svc_program *progp, |
---|
| 542 | + u32 version, int family, |
---|
| 543 | + unsigned short proto, |
---|
| 544 | + unsigned short port); |
---|
509 | 545 | |
---|
510 | 546 | #define RPC_MAX_ADDRBUFLEN (63U) |
---|
511 | 547 | |
---|