]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/lustre/lustre/include/lustre_net.h
staging/lustre: fix build warnning on 32bit system
[karo-tx-linux.git] / drivers / staging / lustre / lustre / include / lustre_net.h
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; If not, see
18  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
19  *
20  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21  * CA 95054 USA or visit www.sun.com if you need additional information or
22  * have any questions.
23  *
24  * GPL HEADER END
25  */
26 /*
27  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28  * Use is subject to license terms.
29  *
30  * Copyright (c) 2010, 2012, Intel Corporation.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  */
36 /** \defgroup PtlRPC Portal RPC and networking module.
37  *
38  * PortalRPC is the layer used by rest of lustre code to achieve network
39  * communications: establish connections with corresponding export and import
40  * states, listen for a service, send and receive RPCs.
41  * PortalRPC also includes base recovery framework: packet resending and
42  * replaying, reconnections, pinger.
43  *
44  * PortalRPC utilizes LNet as its transport layer.
45  *
46  * @{
47  */
48
49
50 #ifndef _LUSTRE_NET_H
51 #define _LUSTRE_NET_H
52
53 /** \defgroup net net
54  *
55  * @{
56  */
57
58 #include <linux/lustre_net.h>
59
60 #include <linux/libcfs/libcfs.h>
61 // #include <obd.h>
62 #include <linux/lnet/lnet.h>
63 #include <lustre/lustre_idl.h>
64 #include <lustre_ha.h>
65 #include <lustre_sec.h>
66 #include <lustre_import.h>
67 #include <lprocfs_status.h>
68 #include <lu_object.h>
69 #include <lustre_req_layout.h>
70
71 #include <obd_support.h>
72 #include <lustre_ver.h>
73
74 /* MD flags we _always_ use */
75 #define PTLRPC_MD_OPTIONS  0
76
77 /**
78  * Max # of bulk operations in one request.
79  * In order for the client and server to properly negotiate the maximum
80  * possible transfer size, PTLRPC_BULK_OPS_COUNT must be a power-of-two
81  * value.  The client is free to limit the actual RPC size for any bulk
82  * transfer via cl_max_pages_per_rpc to some non-power-of-two value. */
83 #define PTLRPC_BULK_OPS_BITS    2
84 #define PTLRPC_BULK_OPS_COUNT   (1U << PTLRPC_BULK_OPS_BITS)
85 /**
86  * PTLRPC_BULK_OPS_MASK is for the convenience of the client only, and
87  * should not be used on the server at all.  Otherwise, it imposes a
88  * protocol limitation on the maximum RPC size that can be used by any
89  * RPC sent to that server in the future.  Instead, the server should
90  * use the negotiated per-client ocd_brw_size to determine the bulk
91  * RPC count. */
92 #define PTLRPC_BULK_OPS_MASK    (~((__u64)PTLRPC_BULK_OPS_COUNT - 1))
93
94 /**
95  * Define maxima for bulk I/O.
96  *
97  * A single PTLRPC BRW request is sent via up to PTLRPC_BULK_OPS_COUNT
98  * of LNET_MTU sized RDMA transfers.  Clients and servers negotiate the
99  * currently supported maximum between peers at connect via ocd_brw_size.
100  */
101 #define PTLRPC_MAX_BRW_BITS     (LNET_MTU_BITS + PTLRPC_BULK_OPS_BITS)
102 #define PTLRPC_MAX_BRW_SIZE     (1 << PTLRPC_MAX_BRW_BITS)
103 #define PTLRPC_MAX_BRW_PAGES    (PTLRPC_MAX_BRW_SIZE >> PAGE_CACHE_SHIFT)
104
105 #define ONE_MB_BRW_SIZE         (1 << LNET_MTU_BITS)
106 #define MD_MAX_BRW_SIZE         (1 << LNET_MTU_BITS)
107 #define MD_MAX_BRW_PAGES        (MD_MAX_BRW_SIZE >> PAGE_CACHE_SHIFT)
108 #define DT_MAX_BRW_SIZE         PTLRPC_MAX_BRW_SIZE
109 #define DT_MAX_BRW_PAGES        (DT_MAX_BRW_SIZE >> PAGE_CACHE_SHIFT)
110 #define OFD_MAX_BRW_SIZE        (1 << LNET_MTU_BITS)
111
112 /* When PAGE_SIZE is a constant, we can check our arithmetic here with cpp! */
113 # if ((PTLRPC_MAX_BRW_PAGES & (PTLRPC_MAX_BRW_PAGES - 1)) != 0)
114 #  error "PTLRPC_MAX_BRW_PAGES isn't a power of two"
115 # endif
116 # if (PTLRPC_MAX_BRW_SIZE != (PTLRPC_MAX_BRW_PAGES * PAGE_CACHE_SIZE))
117 #  error "PTLRPC_MAX_BRW_SIZE isn't PTLRPC_MAX_BRW_PAGES * PAGE_CACHE_SIZE"
118 # endif
119 # if (PTLRPC_MAX_BRW_SIZE > LNET_MTU * PTLRPC_BULK_OPS_COUNT)
120 #  error "PTLRPC_MAX_BRW_SIZE too big"
121 # endif
122 # if (PTLRPC_MAX_BRW_PAGES > LNET_MAX_IOV * PTLRPC_BULK_OPS_COUNT)
123 #  error "PTLRPC_MAX_BRW_PAGES too big"
124 # endif
125
126 #define PTLRPC_NTHRS_INIT       2
127
128 /**
129  * Buffer Constants
130  *
131  * Constants determine how memory is used to buffer incoming service requests.
132  *
133  * ?_NBUFS            # buffers to allocate when growing the pool
134  * ?_BUFSIZE        # bytes in a single request buffer
135  * ?_MAXREQSIZE  # maximum request service will receive
136  *
137  * When fewer than ?_NBUFS/2 buffers are posted for receive, another chunk
138  * of ?_NBUFS is added to the pool.
139  *
140  * Messages larger than ?_MAXREQSIZE are dropped.  Request buffers are
141  * considered full when less than ?_MAXREQSIZE is left in them.
142  */
143 /**
144  * Thread Constants
145  *
146  * Constants determine how threads are created for ptlrpc service.
147  *
148  * ?_NTHRS_INIT         # threads to create for each service partition on
149  *                        initializing. If it's non-affinity service and
150  *                        there is only one partition, it's the overall #
151  *                        threads for the service while initializing.
152  * ?_NTHRS_BASE         # threads should be created at least for each
153  *                        ptlrpc partition to keep the service healthy.
154  *                        It's the low-water mark of threads upper-limit
155  *                        for each partition.
156  * ?_THR_FACTOR  # threads can be added on threads upper-limit for
157  *                        each CPU core. This factor is only for reference,
158  *                        we might decrease value of factor if number of cores
159  *                        per CPT is above a limit.
160  * ?_NTHRS_MAX          # overall threads can be created for a service,
161  *                        it's a soft limit because if service is running
162  *                        on machine with hundreds of cores and tens of
163  *                        CPU partitions, we need to guarantee each partition
164  *                        has ?_NTHRS_BASE threads, which means total threads
165  *                        will be ?_NTHRS_BASE * number_of_cpts which can
166  *                        exceed ?_NTHRS_MAX.
167  *
168  * Examples
169  *
170  * #define MDS_NTHRS_INIT       2
171  * #define MDS_NTHRS_BASE       64
172  * #define MDS_NTHRS_FACTOR     8
173  * #define MDS_NTHRS_MAX        1024
174  *
175  * Example 1):
176  * ---------------------------------------------------------------------
177  * Server(A) has 16 cores, user configured it to 4 partitions so each
178  * partition has 4 cores, then actual number of service threads on each
179  * partition is:
180  *     MDS_NTHRS_BASE(64) + cores(4) * MDS_NTHRS_FACTOR(8) = 96
181  *
182  * Total number of threads for the service is:
183  *     96 * partitions(4) = 384
184  *
185  * Example 2):
186  * ---------------------------------------------------------------------
187  * Server(B) has 32 cores, user configured it to 4 partitions so each
188  * partition has 8 cores, then actual number of service threads on each
189  * partition is:
190  *     MDS_NTHRS_BASE(64) + cores(8) * MDS_NTHRS_FACTOR(8) = 128
191  *
192  * Total number of threads for the service is:
193  *     128 * partitions(4) = 512
194  *
195  * Example 3):
196  * ---------------------------------------------------------------------
197  * Server(B) has 96 cores, user configured it to 8 partitions so each
198  * partition has 12 cores, then actual number of service threads on each
199  * partition is:
200  *     MDS_NTHRS_BASE(64) + cores(12) * MDS_NTHRS_FACTOR(8) = 160
201  *
202  * Total number of threads for the service is:
203  *     160 * partitions(8) = 1280
204  *
205  * However, it's above the soft limit MDS_NTHRS_MAX, so we choose this number
206  * as upper limit of threads number for each partition:
207  *     MDS_NTHRS_MAX(1024) / partitions(8) = 128
208  *
209  * Example 4):
210  * ---------------------------------------------------------------------
211  * Server(C) have a thousand of cores and user configured it to 32 partitions
212  *     MDS_NTHRS_BASE(64) * 32 = 2048
213  *
214  * which is already above soft limit MDS_NTHRS_MAX(1024), but we still need
215  * to guarantee that each partition has at least MDS_NTHRS_BASE(64) threads
216  * to keep service healthy, so total number of threads will just be 2048.
217  *
218  * NB: we don't suggest to choose server with that many cores because backend
219  *     filesystem itself, buffer cache, or underlying network stack might
220  *     have some SMP scalability issues at that large scale.
221  *
222  *     If user already has a fat machine with hundreds or thousands of cores,
223  *     there are two choices for configuration:
224  *     a) create CPU table from subset of all CPUs and run Lustre on
225  *      top of this subset
226  *     b) bind service threads on a few partitions, see modparameters of
227  *      MDS and OSS for details
228 *
229  * NB: these calculations (and examples below) are simplified to help
230  *     understanding, the real implementation is a little more complex,
231  *     please see ptlrpc_server_nthreads_check() for details.
232  *
233  */
234
235  /*
236   * LDLM threads constants:
237   *
238   * Given 8 as factor and 24 as base threads number
239   *
240   * example 1)
241   * On 4-core machine we will have 24 + 8 * 4 = 56 threads.
242   *
243   * example 2)
244   * On 8-core machine with 2 partitions we will have 24 + 4 * 8 = 56
245   * threads for each partition and total threads number will be 112.
246   *
247   * example 3)
248   * On 64-core machine with 8 partitions we will need LDLM_NTHRS_BASE(24)
249   * threads for each partition to keep service healthy, so total threads
250   * number should be 24 * 8 = 192.
251   *
252   * So with these constants, threads number will be at the similar level
253   * of old versions, unless target machine has over a hundred cores
254   */
255 #define LDLM_THR_FACTOR         8
256 #define LDLM_NTHRS_INIT         PTLRPC_NTHRS_INIT
257 #define LDLM_NTHRS_BASE         24
258 #define LDLM_NTHRS_MAX          (num_online_cpus() == 1 ? 64 : 128)
259
260 #define LDLM_BL_THREADS   LDLM_NTHRS_AUTO_INIT
261 #define LDLM_CLIENT_NBUFS 1
262 #define LDLM_SERVER_NBUFS 64
263 #define LDLM_BUFSIZE      (8 * 1024)
264 #define LDLM_MAXREQSIZE   (5 * 1024)
265 #define LDLM_MAXREPSIZE   (1024)
266
267  /*
268   * MDS threads constants:
269   *
270   * Please see examples in "Thread Constants", MDS threads number will be at
271   * the comparable level of old versions, unless the server has many cores.
272   */
273 #ifndef MDS_MAX_THREADS
274 #define MDS_MAX_THREADS         1024
275 #define MDS_MAX_OTHR_THREADS    256
276
277 #else /* MDS_MAX_THREADS */
278 #if MDS_MAX_THREADS < PTLRPC_NTHRS_INIT
279 #undef MDS_MAX_THREADS
280 #define MDS_MAX_THREADS PTLRPC_NTHRS_INIT
281 #endif
282 #define MDS_MAX_OTHR_THREADS    max(PTLRPC_NTHRS_INIT, MDS_MAX_THREADS / 2)
283 #endif
284
285 /* default service */
286 #define MDS_THR_FACTOR          8
287 #define MDS_NTHRS_INIT          PTLRPC_NTHRS_INIT
288 #define MDS_NTHRS_MAX           MDS_MAX_THREADS
289 #define MDS_NTHRS_BASE          min(64, MDS_NTHRS_MAX)
290
291 /* read-page service */
292 #define MDS_RDPG_THR_FACTOR     4
293 #define MDS_RDPG_NTHRS_INIT     PTLRPC_NTHRS_INIT
294 #define MDS_RDPG_NTHRS_MAX      MDS_MAX_OTHR_THREADS
295 #define MDS_RDPG_NTHRS_BASE     min(48, MDS_RDPG_NTHRS_MAX)
296
297 /* these should be removed when we remove setattr service in the future */
298 #define MDS_SETA_THR_FACTOR     4
299 #define MDS_SETA_NTHRS_INIT     PTLRPC_NTHRS_INIT
300 #define MDS_SETA_NTHRS_MAX      MDS_MAX_OTHR_THREADS
301 #define MDS_SETA_NTHRS_BASE     min(48, MDS_SETA_NTHRS_MAX)
302
303 /* non-affinity threads */
304 #define MDS_OTHR_NTHRS_INIT     PTLRPC_NTHRS_INIT
305 #define MDS_OTHR_NTHRS_MAX      MDS_MAX_OTHR_THREADS
306
307 #define MDS_NBUFS               64
308
309 /**
310  * Assume file name length = FNAME_MAX = 256 (true for ext3).
311  *        path name length = PATH_MAX = 4096
312  *        LOV MD size max  = EA_MAX = 24 * 2000
313  *              (NB: 24 is size of lov_ost_data)
314  *        LOV LOGCOOKIE size max = 32 * 2000
315  *              (NB: 32 is size of llog_cookie)
316  * symlink:  FNAME_MAX + PATH_MAX  <- largest
317  * link:     FNAME_MAX + PATH_MAX  (mds_rec_link < mds_rec_create)
318  * rename:   FNAME_MAX + FNAME_MAX
319  * open:     FNAME_MAX + EA_MAX
320  *
321  * MDS_MAXREQSIZE ~= 4736 bytes =
322  * lustre_msg + ldlm_request + mdt_body + mds_rec_create + FNAME_MAX + PATH_MAX
323  * MDS_MAXREPSIZE ~= 8300 bytes = lustre_msg + llog_header
324  *
325  * Realistic size is about 512 bytes (20 character name + 128 char symlink),
326  * except in the open case where there are a large number of OSTs in a LOV.
327  */
328 #define MDS_MAXREQSIZE          (5 * 1024)      /* >= 4736 */
329 #define MDS_MAXREPSIZE          (9 * 1024)      /* >= 8300 */
330
331 /**
332  * MDS incoming request with LOV EA
333  * 24 = sizeof(struct lov_ost_data), i.e: replay of opencreate
334  */
335 #define MDS_LOV_MAXREQSIZE      max(MDS_MAXREQSIZE, \
336                                     362 + LOV_MAX_STRIPE_COUNT * 24)
337 /**
338  * MDS outgoing reply with LOV EA
339  *
340  * NB: max reply size Lustre 2.4+ client can get from old MDS is:
341  * LOV_MAX_STRIPE_COUNT * (llog_cookie + lov_ost_data) + extra bytes
342  *
343  * but 2.4 or later MDS will never send reply with llog_cookie to any
344  * version client. This macro is defined for server side reply buffer size.
345  */
346 #define MDS_LOV_MAXREPSIZE      MDS_LOV_MAXREQSIZE
347
348 /**
349  * This is the size of a maximum REINT_SETXATTR request:
350  *
351  *   lustre_msg          56 (32 + 4 x 5 + 4)
352  *   ptlrpc_body        184
353  *   mdt_rec_setxattr   136
354  *   lustre_capa        120
355  *   name               256 (XATTR_NAME_MAX)
356  *   value            65536 (XATTR_SIZE_MAX)
357  */
358 #define MDS_EA_MAXREQSIZE       66288
359
360 /**
361  * These are the maximum request and reply sizes (rounded up to 1 KB
362  * boundaries) for the "regular" MDS_REQUEST_PORTAL and MDS_REPLY_PORTAL.
363  */
364 #define MDS_REG_MAXREQSIZE      (((max(MDS_EA_MAXREQSIZE, \
365                                        MDS_LOV_MAXREQSIZE) + 1023) >> 10) << 10)
366 #define MDS_REG_MAXREPSIZE      MDS_REG_MAXREQSIZE
367
368 /**
369  * The update request includes all of updates from the create, which might
370  * include linkea (4K maxim), together with other updates, we set it to 9K:
371  * lustre_msg + ptlrpc_body + UPDATE_BUF_SIZE (8K)
372  */
373 #define MDS_OUT_MAXREQSIZE      (9 * 1024)
374 #define MDS_OUT_MAXREPSIZE      MDS_MAXREPSIZE
375
376 /** MDS_BUFSIZE = max_reqsize (w/o LOV EA) + max sptlrpc payload size */
377 #define MDS_BUFSIZE             max(MDS_MAXREQSIZE + SPTLRPC_MAX_PAYLOAD, \
378                                     8 * 1024)
379
380 /**
381  * MDS_REG_BUFSIZE should at least be MDS_REG_MAXREQSIZE + SPTLRPC_MAX_PAYLOAD.
382  * However, we need to allocate a much larger buffer for it because LNet
383  * requires each MD(rqbd) has at least MDS_REQ_MAXREQSIZE bytes left to avoid
384  * dropping of maximum-sized incoming request.  So if MDS_REG_BUFSIZE is only a
385  * little larger than MDS_REG_MAXREQSIZE, then it can only fit in one request
386  * even there are about MDS_REG_MAX_REQSIZE bytes left in a rqbd, and memory
387  * utilization is very low.
388  *
389  * In the meanwhile, size of rqbd can't be too large, because rqbd can't be
390  * reused until all requests fit in it have been processed and released,
391  * which means one long blocked request can prevent the rqbd be reused.
392  * Now we set request buffer size to 160 KB, so even each rqbd is unlinked
393  * from LNet with unused 65 KB, buffer utilization will be about 59%.
394  * Please check LU-2432 for details.
395  */
396 #define MDS_REG_BUFSIZE         max(MDS_REG_MAXREQSIZE + SPTLRPC_MAX_PAYLOAD, \
397                                     160 * 1024)
398
399 /**
400  * MDS_OUT_BUFSIZE = max_out_reqsize + max sptlrpc payload (~1K) which is
401  * about 10K, for the same reason as MDS_REG_BUFSIZE, we also give some
402  * extra bytes to each request buffer to improve buffer utilization rate.
403   */
404 #define MDS_OUT_BUFSIZE         max(MDS_OUT_MAXREQSIZE + SPTLRPC_MAX_PAYLOAD, \
405                                     24 * 1024)
406
407 /** FLD_MAXREQSIZE == lustre_msg + __u32 padding + ptlrpc_body + opc */
408 #define FLD_MAXREQSIZE  (160)
409
410 /** FLD_MAXREPSIZE == lustre_msg + ptlrpc_body */
411 #define FLD_MAXREPSIZE  (152)
412 #define FLD_BUFSIZE     (1 << 12)
413
414 /**
415  * SEQ_MAXREQSIZE == lustre_msg + __u32 padding + ptlrpc_body + opc + lu_range +
416  * __u32 padding */
417 #define SEQ_MAXREQSIZE  (160)
418
419 /** SEQ_MAXREPSIZE == lustre_msg + ptlrpc_body + lu_range */
420 #define SEQ_MAXREPSIZE  (152)
421 #define SEQ_BUFSIZE     (1 << 12)
422
423 /** MGS threads must be >= 3, see bug 22458 comment #28 */
424 #define MGS_NTHRS_INIT  (PTLRPC_NTHRS_INIT + 1)
425 #define MGS_NTHRS_MAX   32
426
427 #define MGS_NBUFS       64
428 #define MGS_BUFSIZE     (8 * 1024)
429 #define MGS_MAXREQSIZE  (7 * 1024)
430 #define MGS_MAXREPSIZE  (9 * 1024)
431
432  /*
433   * OSS threads constants:
434   *
435   * Given 8 as factor and 64 as base threads number
436   *
437   * example 1):
438   * On 8-core server configured to 2 partitions, we will have
439   * 64 + 8 * 4 = 96 threads for each partition, 192 total threads.
440   *
441   * example 2):
442   * On 32-core machine configured to 4 partitions, we will have
443   * 64 + 8 * 8 = 112 threads for each partition, so total threads number
444   * will be 112 * 4 = 448.
445   *
446   * example 3):
447   * On 64-core machine configured to 4 partitions, we will have
448   * 64 + 16 * 8 = 192 threads for each partition, so total threads number
449   * will be 192 * 4 = 768 which is above limit OSS_NTHRS_MAX(512), so we
450   * cut off the value to OSS_NTHRS_MAX(512) / 4 which is 128 threads
451   * for each partition.
452   *
453   * So we can see that with these constants, threads number wil be at the
454   * similar level of old versions, unless the server has many cores.
455   */
456  /* depress threads factor for VM with small memory size */
457 #define OSS_THR_FACTOR          min_t(int, 8, \
458                                 NUM_CACHEPAGES >> (28 - PAGE_CACHE_SHIFT))
459 #define OSS_NTHRS_INIT          (PTLRPC_NTHRS_INIT + 1)
460 #define OSS_NTHRS_BASE          64
461 #define OSS_NTHRS_MAX           512
462
463 /* threads for handling "create" request */
464 #define OSS_CR_THR_FACTOR       1
465 #define OSS_CR_NTHRS_INIT       PTLRPC_NTHRS_INIT
466 #define OSS_CR_NTHRS_BASE       8
467 #define OSS_CR_NTHRS_MAX        64
468
469 /**
470  * OST_IO_MAXREQSIZE ~=
471  *      lustre_msg + ptlrpc_body + obdo + obd_ioobj +
472  *      DT_MAX_BRW_PAGES * niobuf_remote
473  *
474  * - single object with 16 pages is 512 bytes
475  * - OST_IO_MAXREQSIZE must be at least 1 page of cookies plus some spillover
476  * - Must be a multiple of 1024
477  * - actual size is about 18K
478  */
479 #define _OST_MAXREQSIZE_SUM (sizeof(struct lustre_msg) + \
480                              sizeof(struct ptlrpc_body) + \
481                              sizeof(struct obdo) + \
482                              sizeof(struct obd_ioobj) + \
483                              sizeof(struct niobuf_remote) * DT_MAX_BRW_PAGES)
484 /**
485  * FIEMAP request can be 4K+ for now
486  */
487 #define OST_MAXREQSIZE          (5 * 1024)
488 #define OST_IO_MAXREQSIZE       max_t(int, OST_MAXREQSIZE, \
489                                 (((_OST_MAXREQSIZE_SUM - 1) | (1024 - 1)) + 1))
490
491 #define OST_MAXREPSIZE          (9 * 1024)
492 #define OST_IO_MAXREPSIZE       OST_MAXREPSIZE
493
494 #define OST_NBUFS               64
495 /** OST_BUFSIZE = max_reqsize + max sptlrpc payload size */
496 #define OST_BUFSIZE             max_t(int, OST_MAXREQSIZE + 1024, 16 * 1024)
497 /**
498  * OST_IO_MAXREQSIZE is 18K, giving extra 46K can increase buffer utilization
499  * rate of request buffer, please check comment of MDS_LOV_BUFSIZE for details.
500  */
501 #define OST_IO_BUFSIZE          max_t(int, OST_IO_MAXREQSIZE + 1024, 64 * 1024)
502
503 /* Macro to hide a typecast. */
504 #define ptlrpc_req_async_args(req) ((void *)&req->rq_async_args)
505
506 /**
507  * Structure to single define portal connection.
508  */
509 struct ptlrpc_connection {
510         /** linkage for connections hash table */
511         struct hlist_node       c_hash;
512         /** Our own lnet nid for this connection */
513         lnet_nid_t            c_self;
514         /** Remote side nid for this connection */
515         lnet_process_id_t       c_peer;
516         /** UUID of the other side */
517         struct obd_uuid  c_remote_uuid;
518         /** reference counter for this connection */
519         atomic_t            c_refcount;
520 };
521
522 /** Client definition for PortalRPC */
523 struct ptlrpc_client {
524         /** What lnet portal does this client send messages to by default */
525         __u32              cli_request_portal;
526         /** What portal do we expect replies on */
527         __u32              cli_reply_portal;
528         /** Name of the client */
529         char               *cli_name;
530 };
531
532 /** state flags of requests */
533 /* XXX only ones left are those used by the bulk descs as well! */
534 #define PTL_RPC_FL_INTR      (1 << 0)  /* reply wait was interrupted by user */
535 #define PTL_RPC_FL_TIMEOUT   (1 << 7)  /* request timed out waiting for reply */
536
537 #define REQ_MAX_ACK_LOCKS 8
538
539 union ptlrpc_async_args {
540         /**
541          * Scratchpad for passing args to completion interpreter. Users
542          * cast to the struct of their choosing, and CLASSERT that this is
543          * big enough.  For _tons_ of context, OBD_ALLOC a struct and store
544          * a pointer to it here.  The pointer_arg ensures this struct is at
545          * least big enough for that.
546          */
547         void      *pointer_arg[11];
548         __u64      space[7];
549 };
550
551 struct ptlrpc_request_set;
552 typedef int (*set_interpreter_func)(struct ptlrpc_request_set *, void *, int);
553 typedef int (*set_producer_func)(struct ptlrpc_request_set *, void *);
554
555 /**
556  * Definition of request set structure.
557  * Request set is a list of requests (not necessary to the same target) that
558  * once populated with RPCs could be sent in parallel.
559  * There are two kinds of request sets. General purpose and with dedicated
560  * serving thread. Example of the latter is ptlrpcd set.
561  * For general purpose sets once request set started sending it is impossible
562  * to add new requests to such set.
563  * Provides a way to call "completion callbacks" when all requests in the set
564  * returned.
565  */
566 struct ptlrpc_request_set {
567         atomic_t          set_refcount;
568         /** number of in queue requests */
569         atomic_t          set_new_count;
570         /** number of uncompleted requests */
571         atomic_t          set_remaining;
572         /** wait queue to wait on for request events */
573         wait_queue_head_t          set_waitq;
574         wait_queue_head_t         *set_wakeup_ptr;
575         /** List of requests in the set */
576         struct list_head            set_requests;
577         /**
578          * List of completion callbacks to be called when the set is completed
579          * This is only used if \a set_interpret is NULL.
580          * Links struct ptlrpc_set_cbdata.
581          */
582         struct list_head            set_cblist;
583         /** Completion callback, if only one. */
584         set_interpreter_func  set_interpret;
585         /** opaq argument passed to completion \a set_interpret callback. */
586         void             *set_arg;
587         /**
588          * Lock for \a set_new_requests manipulations
589          * locked so that any old caller can communicate requests to
590          * the set holder who can then fold them into the lock-free set
591          */
592         spinlock_t              set_new_req_lock;
593         /** List of new yet unsent requests. Only used with ptlrpcd now. */
594         struct list_head            set_new_requests;
595
596         /** rq_status of requests that have been freed already */
597         int                set_rc;
598         /** Additional fields used by the flow control extension */
599         /** Maximum number of RPCs in flight */
600         int                set_max_inflight;
601         /** Callback function used to generate RPCs */
602         set_producer_func     set_producer;
603         /** opaq argument passed to the producer callback */
604         void             *set_producer_arg;
605 };
606
607 /**
608  * Description of a single ptrlrpc_set callback
609  */
610 struct ptlrpc_set_cbdata {
611         /** List linkage item */
612         struct list_head              psc_item;
613         /** Pointer to interpreting function */
614         set_interpreter_func    psc_interpret;
615         /** Opaq argument to pass to the callback */
616         void               *psc_data;
617 };
618
619 struct ptlrpc_bulk_desc;
620 struct ptlrpc_service_part;
621 struct ptlrpc_service;
622
623 /**
624  * ptlrpc callback & work item stuff
625  */
626 struct ptlrpc_cb_id {
627         void   (*cbid_fn)(lnet_event_t *ev);     /* specific callback fn */
628         void    *cbid_arg;                    /* additional arg */
629 };
630
631 /** Maximum number of locks to fit into reply state */
632 #define RS_MAX_LOCKS 8
633 #define RS_DEBUG     0
634
635 /**
636  * Structure to define reply state on the server
637  * Reply state holds various reply message information. Also for "difficult"
638  * replies (rep-ack case) we store the state after sending reply and wait
639  * for the client to acknowledge the reception. In these cases locks could be
640  * added to the state for replay/failover consistency guarantees.
641  */
642 struct ptlrpc_reply_state {
643         /** Callback description */
644         struct ptlrpc_cb_id    rs_cb_id;
645         /** Linkage for list of all reply states in a system */
646         struct list_head             rs_list;
647         /** Linkage for list of all reply states on same export */
648         struct list_head             rs_exp_list;
649         /** Linkage for list of all reply states for same obd */
650         struct list_head             rs_obd_list;
651 #if RS_DEBUG
652         struct list_head             rs_debug_list;
653 #endif
654         /** A spinlock to protect the reply state flags */
655         spinlock_t              rs_lock;
656         /** Reply state flags */
657         unsigned long     rs_difficult:1;     /* ACK/commit stuff */
658         unsigned long     rs_no_ack:1;    /* no ACK, even for
659                                                   difficult requests */
660         unsigned long     rs_scheduled:1;     /* being handled? */
661         unsigned long     rs_scheduled_ever:1;/* any schedule attempts? */
662         unsigned long     rs_handled:1;  /* been handled yet? */
663         unsigned long     rs_on_net:1;   /* reply_out_callback pending? */
664         unsigned long     rs_prealloc:1; /* rs from prealloc list */
665         unsigned long     rs_committed:1;/* the transaction was committed
666                                                  and the rs was dispatched
667                                                  by ptlrpc_commit_replies */
668         /** Size of the state */
669         int                 rs_size;
670         /** opcode */
671         __u32             rs_opc;
672         /** Transaction number */
673         __u64             rs_transno;
674         /** xid */
675         __u64             rs_xid;
676         struct obd_export     *rs_export;
677         struct ptlrpc_service_part *rs_svcpt;
678         /** Lnet metadata handle for the reply */
679         lnet_handle_md_t       rs_md_h;
680         atomic_t           rs_refcount;
681
682         /** Context for the sevice thread */
683         struct ptlrpc_svc_ctx *rs_svc_ctx;
684         /** Reply buffer (actually sent to the client), encoded if needed */
685         struct lustre_msg     *rs_repbuf;       /* wrapper */
686         /** Size of the reply buffer */
687         int                 rs_repbuf_len;   /* wrapper buf length */
688         /** Size of the reply message */
689         int                 rs_repdata_len;  /* wrapper msg length */
690         /**
691          * Actual reply message. Its content is encrupted (if needed) to
692          * produce reply buffer for actual sending. In simple case
693          * of no network encryption we jus set \a rs_repbuf to \a rs_msg
694          */
695         struct lustre_msg     *rs_msg;    /* reply message */
696
697         /** Number of locks awaiting client ACK */
698         int                 rs_nlocks;
699         /** Handles of locks awaiting client reply ACK */
700         struct lustre_handle   rs_locks[RS_MAX_LOCKS];
701         /** Lock modes of locks in \a rs_locks */
702         ldlm_mode_t         rs_modes[RS_MAX_LOCKS];
703 };
704
705 struct ptlrpc_thread;
706
707 /** RPC stages */
708 enum rq_phase {
709         RQ_PHASE_NEW        = 0xebc0de00,
710         RQ_PHASE_RPC        = 0xebc0de01,
711         RQ_PHASE_BULK      = 0xebc0de02,
712         RQ_PHASE_INTERPRET      = 0xebc0de03,
713         RQ_PHASE_COMPLETE       = 0xebc0de04,
714         RQ_PHASE_UNREGISTERING  = 0xebc0de05,
715         RQ_PHASE_UNDEFINED      = 0xebc0de06
716 };
717
718 /** Type of request interpreter call-back */
719 typedef int (*ptlrpc_interpterer_t)(const struct lu_env *env,
720                                     struct ptlrpc_request *req,
721                                     void *arg, int rc);
722
723 /**
724  * Definition of request pool structure.
725  * The pool is used to store empty preallocated requests for the case
726  * when we would actually need to send something without performing
727  * any allocations (to avoid e.g. OOM).
728  */
729 struct ptlrpc_request_pool {
730         /** Locks the list */
731         spinlock_t prp_lock;
732         /** list of ptlrpc_request structs */
733         struct list_head prp_req_list;
734         /** Maximum message size that would fit into a rquest from this pool */
735         int prp_rq_size;
736         /** Function to allocate more requests for this pool */
737         void (*prp_populate)(struct ptlrpc_request_pool *, int);
738 };
739
740 struct lu_context;
741 struct lu_env;
742
743 struct ldlm_lock;
744
745 /**
746  * \defgroup nrs Network Request Scheduler
747  * @{
748  */
749 struct ptlrpc_nrs_policy;
750 struct ptlrpc_nrs_resource;
751 struct ptlrpc_nrs_request;
752
753 /**
754  * NRS control operations.
755  *
756  * These are common for all policies.
757  */
758 enum ptlrpc_nrs_ctl {
759         /**
760          * Not a valid opcode.
761          */
762         PTLRPC_NRS_CTL_INVALID,
763         /**
764          * Activate the policy.
765          */
766         PTLRPC_NRS_CTL_START,
767         /**
768          * Reserved for multiple primary policies, which may be a possibility
769          * in the future.
770          */
771         PTLRPC_NRS_CTL_STOP,
772         /**
773          * Policies can start using opcodes from this value and onwards for
774          * their own purposes; the assigned value itself is arbitrary.
775          */
776         PTLRPC_NRS_CTL_1ST_POL_SPEC = 0x20,
777 };
778
779 /**
780  * ORR policy operations
781  */
782 enum nrs_ctl_orr {
783         NRS_CTL_ORR_RD_QUANTUM = PTLRPC_NRS_CTL_1ST_POL_SPEC,
784         NRS_CTL_ORR_WR_QUANTUM,
785         NRS_CTL_ORR_RD_OFF_TYPE,
786         NRS_CTL_ORR_WR_OFF_TYPE,
787         NRS_CTL_ORR_RD_SUPP_REQ,
788         NRS_CTL_ORR_WR_SUPP_REQ,
789 };
790
791 /**
792  * NRS policy operations.
793  *
794  * These determine the behaviour of a policy, and are called in response to
795  * NRS core events.
796  */
797 struct ptlrpc_nrs_pol_ops {
798         /**
799          * Called during policy registration; this operation is optional.
800          *
801          * \param[in,out] policy The policy being initialized
802          */
803         int     (*op_policy_init) (struct ptlrpc_nrs_policy *policy);
804         /**
805          * Called during policy unregistration; this operation is optional.
806          *
807          * \param[in,out] policy The policy being unregistered/finalized
808          */
809         void    (*op_policy_fini) (struct ptlrpc_nrs_policy *policy);
810         /**
811          * Called when activating a policy via lprocfs; policies allocate and
812          * initialize their resources here; this operation is optional.
813          *
814          * \param[in,out] policy The policy being started
815          *
816          * \see nrs_policy_start_locked()
817          */
818         int     (*op_policy_start) (struct ptlrpc_nrs_policy *policy);
819         /**
820          * Called when deactivating a policy via lprocfs; policies deallocate
821          * their resources here; this operation is optional
822          *
823          * \param[in,out] policy The policy being stopped
824          *
825          * \see nrs_policy_stop0()
826          */
827         void    (*op_policy_stop) (struct ptlrpc_nrs_policy *policy);
828         /**
829          * Used for policy-specific operations; i.e. not generic ones like
830          * \e PTLRPC_NRS_CTL_START and \e PTLRPC_NRS_CTL_GET_INFO; analogous
831          * to an ioctl; this operation is optional.
832          *
833          * \param[in,out]        policy The policy carrying out operation \a opc
834          * \param[in]     opc    The command operation being carried out
835          * \param[in,out] arg    An generic buffer for communication between the
836          *                       user and the control operation
837          *
838          * \retval -ve error
839          * \retval   0 success
840          *
841          * \see ptlrpc_nrs_policy_control()
842          */
843         int     (*op_policy_ctl) (struct ptlrpc_nrs_policy *policy,
844                                   enum ptlrpc_nrs_ctl opc, void *arg);
845
846         /**
847          * Called when obtaining references to the resources of the resource
848          * hierarchy for a request that has arrived for handling at the PTLRPC
849          * service. Policies should return -ve for requests they do not wish
850          * to handle. This operation is mandatory.
851          *
852          * \param[in,out] policy  The policy we're getting resources for.
853          * \param[in,out] nrq     The request we are getting resources for.
854          * \param[in]     parent  The parent resource of the resource being
855          *                        requested; set to NULL if none.
856          * \param[out]    resp    The resource is to be returned here; the
857          *                        fallback policy in an NRS head should
858          *                        \e always return a non-NULL pointer value.
859          * \param[in]  moving_req When set, signifies that this is an attempt
860          *                        to obtain resources for a request being moved
861          *                        to the high-priority NRS head by
862          *                        ldlm_lock_reorder_req().
863          *                        This implies two things:
864          *                        1. We are under obd_export::exp_rpc_lock and
865          *                        so should not sleep.
866          *                        2. We should not perform non-idempotent or can
867          *                        skip performing idempotent operations that
868          *                        were carried out when resources were first
869          *                        taken for the request when it was initialized
870          *                        in ptlrpc_nrs_req_initialize().
871          *
872          * \retval 0, +ve The level of the returned resource in the resource
873          *                hierarchy; currently only 0 (for a non-leaf resource)
874          *                and 1 (for a leaf resource) are supported by the
875          *                framework.
876          * \retval -ve    error
877          *
878          * \see ptlrpc_nrs_req_initialize()
879          * \see ptlrpc_nrs_hpreq_add_nolock()
880          * \see ptlrpc_nrs_req_hp_move()
881          */
882         int     (*op_res_get) (struct ptlrpc_nrs_policy *policy,
883                                struct ptlrpc_nrs_request *nrq,
884                                const struct ptlrpc_nrs_resource *parent,
885                                struct ptlrpc_nrs_resource **resp,
886                                bool moving_req);
887         /**
888          * Called when releasing references taken for resources in the resource
889          * hierarchy for the request; this operation is optional.
890          *
891          * \param[in,out] policy The policy the resource belongs to
892          * \param[in] res        The resource to be freed
893          *
894          * \see ptlrpc_nrs_req_finalize()
895          * \see ptlrpc_nrs_hpreq_add_nolock()
896          * \see ptlrpc_nrs_req_hp_move()
897          */
898         void    (*op_res_put) (struct ptlrpc_nrs_policy *policy,
899                                const struct ptlrpc_nrs_resource *res);
900
901         /**
902          * Obtains a request for handling from the policy, and optionally
903          * removes the request from the policy; this operation is mandatory.
904          *
905          * \param[in,out] policy The policy to poll
906          * \param[in]     peek   When set, signifies that we just want to
907          *                       examine the request, and not handle it, so the
908          *                       request is not removed from the policy.
909          * \param[in]     force  When set, it will force a policy to return a
910          *                       request if it has one queued.
911          *
912          * \retval NULL No request available for handling
913          * \retval valid-pointer The request polled for handling
914          *
915          * \see ptlrpc_nrs_req_get_nolock()
916          */
917         struct ptlrpc_nrs_request *
918                 (*op_req_get) (struct ptlrpc_nrs_policy *policy, bool peek,
919                                bool force);
920         /**
921          * Called when attempting to add a request to a policy for later
922          * handling; this operation is mandatory.
923          *
924          * \param[in,out] policy  The policy on which to enqueue \a nrq
925          * \param[in,out] nrq The request to enqueue
926          *
927          * \retval 0    success
928          * \retval != 0 error
929          *
930          * \see ptlrpc_nrs_req_add_nolock()
931          */
932         int     (*op_req_enqueue) (struct ptlrpc_nrs_policy *policy,
933                                    struct ptlrpc_nrs_request *nrq);
934         /**
935          * Removes a request from the policy's set of pending requests. Normally
936          * called after a request has been polled successfully from the policy
937          * for handling; this operation is mandatory.
938          *
939          * \param[in,out] policy The policy the request \a nrq belongs to
940          * \param[in,out] nrq    The request to dequeue
941          *
942          * \see ptlrpc_nrs_req_del_nolock()
943          */
944         void    (*op_req_dequeue) (struct ptlrpc_nrs_policy *policy,
945                                    struct ptlrpc_nrs_request *nrq);
946         /**
947          * Called after the request being carried out. Could be used for
948          * job/resource control; this operation is optional.
949          *
950          * \param[in,out] policy The policy which is stopping to handle request
951          *                       \a nrq
952          * \param[in,out] nrq    The request
953          *
954          * \pre spin_is_locked(&svcpt->scp_req_lock)
955          *
956          * \see ptlrpc_nrs_req_stop_nolock()
957          */
958         void    (*op_req_stop) (struct ptlrpc_nrs_policy *policy,
959                                 struct ptlrpc_nrs_request *nrq);
960         /**
961          * Registers the policy's lprocfs interface with a PTLRPC service.
962          *
963          * \param[in] svc The service
964          *
965          * \retval 0    success
966          * \retval != 0 error
967          */
968         int     (*op_lprocfs_init) (struct ptlrpc_service *svc);
969         /**
970          * Unegisters the policy's lprocfs interface with a PTLRPC service.
971          *
972          * In cases of failed policy registration in
973          * \e ptlrpc_nrs_policy_register(), this function may be called for a
974          * service which has not registered the policy successfully, so
975          * implementations of this method should make sure their operations are
976          * safe in such cases.
977          *
978          * \param[in] svc The service
979          */
980         void    (*op_lprocfs_fini) (struct ptlrpc_service *svc);
981 };
982
983 /**
984  * Policy flags
985  */
986 enum nrs_policy_flags {
987         /**
988          * Fallback policy, use this flag only on a single supported policy per
989          * service. The flag cannot be used on policies that use
990          * \e PTLRPC_NRS_FL_REG_EXTERN
991          */
992         PTLRPC_NRS_FL_FALLBACK          = (1 << 0),
993         /**
994          * Start policy immediately after registering.
995          */
996         PTLRPC_NRS_FL_REG_START         = (1 << 1),
997         /**
998          * This is a policy registering from a module different to the one NRS
999          * core ships in (currently ptlrpc).
1000          */
1001         PTLRPC_NRS_FL_REG_EXTERN        = (1 << 2),
1002 };
1003
1004 /**
1005  * NRS queue type.
1006  *
1007  * Denotes whether an NRS instance is for handling normal or high-priority
1008  * RPCs, or whether an operation pertains to one or both of the NRS instances
1009  * in a service.
1010  */
1011 enum ptlrpc_nrs_queue_type {
1012         PTLRPC_NRS_QUEUE_REG    = (1 << 0),
1013         PTLRPC_NRS_QUEUE_HP     = (1 << 1),
1014         PTLRPC_NRS_QUEUE_BOTH   = (PTLRPC_NRS_QUEUE_REG | PTLRPC_NRS_QUEUE_HP)
1015 };
1016
1017 /**
1018  * NRS head
1019  *
1020  * A PTLRPC service has at least one NRS head instance for handling normal
1021  * priority RPCs, and may optionally have a second NRS head instance for
1022  * handling high-priority RPCs. Each NRS head maintains a list of available
1023  * policies, of which one and only one policy is acting as the fallback policy,
1024  * and optionally a different policy may be acting as the primary policy. For
1025  * all RPCs handled by this NRS head instance, NRS core will first attempt to
1026  * enqueue the RPC using the primary policy (if any). The fallback policy is
1027  * used in the following cases:
1028  * - when there was no primary policy in the
1029  *   ptlrpc_nrs_pol_state::NRS_POL_STATE_STARTED state at the time the request
1030  *   was initialized.
1031  * - when the primary policy that was at the
1032  *   ptlrpc_nrs_pol_state::PTLRPC_NRS_POL_STATE_STARTED state at the time the
1033  *   RPC was initialized, denoted it did not wish, or for some other reason was
1034  *   not able to handle the request, by returning a non-valid NRS resource
1035  *   reference.
1036  * - when the primary policy that was at the
1037  *   ptlrpc_nrs_pol_state::PTLRPC_NRS_POL_STATE_STARTED state at the time the
1038  *   RPC was initialized, fails later during the request enqueueing stage.
1039  *
1040  * \see nrs_resource_get_safe()
1041  * \see nrs_request_enqueue()
1042  */
1043 struct ptlrpc_nrs {
1044         spinlock_t                      nrs_lock;
1045         /** XXX Possibly replace svcpt->scp_req_lock with another lock here. */
1046         /**
1047          * List of registered policies
1048          */
1049         struct list_head                        nrs_policy_list;
1050         /**
1051          * List of policies with queued requests. Policies that have any
1052          * outstanding requests are queued here, and this list is queried
1053          * in a round-robin manner from NRS core when obtaining a request
1054          * for handling. This ensures that requests from policies that at some
1055          * point transition away from the
1056          * ptlrpc_nrs_pol_state::NRS_POL_STATE_STARTED state are drained.
1057          */
1058         struct list_head                        nrs_policy_queued;
1059         /**
1060          * Service partition for this NRS head
1061          */
1062         struct ptlrpc_service_part     *nrs_svcpt;
1063         /**
1064          * Primary policy, which is the preferred policy for handling RPCs
1065          */
1066         struct ptlrpc_nrs_policy       *nrs_policy_primary;
1067         /**
1068          * Fallback policy, which is the backup policy for handling RPCs
1069          */
1070         struct ptlrpc_nrs_policy       *nrs_policy_fallback;
1071         /**
1072          * This NRS head handles either HP or regular requests
1073          */
1074         enum ptlrpc_nrs_queue_type      nrs_queue_type;
1075         /**
1076          * # queued requests from all policies in this NRS head
1077          */
1078         unsigned long                   nrs_req_queued;
1079         /**
1080          * # scheduled requests from all policies in this NRS head
1081          */
1082         unsigned long                   nrs_req_started;
1083         /**
1084          * # policies on this NRS
1085          */
1086         unsigned                        nrs_num_pols;
1087         /**
1088          * This NRS head is in progress of starting a policy
1089          */
1090         unsigned                        nrs_policy_starting:1;
1091         /**
1092          * In progress of shutting down the whole NRS head; used during
1093          * unregistration
1094          */
1095         unsigned                        nrs_stopping:1;
1096 };
1097
1098 #define NRS_POL_NAME_MAX                16
1099
1100 struct ptlrpc_nrs_pol_desc;
1101
1102 /**
1103  * Service compatibility predicate; this determines whether a policy is adequate
1104  * for handling RPCs of a particular PTLRPC service.
1105  *
1106  * XXX:This should give the same result during policy registration and
1107  * unregistration, and for all partitions of a service; so the result should not
1108  * depend on temporal service or other properties, that may influence the
1109  * result.
1110  */
1111 typedef bool (*nrs_pol_desc_compat_t) (const struct ptlrpc_service *svc,
1112                                        const struct ptlrpc_nrs_pol_desc *desc);
1113
1114 struct ptlrpc_nrs_pol_conf {
1115         /**
1116          * Human-readable policy name
1117          */
1118         char                               nc_name[NRS_POL_NAME_MAX];
1119         /**
1120          * NRS operations for this policy
1121          */
1122         const struct ptlrpc_nrs_pol_ops   *nc_ops;
1123         /**
1124          * Service compatibility predicate
1125          */
1126         nrs_pol_desc_compat_t              nc_compat;
1127         /**
1128          * Set for policies that support a single ptlrpc service, i.e. ones that
1129          * have \a pd_compat set to nrs_policy_compat_one(). The variable value
1130          * depicts the name of the single service that such policies are
1131          * compatible with.
1132          */
1133         const char                        *nc_compat_svc_name;
1134         /**
1135          * Owner module for this policy descriptor; policies registering from a
1136          * different module to the one the NRS framework is held within
1137          * (currently ptlrpc), should set this field to THIS_MODULE.
1138          */
1139         module_t                          *nc_owner;
1140         /**
1141          * Policy registration flags; a bitmast of \e nrs_policy_flags
1142          */
1143         unsigned                           nc_flags;
1144 };
1145
1146 /**
1147  * NRS policy registering descriptor
1148  *
1149  * Is used to hold a description of a policy that can be passed to NRS core in
1150  * order to register the policy with NRS heads in different PTLRPC services.
1151  */
1152 struct ptlrpc_nrs_pol_desc {
1153         /**
1154          * Human-readable policy name
1155          */
1156         char                                    pd_name[NRS_POL_NAME_MAX];
1157         /**
1158          * Link into nrs_core::nrs_policies
1159          */
1160         struct list_head                                pd_list;
1161         /**
1162          * NRS operations for this policy
1163          */
1164         const struct ptlrpc_nrs_pol_ops        *pd_ops;
1165         /**
1166          * Service compatibility predicate
1167          */
1168         nrs_pol_desc_compat_t                   pd_compat;
1169         /**
1170          * Set for policies that are compatible with only one PTLRPC service.
1171          *
1172          * \see ptlrpc_nrs_pol_conf::nc_compat_svc_name
1173          */
1174         const char                             *pd_compat_svc_name;
1175         /**
1176          * Owner module for this policy descriptor.
1177          *
1178          * We need to hold a reference to the module whenever we might make use
1179          * of any of the module's contents, i.e.
1180          * - If one or more instances of the policy are at a state where they
1181          *   might be handling a request, i.e.
1182          *   ptlrpc_nrs_pol_state::NRS_POL_STATE_STARTED or
1183          *   ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPING as we will have to
1184          *   call into the policy's ptlrpc_nrs_pol_ops() handlers. A reference
1185          *   is taken on the module when
1186          *   \e ptlrpc_nrs_pol_desc::pd_refs becomes 1, and released when it
1187          *   becomes 0, so that we hold only one reference to the module maximum
1188          *   at any time.
1189          *
1190          *   We do not need to hold a reference to the module, even though we
1191          *   might use code and data from the module, in the following cases:
1192          * - During external policy registration, because this should happen in
1193          *   the module's init() function, in which case the module is safe from
1194          *   removal because a reference is being held on the module by the
1195          *   kernel, and iirc kmod (and I guess module-init-tools also) will
1196          *   serialize any racing processes properly anyway.
1197          * - During external policy unregistration, because this should happen
1198          *   in a module's exit() function, and any attempts to start a policy
1199          *   instance would need to take a reference on the module, and this is
1200          *   not possible once we have reached the point where the exit()
1201          *   handler is called.
1202          * - During service registration and unregistration, as service setup
1203          *   and cleanup, and policy registration, unregistration and policy
1204          *   instance starting, are serialized by \e nrs_core::nrs_mutex, so
1205          *   as long as users adhere to the convention of registering policies
1206          *   in init() and unregistering them in module exit() functions, there
1207          *   should not be a race between these operations.
1208          * - During any policy-specific lprocfs operations, because a reference
1209          *   is held by the kernel on a proc entry that has been entered by a
1210          *   syscall, so as long as proc entries are removed during unregistration time,
1211          *   then unregistration and lprocfs operations will be properly
1212          *   serialized.
1213          */
1214         module_t                               *pd_owner;
1215         /**
1216          * Bitmask of \e nrs_policy_flags
1217          */
1218         unsigned                                pd_flags;
1219         /**
1220          * # of references on this descriptor
1221          */
1222         atomic_t                                pd_refs;
1223 };
1224
1225 /**
1226  * NRS policy state
1227  *
1228  * Policies transition from one state to the other during their lifetime
1229  */
1230 enum ptlrpc_nrs_pol_state {
1231         /**
1232          * Not a valid policy state.
1233          */
1234         NRS_POL_STATE_INVALID,
1235         /**
1236          * Policies are at this state either at the start of their life, or
1237          * transition here when the user selects a different policy to act
1238          * as the primary one.
1239          */
1240         NRS_POL_STATE_STOPPED,
1241         /**
1242          * Policy is progress of stopping
1243          */
1244         NRS_POL_STATE_STOPPING,
1245         /**
1246          * Policy is in progress of starting
1247          */
1248         NRS_POL_STATE_STARTING,
1249         /**
1250          * A policy is in this state in two cases:
1251          * - it is the fallback policy, which is always in this state.
1252          * - it has been activated by the user; i.e. it is the primary policy,
1253          */
1254         NRS_POL_STATE_STARTED,
1255 };
1256
1257 /**
1258  * NRS policy information
1259  *
1260  * Used for obtaining information for the status of a policy via lprocfs
1261  */
1262 struct ptlrpc_nrs_pol_info {
1263         /**
1264          * Policy name
1265          */
1266         char                            pi_name[NRS_POL_NAME_MAX];
1267         /**
1268          * Current policy state
1269          */
1270         enum ptlrpc_nrs_pol_state       pi_state;
1271         /**
1272          * # RPCs enqueued for later dispatching by the policy
1273          */
1274         long                            pi_req_queued;
1275         /**
1276          * # RPCs started for dispatch by the policy
1277          */
1278         long                            pi_req_started;
1279         /**
1280          * Is this a fallback policy?
1281          */
1282         unsigned                        pi_fallback:1;
1283 };
1284
1285 /**
1286  * NRS policy
1287  *
1288  * There is one instance of this for each policy in each NRS head of each
1289  * PTLRPC service partition.
1290  */
1291 struct ptlrpc_nrs_policy {
1292         /**
1293          * Linkage into the NRS head's list of policies,
1294          * ptlrpc_nrs:nrs_policy_list
1295          */
1296         struct list_head                        pol_list;
1297         /**
1298          * Linkage into the NRS head's list of policies with enqueued
1299          * requests ptlrpc_nrs:nrs_policy_queued
1300          */
1301         struct list_head                        pol_list_queued;
1302         /**
1303          * Current state of this policy
1304          */
1305         enum ptlrpc_nrs_pol_state       pol_state;
1306         /**
1307          * Bitmask of nrs_policy_flags
1308          */
1309         unsigned                        pol_flags;
1310         /**
1311          * # RPCs enqueued for later dispatching by the policy
1312          */
1313         long                            pol_req_queued;
1314         /**
1315          * # RPCs started for dispatch by the policy
1316          */
1317         long                            pol_req_started;
1318         /**
1319          * Usage Reference count taken on the policy instance
1320          */
1321         long                            pol_ref;
1322         /**
1323          * The NRS head this policy has been created at
1324          */
1325         struct ptlrpc_nrs              *pol_nrs;
1326         /**
1327          * Private policy data; varies by policy type
1328          */
1329         void                           *pol_private;
1330         /**
1331          * Policy descriptor for this policy instance.
1332          */
1333         struct ptlrpc_nrs_pol_desc     *pol_desc;
1334 };
1335
1336 /**
1337  * NRS resource
1338  *
1339  * Resources are embedded into two types of NRS entities:
1340  * - Inside NRS policies, in the policy's private data in
1341  *   ptlrpc_nrs_policy::pol_private
1342  * - In objects that act as prime-level scheduling entities in different NRS
1343  *   policies; e.g. on a policy that performs round robin or similar order
1344  *   scheduling across client NIDs, there would be one NRS resource per unique
1345  *   client NID. On a policy which performs round robin scheduling across
1346  *   backend filesystem objects, there would be one resource associated with
1347  *   each of the backend filesystem objects partaking in the scheduling
1348  *   performed by the policy.
1349  *
1350  * NRS resources share a parent-child relationship, in which resources embedded
1351  * in policy instances are the parent entities, with all scheduling entities
1352  * a policy schedules across being the children, thus forming a simple resource
1353  * hierarchy. This hierarchy may be extended with one or more levels in the
1354  * future if the ability to have more than one primary policy is added.
1355  *
1356  * Upon request initialization, references to the then active NRS policies are
1357  * taken and used to later handle the dispatching of the request with one of
1358  * these policies.
1359  *
1360  * \see nrs_resource_get_safe()
1361  * \see ptlrpc_nrs_req_add()
1362  */
1363 struct ptlrpc_nrs_resource {
1364         /**
1365          * This NRS resource's parent; is NULL for resources embedded in NRS
1366          * policy instances; i.e. those are top-level ones.
1367          */
1368         struct ptlrpc_nrs_resource     *res_parent;
1369         /**
1370          * The policy associated with this resource.
1371          */
1372         struct ptlrpc_nrs_policy       *res_policy;
1373 };
1374
1375 enum {
1376         NRS_RES_FALLBACK,
1377         NRS_RES_PRIMARY,
1378         NRS_RES_MAX
1379 };
1380
1381 /* \name fifo
1382  *
1383  * FIFO policy
1384  *
1385  * This policy is a logical wrapper around previous, non-NRS functionality.
1386  * It dispatches RPCs in the same order as they arrive from the network. This
1387  * policy is currently used as the fallback policy, and the only enabled policy
1388  * on all NRS heads of all PTLRPC service partitions.
1389  * @{
1390  */
1391
1392 /**
1393  * Private data structure for the FIFO policy
1394  */
1395 struct nrs_fifo_head {
1396         /**
1397          * Resource object for policy instance.
1398          */
1399         struct ptlrpc_nrs_resource      fh_res;
1400         /**
1401          * List of queued requests.
1402          */
1403         struct list_head                        fh_list;
1404         /**
1405          * For debugging purposes.
1406          */
1407         __u64                           fh_sequence;
1408 };
1409
1410 struct nrs_fifo_req {
1411         struct list_head                fr_list;
1412         __u64                   fr_sequence;
1413 };
1414
1415 /** @} fifo */
1416
1417 /**
1418  * \name CRR-N
1419  *
1420  * CRR-N, Client Round Robin over NIDs
1421  * @{
1422  */
1423
1424 /**
1425  * private data structure for CRR-N NRS
1426  */
1427 struct nrs_crrn_net {
1428         struct ptlrpc_nrs_resource      cn_res;
1429         cfs_binheap_t                  *cn_binheap;
1430         cfs_hash_t                     *cn_cli_hash;
1431         /**
1432          * Used when a new scheduling round commences, in order to synchronize
1433          * all clients with the new round number.
1434          */
1435         __u64                           cn_round;
1436         /**
1437          * Determines the relevant ordering amongst request batches within a
1438          * scheduling round.
1439          */
1440         __u64                           cn_sequence;
1441         /**
1442          * Round Robin quantum; the maximum number of RPCs that each request
1443          * batch for each client can have in a scheduling round.
1444          */
1445         __u16                           cn_quantum;
1446 };
1447
1448 /**
1449  * Object representing a client in CRR-N, as identified by its NID
1450  */
1451 struct nrs_crrn_client {
1452         struct ptlrpc_nrs_resource      cc_res;
1453         struct hlist_node               cc_hnode;
1454         lnet_nid_t                      cc_nid;
1455         /**
1456          * The round number against which this client is currently scheduling
1457          * requests.
1458          */
1459         __u64                           cc_round;
1460         /**
1461          * The sequence number used for requests scheduled by this client during
1462          * the current round number.
1463          */
1464         __u64                           cc_sequence;
1465         atomic_t                        cc_ref;
1466         /**
1467          * Round Robin quantum; the maximum number of RPCs the client is allowed
1468          * to schedule in a single batch of each round.
1469          */
1470         __u16                           cc_quantum;
1471         /**
1472          * # of pending requests for this client, on all existing rounds
1473          */
1474         __u16                           cc_active;
1475 };
1476
1477 /**
1478  * CRR-N NRS request definition
1479  */
1480 struct nrs_crrn_req {
1481         /**
1482          * Round number for this request; shared with all other requests in the
1483          * same batch.
1484          */
1485         __u64                   cr_round;
1486         /**
1487          * Sequence number for this request; shared with all other requests in
1488          * the same batch.
1489          */
1490         __u64                   cr_sequence;
1491 };
1492
1493 /**
1494  * CRR-N policy operations.
1495  */
1496 enum nrs_ctl_crr {
1497         /**
1498          * Read the RR quantum size of a CRR-N policy.
1499          */
1500         NRS_CTL_CRRN_RD_QUANTUM = PTLRPC_NRS_CTL_1ST_POL_SPEC,
1501         /**
1502          * Write the RR quantum size of a CRR-N policy.
1503          */
1504         NRS_CTL_CRRN_WR_QUANTUM,
1505 };
1506
1507 /** @} CRR-N */
1508
1509 /**
1510  * \name ORR/TRR
1511  *
1512  * ORR/TRR (Object-based Round Robin/Target-based Round Robin) NRS policies
1513  * @{
1514  */
1515
1516 /**
1517  * Lower and upper byte offsets of a brw RPC
1518  */
1519 struct nrs_orr_req_range {
1520         __u64           or_start;
1521         __u64           or_end;
1522 };
1523
1524 /**
1525  * RPC types supported by the ORR/TRR policies
1526  */
1527 enum nrs_orr_supp {
1528         NOS_OST_READ  = (1 << 0),
1529         NOS_OST_WRITE = (1 << 1),
1530         NOS_OST_RW    = (NOS_OST_READ | NOS_OST_WRITE),
1531         /**
1532          * Default value for policies.
1533          */
1534         NOS_DFLT      = NOS_OST_READ
1535 };
1536
1537 /**
1538  * As unique keys for grouping RPCs together, we use the object's OST FID for
1539  * the ORR policy, and the OST index for the TRR policy.
1540  *
1541  * XXX: We waste some space for TRR policy instances by using a union, but it
1542  *      allows to consolidate some of the code between ORR and TRR, and these
1543  *      policies will probably eventually merge into one anyway.
1544  */
1545 struct nrs_orr_key {
1546         union {
1547                 /** object FID for ORR */
1548                 struct lu_fid   ok_fid;
1549                 /** OST index for TRR */
1550                 __u32           ok_idx;
1551         };
1552 };
1553
1554 /**
1555  * The largest base string for unique hash/slab object names is
1556  * "nrs_orr_reg_", so 13 characters. We add 3 to this to be used for the CPT
1557  * id number, so this _should_ be more than enough for the maximum number of
1558  * CPTs on any system. If it does happen that this statement is incorrect,
1559  * nrs_orr_genobjname() will inevitably yield a non-unique name and cause
1560  * kmem_cache_create() to complain (on Linux), so the erroneous situation
1561  * will hopefully not go unnoticed.
1562  */
1563 #define NRS_ORR_OBJ_NAME_MAX    (sizeof("nrs_orr_reg_") + 3)
1564
1565 /**
1566  * private data structure for ORR and TRR NRS
1567  */
1568 struct nrs_orr_data {
1569         struct ptlrpc_nrs_resource      od_res;
1570         cfs_binheap_t                  *od_binheap;
1571         cfs_hash_t                     *od_obj_hash;
1572         struct kmem_cache                      *od_cache;
1573         /**
1574          * Used when a new scheduling round commences, in order to synchronize
1575          * all object or OST batches with the new round number.
1576          */
1577         __u64                           od_round;
1578         /**
1579          * Determines the relevant ordering amongst request batches within a
1580          * scheduling round.
1581          */
1582         __u64                           od_sequence;
1583         /**
1584          * RPC types that are currently supported.
1585          */
1586         enum nrs_orr_supp               od_supp;
1587         /**
1588          * Round Robin quantum; the maxium number of RPCs that each request
1589          * batch for each object or OST can have in a scheduling round.
1590          */
1591         __u16                           od_quantum;
1592         /**
1593          * Whether to use physical disk offsets or logical file offsets.
1594          */
1595         bool                            od_physical;
1596         /**
1597          * XXX: We need to provide a persistently allocated string to hold
1598          * unique object names for this policy, since in currently supported
1599          * versions of Linux by Lustre, kmem_cache_create() just sets a pointer
1600          * to the name string provided. kstrdup() is used in the version of
1601          * kmeme_cache_create() in current Linux mainline, so we may be able to
1602          * remove this in the future.
1603          */
1604         char                            od_objname[NRS_ORR_OBJ_NAME_MAX];
1605 };
1606
1607 /**
1608  * Represents a backend-fs object or OST in the ORR and TRR policies
1609  * respectively
1610  */
1611 struct nrs_orr_object {
1612         struct ptlrpc_nrs_resource      oo_res;
1613         struct hlist_node               oo_hnode;
1614         /**
1615          * The round number against which requests are being scheduled for this
1616          * object or OST
1617          */
1618         __u64                           oo_round;
1619         /**
1620          * The sequence number used for requests scheduled for this object or
1621          * OST during the current round number.
1622          */
1623         __u64                           oo_sequence;
1624         /**
1625          * The key of the object or OST for which this structure instance is
1626          * scheduling RPCs
1627          */
1628         struct nrs_orr_key              oo_key;
1629         atomic_t                        oo_ref;
1630         /**
1631          * Round Robin quantum; the maximum number of RPCs that are allowed to
1632          * be scheduled for the object or OST in a single batch of each round.
1633          */
1634         __u16                           oo_quantum;
1635         /**
1636          * # of pending requests for this object or OST, on all existing rounds
1637          */
1638         __u16                           oo_active;
1639 };
1640
1641 /**
1642  * ORR/TRR NRS request definition
1643  */
1644 struct nrs_orr_req {
1645         /**
1646          * The offset range this request covers
1647          */
1648         struct nrs_orr_req_range        or_range;
1649         /**
1650          * Round number for this request; shared with all other requests in the
1651          * same batch.
1652          */
1653         __u64                           or_round;
1654         /**
1655          * Sequence number for this request; shared with all other requests in
1656          * the same batch.
1657          */
1658         __u64                           or_sequence;
1659         /**
1660          * For debugging purposes.
1661          */
1662         struct nrs_orr_key              or_key;
1663         /**
1664          * An ORR policy instance has filled in request information while
1665          * enqueueing the request on the service partition's regular NRS head.
1666          */
1667         unsigned int                    or_orr_set:1;
1668         /**
1669          * A TRR policy instance has filled in request information while
1670          * enqueueing the request on the service partition's regular NRS head.
1671          */
1672         unsigned int                    or_trr_set:1;
1673         /**
1674          * Request offset ranges have been filled in with logical offset
1675          * values.
1676          */
1677         unsigned int                    or_logical_set:1;
1678         /**
1679          * Request offset ranges have been filled in with physical offset
1680          * values.
1681          */
1682         unsigned int                    or_physical_set:1;
1683 };
1684
1685 /** @} ORR/TRR */
1686
1687 /**
1688  * NRS request
1689  *
1690  * Instances of this object exist embedded within ptlrpc_request; the main
1691  * purpose of this object is to hold references to the request's resources
1692  * for the lifetime of the request, and to hold properties that policies use
1693  * use for determining the request's scheduling priority.
1694  * */
1695 struct ptlrpc_nrs_request {
1696         /**
1697          * The request's resource hierarchy.
1698          */
1699         struct ptlrpc_nrs_resource     *nr_res_ptrs[NRS_RES_MAX];
1700         /**
1701          * Index into ptlrpc_nrs_request::nr_res_ptrs of the resource of the
1702          * policy that was used to enqueue the request.
1703          *
1704          * \see nrs_request_enqueue()
1705          */
1706         unsigned                        nr_res_idx;
1707         unsigned                        nr_initialized:1;
1708         unsigned                        nr_enqueued:1;
1709         unsigned                        nr_started:1;
1710         unsigned                        nr_finalized:1;
1711         cfs_binheap_node_t              nr_node;
1712
1713         /**
1714          * Policy-specific fields, used for determining a request's scheduling
1715          * priority, and other supporting functionality.
1716          */
1717         union {
1718                 /**
1719                  * Fields for the FIFO policy
1720                  */
1721                 struct nrs_fifo_req     fifo;
1722                 /**
1723                  * CRR-N request defintion
1724                  */
1725                 struct nrs_crrn_req     crr;
1726                 /** ORR and TRR share the same request definition */
1727                 struct nrs_orr_req      orr;
1728         } nr_u;
1729         /**
1730          * Externally-registering policies may want to use this to allocate
1731          * their own request properties.
1732          */
1733         void                           *ext;
1734 };
1735
1736 /** @} nrs */
1737
1738 /**
1739  * Basic request prioritization operations structure.
1740  * The whole idea is centered around locks and RPCs that might affect locks.
1741  * When a lock is contended we try to give priority to RPCs that might lead
1742  * to fastest release of that lock.
1743  * Currently only implemented for OSTs only in a way that makes all
1744  * IO and truncate RPCs that are coming from a locked region where a lock is
1745  * contended a priority over other requests.
1746  */
1747 struct ptlrpc_hpreq_ops {
1748         /**
1749          * Check if the lock handle of the given lock is the same as
1750          * taken from the request.
1751          */
1752         int  (*hpreq_lock_match)(struct ptlrpc_request *, struct ldlm_lock *);
1753         /**
1754          * Check if the request is a high priority one.
1755          */
1756         int  (*hpreq_check)(struct ptlrpc_request *);
1757         /**
1758          * Called after the request has been handled.
1759          */
1760         void (*hpreq_fini)(struct ptlrpc_request *);
1761 };
1762
1763 /**
1764  * Represents remote procedure call.
1765  *
1766  * This is a staple structure used by everybody wanting to send a request
1767  * in Lustre.
1768  */
1769 struct ptlrpc_request {
1770         /* Request type: one of PTL_RPC_MSG_* */
1771         int rq_type;
1772         /** Result of request processing */
1773         int rq_status;
1774         /**
1775          * Linkage item through which this request is included into
1776          * sending/delayed lists on client and into rqbd list on server
1777          */
1778         struct list_head rq_list;
1779         /**
1780          * Server side list of incoming unserved requests sorted by arrival
1781          * time.  Traversed from time to time to notice about to expire
1782          * requests and sent back "early replies" to clients to let them
1783          * know server is alive and well, just very busy to service their
1784          * requests in time
1785          */
1786         struct list_head rq_timed_list;
1787         /** server-side history, used for debuging purposes. */
1788         struct list_head rq_history_list;
1789         /** server-side per-export list */
1790         struct list_head rq_exp_list;
1791         /** server-side hp handlers */
1792         struct ptlrpc_hpreq_ops *rq_ops;
1793
1794         /** initial thread servicing this request */
1795         struct ptlrpc_thread *rq_svc_thread;
1796
1797         /** history sequence # */
1798         __u64 rq_history_seq;
1799         /** \addtogroup  nrs
1800          * @{
1801          */
1802         /** stub for NRS request */
1803         struct ptlrpc_nrs_request rq_nrq;
1804         /** @} nrs */
1805         /** the index of service's srv_at_array into which request is linked */
1806         time_t rq_at_index;
1807         /** Lock to protect request flags and some other important bits, like
1808          * rq_list
1809          */
1810         spinlock_t rq_lock;
1811         /** client-side flags are serialized by rq_lock */
1812         unsigned int rq_intr:1, rq_replied:1, rq_err:1,
1813                 rq_timedout:1, rq_resend:1, rq_restart:1,
1814                 /**
1815                  * when ->rq_replay is set, request is kept by the client even
1816                  * after server commits corresponding transaction. This is
1817                  * used for operations that require sequence of multiple
1818                  * requests to be replayed. The only example currently is file
1819                  * open/close. When last request in such a sequence is
1820                  * committed, ->rq_replay is cleared on all requests in the
1821                  * sequence.
1822                  */
1823                 rq_replay:1,
1824                 rq_no_resend:1, rq_waiting:1, rq_receiving_reply:1,
1825                 rq_no_delay:1, rq_net_err:1, rq_wait_ctx:1,
1826                 rq_early:1, rq_must_unlink:1,
1827                 rq_memalloc:1,      /* req originated from "kswapd" */
1828                 /* server-side flags */
1829                 rq_packed_final:1,  /* packed final reply */
1830                 rq_hp:1,            /* high priority RPC */
1831                 rq_at_linked:1,     /* link into service's srv_at_array */
1832                 rq_reply_truncate:1,
1833                 rq_committed:1,
1834                 /* whether the "rq_set" is a valid one */
1835                 rq_invalid_rqset:1,
1836                 rq_generation_set:1,
1837                 /* do not resend request on -EINPROGRESS */
1838                 rq_no_retry_einprogress:1,
1839                 /* allow the req to be sent if the import is in recovery
1840                  * status */
1841                 rq_allow_replay:1;
1842
1843         unsigned int rq_nr_resend;
1844
1845         enum rq_phase rq_phase; /* one of RQ_PHASE_* */
1846         enum rq_phase rq_next_phase; /* one of RQ_PHASE_* to be used next */
1847         atomic_t rq_refcount;/* client-side refcount for SENT race,
1848                                     server-side refcounf for multiple replies */
1849
1850         /** Portal to which this request would be sent */
1851         short rq_request_portal;  /* XXX FIXME bug 249 */
1852         /** Portal where to wait for reply and where reply would be sent */
1853         short rq_reply_portal;    /* XXX FIXME bug 249 */
1854
1855         /**
1856          * client-side:
1857          * !rq_truncate : # reply bytes actually received,
1858          *  rq_truncate : required repbuf_len for resend
1859          */
1860         int rq_nob_received;
1861         /** Request length */
1862         int rq_reqlen;
1863         /** Reply length */
1864         int rq_replen;
1865         /** Request message - what client sent */
1866         struct lustre_msg *rq_reqmsg;
1867         /** Reply message - server response */
1868         struct lustre_msg *rq_repmsg;
1869         /** Transaction number */
1870         __u64 rq_transno;
1871         /** xid */
1872         __u64 rq_xid;
1873         /**
1874          * List item to for replay list. Not yet commited requests get linked
1875          * there.
1876          * Also see \a rq_replay comment above.
1877          */
1878         struct list_head rq_replay_list;
1879
1880         /**
1881          * security and encryption data
1882          * @{ */
1883         struct ptlrpc_cli_ctx   *rq_cli_ctx;     /**< client's half ctx */
1884         struct ptlrpc_svc_ctx   *rq_svc_ctx;     /**< server's half ctx */
1885         struct list_head               rq_ctx_chain;   /**< link to waited ctx */
1886
1887         struct sptlrpc_flavor    rq_flvr;       /**< for client & server */
1888         enum lustre_sec_part     rq_sp_from;
1889
1890         /* client/server security flags */
1891         unsigned int
1892                                  rq_ctx_init:1,      /* context initiation */
1893                                  rq_ctx_fini:1,      /* context destroy */
1894                                  rq_bulk_read:1,     /* request bulk read */
1895                                  rq_bulk_write:1,    /* request bulk write */
1896                                  /* server authentication flags */
1897                                  rq_auth_gss:1,      /* authenticated by gss */
1898                                  rq_auth_remote:1,   /* authed as remote user */
1899                                  rq_auth_usr_root:1, /* authed as root */
1900                                  rq_auth_usr_mdt:1,  /* authed as mdt */
1901                                  rq_auth_usr_ost:1,  /* authed as ost */
1902                                  /* security tfm flags */
1903                                  rq_pack_udesc:1,
1904                                  rq_pack_bulk:1,
1905                                  /* doesn't expect reply FIXME */
1906                                  rq_no_reply:1,
1907                                  rq_pill_init:1;     /* pill initialized */
1908
1909         uid_t               rq_auth_uid;        /* authed uid */
1910         uid_t               rq_auth_mapped_uid; /* authed uid mapped to */
1911
1912         /* (server side), pointed directly into req buffer */
1913         struct ptlrpc_user_desc *rq_user_desc;
1914
1915         /* various buffer pointers */
1916         struct lustre_msg       *rq_reqbuf;      /* req wrapper */
1917         char                *rq_repbuf;      /* rep buffer */
1918         struct lustre_msg       *rq_repdata;     /* rep wrapper msg */
1919         struct lustre_msg       *rq_clrbuf;      /* only in priv mode */
1920         int                   rq_reqbuf_len;  /* req wrapper buf len */
1921         int                   rq_reqdata_len; /* req wrapper msg len */
1922         int                   rq_repbuf_len;  /* rep buffer len */
1923         int                   rq_repdata_len; /* rep wrapper msg len */
1924         int                   rq_clrbuf_len;  /* only in priv mode */
1925         int                   rq_clrdata_len; /* only in priv mode */
1926
1927         /** early replies go to offset 0, regular replies go after that */
1928         unsigned int         rq_reply_off;
1929
1930         /** @} */
1931
1932         /** Fields that help to see if request and reply were swabbed or not */
1933         __u32 rq_req_swab_mask;
1934         __u32 rq_rep_swab_mask;
1935
1936         /** What was import generation when this request was sent */
1937         int rq_import_generation;
1938         enum lustre_imp_state rq_send_state;
1939
1940         /** how many early replies (for stats) */
1941         int rq_early_count;
1942
1943         /** client+server request */
1944         lnet_handle_md_t     rq_req_md_h;
1945         struct ptlrpc_cb_id  rq_req_cbid;
1946         /** optional time limit for send attempts */
1947         cfs_duration_t       rq_delay_limit;
1948         /** time request was first queued */
1949         cfs_time_t         rq_queued_time;
1950
1951         /* server-side... */
1952         /** request arrival time */
1953         struct timeval       rq_arrival_time;
1954         /** separated reply state */
1955         struct ptlrpc_reply_state *rq_reply_state;
1956         /** incoming request buffer */
1957         struct ptlrpc_request_buffer_desc *rq_rqbd;
1958
1959         /** client-only incoming reply */
1960         lnet_handle_md_t     rq_reply_md_h;
1961         wait_queue_head_t         rq_reply_waitq;
1962         struct ptlrpc_cb_id  rq_reply_cbid;
1963
1964         /** our LNet NID */
1965         lnet_nid_t         rq_self;
1966         /** Peer description (the other side) */
1967         lnet_process_id_t    rq_peer;
1968         /** Server-side, export on which request was received */
1969         struct obd_export   *rq_export;
1970         /** Client side, import where request is being sent */
1971         struct obd_import   *rq_import;
1972
1973         /** Replay callback, called after request is replayed at recovery */
1974         void (*rq_replay_cb)(struct ptlrpc_request *);
1975         /**
1976          * Commit callback, called when request is committed and about to be
1977          * freed.
1978          */
1979         void (*rq_commit_cb)(struct ptlrpc_request *);
1980         /** Opaq data for replay and commit callbacks. */
1981         void  *rq_cb_data;
1982
1983         /** For bulk requests on client only: bulk descriptor */
1984         struct ptlrpc_bulk_desc *rq_bulk;
1985
1986         /** client outgoing req */
1987         /**
1988          * when request/reply sent (secs), or time when request should be sent
1989          */
1990         time_t rq_sent;
1991         /** time for request really sent out */
1992         time_t rq_real_sent;
1993
1994         /** when request must finish. volatile
1995          * so that servers' early reply updates to the deadline aren't
1996          * kept in per-cpu cache */
1997         volatile time_t rq_deadline;
1998         /** when req reply unlink must finish. */
1999         time_t rq_reply_deadline;
2000         /** when req bulk unlink must finish. */
2001         time_t rq_bulk_deadline;
2002         /**
2003          * service time estimate (secs)
2004          * If the requestsis not served by this time, it is marked as timed out.
2005          */
2006         int    rq_timeout;
2007
2008         /** Multi-rpc bits */
2009         /** Per-request waitq introduced by bug 21938 for recovery waiting */
2010         wait_queue_head_t rq_set_waitq;
2011         /** Link item for request set lists */
2012         struct list_head  rq_set_chain;
2013         /** Link back to the request set */
2014         struct ptlrpc_request_set *rq_set;
2015         /** Async completion handler, called when reply is received */
2016         ptlrpc_interpterer_t rq_interpret_reply;
2017         /** Async completion context */
2018         union ptlrpc_async_args rq_async_args;
2019
2020         /** Pool if request is from preallocated list */
2021         struct ptlrpc_request_pool *rq_pool;
2022
2023         struct lu_context          rq_session;
2024         struct lu_context          rq_recov_session;
2025
2026         /** request format description */
2027         struct req_capsule        rq_pill;
2028 };
2029
2030 /**
2031  * Call completion handler for rpc if any, return it's status or original
2032  * rc if there was no handler defined for this request.
2033  */
2034 static inline int ptlrpc_req_interpret(const struct lu_env *env,
2035                                        struct ptlrpc_request *req, int rc)
2036 {
2037         if (req->rq_interpret_reply != NULL) {
2038                 req->rq_status = req->rq_interpret_reply(env, req,
2039                                                          &req->rq_async_args,
2040                                                          rc);
2041                 return req->rq_status;
2042         }
2043         return rc;
2044 }
2045
2046 /** \addtogroup  nrs
2047  * @{
2048  */
2049 int ptlrpc_nrs_policy_register(struct ptlrpc_nrs_pol_conf *conf);
2050 int ptlrpc_nrs_policy_unregister(struct ptlrpc_nrs_pol_conf *conf);
2051 void ptlrpc_nrs_req_hp_move(struct ptlrpc_request *req);
2052 void nrs_policy_get_info_locked(struct ptlrpc_nrs_policy *policy,
2053                                 struct ptlrpc_nrs_pol_info *info);
2054
2055 /*
2056  * Can the request be moved from the regular NRS head to the high-priority NRS
2057  * head (of the same PTLRPC service partition), if any?
2058  *
2059  * For a reliable result, this should be checked under svcpt->scp_req lock.
2060  */
2061 static inline bool ptlrpc_nrs_req_can_move(struct ptlrpc_request *req)
2062 {
2063         struct ptlrpc_nrs_request *nrq = &req->rq_nrq;
2064
2065         /**
2066          * LU-898: Check ptlrpc_nrs_request::nr_enqueued to make sure the
2067          * request has been enqueued first, and ptlrpc_nrs_request::nr_started
2068          * to make sure it has not been scheduled yet (analogous to previous
2069          * (non-NRS) checking of !list_empty(&ptlrpc_request::rq_list).
2070          */
2071         return nrq->nr_enqueued && !nrq->nr_started && !req->rq_hp;
2072 }
2073 /** @} nrs */
2074
2075 /**
2076  * Returns 1 if request buffer at offset \a index was already swabbed
2077  */
2078 static inline int lustre_req_swabbed(struct ptlrpc_request *req, int index)
2079 {
2080         LASSERT(index < sizeof(req->rq_req_swab_mask) * 8);
2081         return req->rq_req_swab_mask & (1 << index);
2082 }
2083
2084 /**
2085  * Returns 1 if request reply buffer at offset \a index was already swabbed
2086  */
2087 static inline int lustre_rep_swabbed(struct ptlrpc_request *req, int index)
2088 {
2089         LASSERT(index < sizeof(req->rq_rep_swab_mask) * 8);
2090         return req->rq_rep_swab_mask & (1 << index);
2091 }
2092
2093 /**
2094  * Returns 1 if request needs to be swabbed into local cpu byteorder
2095  */
2096 static inline int ptlrpc_req_need_swab(struct ptlrpc_request *req)
2097 {
2098         return lustre_req_swabbed(req, MSG_PTLRPC_HEADER_OFF);
2099 }
2100
2101 /**
2102  * Returns 1 if request reply needs to be swabbed into local cpu byteorder
2103  */
2104 static inline int ptlrpc_rep_need_swab(struct ptlrpc_request *req)
2105 {
2106         return lustre_rep_swabbed(req, MSG_PTLRPC_HEADER_OFF);
2107 }
2108
2109 /**
2110  * Mark request buffer at offset \a index that it was already swabbed
2111  */
2112 static inline void lustre_set_req_swabbed(struct ptlrpc_request *req, int index)
2113 {
2114         LASSERT(index < sizeof(req->rq_req_swab_mask) * 8);
2115         LASSERT((req->rq_req_swab_mask & (1 << index)) == 0);
2116         req->rq_req_swab_mask |= 1 << index;
2117 }
2118
2119 /**
2120  * Mark request reply buffer at offset \a index that it was already swabbed
2121  */
2122 static inline void lustre_set_rep_swabbed(struct ptlrpc_request *req, int index)
2123 {
2124         LASSERT(index < sizeof(req->rq_rep_swab_mask) * 8);
2125         LASSERT((req->rq_rep_swab_mask & (1 << index)) == 0);
2126         req->rq_rep_swab_mask |= 1 << index;
2127 }
2128
2129 /**
2130  * Convert numerical request phase value \a phase into text string description
2131  */
2132 static inline const char *
2133 ptlrpc_phase2str(enum rq_phase phase)
2134 {
2135         switch (phase) {
2136         case RQ_PHASE_NEW:
2137                 return "New";
2138         case RQ_PHASE_RPC:
2139                 return "Rpc";
2140         case RQ_PHASE_BULK:
2141                 return "Bulk";
2142         case RQ_PHASE_INTERPRET:
2143                 return "Interpret";
2144         case RQ_PHASE_COMPLETE:
2145                 return "Complete";
2146         case RQ_PHASE_UNREGISTERING:
2147                 return "Unregistering";
2148         default:
2149                 return "?Phase?";
2150         }
2151 }
2152
2153 /**
2154  * Convert numerical request phase of the request \a req into text stringi
2155  * description
2156  */
2157 static inline const char *
2158 ptlrpc_rqphase2str(struct ptlrpc_request *req)
2159 {
2160         return ptlrpc_phase2str(req->rq_phase);
2161 }
2162
2163 /**
2164  * Debugging functions and helpers to print request structure into debug log
2165  * @{
2166  */
2167 /* Spare the preprocessor, spoil the bugs. */
2168 #define FLAG(field, str) (field ? str : "")
2169
2170 /** Convert bit flags into a string */
2171 #define DEBUG_REQ_FLAGS(req)                                                \
2172         ptlrpc_rqphase2str(req),                                                \
2173         FLAG(req->rq_intr, "I"), FLAG(req->rq_replied, "R"),                \
2174         FLAG(req->rq_err, "E"),                                          \
2175         FLAG(req->rq_timedout, "X") /* eXpired */, FLAG(req->rq_resend, "S"),   \
2176         FLAG(req->rq_restart, "T"), FLAG(req->rq_replay, "P"),            \
2177         FLAG(req->rq_no_resend, "N"),                                      \
2178         FLAG(req->rq_waiting, "W"),                                          \
2179         FLAG(req->rq_wait_ctx, "C"), FLAG(req->rq_hp, "H"),                  \
2180         FLAG(req->rq_committed, "M")
2181
2182 #define REQ_FLAGS_FMT "%s:%s%s%s%s%s%s%s%s%s%s%s%s"
2183
2184 void _debug_req(struct ptlrpc_request *req,
2185                 struct libcfs_debug_msg_data *data, const char *fmt, ...)
2186         __attribute__ ((format (printf, 3, 4)));
2187
2188 /**
2189  * Helper that decides if we need to print request accordig to current debug
2190  * level settings
2191  */
2192 #define debug_req(msgdata, mask, cdls, req, fmt, a...)                  \
2193 do {                                                                      \
2194         CFS_CHECK_STACK(msgdata, mask, cdls);                            \
2195                                                                               \
2196         if (((mask) & D_CANTMASK) != 0 ||                                    \
2197             ((libcfs_debug & (mask)) != 0 &&                              \
2198              (libcfs_subsystem_debug & DEBUG_SUBSYSTEM) != 0))          \
2199                 _debug_req((req), msgdata, fmt, ##a);                    \
2200 } while(0)
2201
2202 /**
2203  * This is the debug print function you need to use to print request sturucture
2204  * content into lustre debug log.
2205  * for most callers (level is a constant) this is resolved at compile time */
2206 #define DEBUG_REQ(level, req, fmt, args...)                                \
2207 do {                                                                      \
2208         if ((level) & (D_ERROR | D_WARNING)) {                          \
2209                 static cfs_debug_limit_state_t cdls;                      \
2210                 LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, level, &cdls);          \
2211                 debug_req(&msgdata, level, &cdls, req, "@@@ "fmt" ", ## args);\
2212         } else {                                                              \
2213                 LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, level, NULL);            \
2214                 debug_req(&msgdata, level, NULL, req, "@@@ "fmt" ", ## args); \
2215         }                                                                    \
2216 } while (0)
2217 /** @} */
2218
2219 /**
2220  * Structure that defines a single page of a bulk transfer
2221  */
2222 struct ptlrpc_bulk_page {
2223         /** Linkage to list of pages in a bulk */
2224         struct list_head       bp_link;
2225         /**
2226          * Number of bytes in a page to transfer starting from \a bp_pageoffset
2227          */
2228         int           bp_buflen;
2229         /** offset within a page */
2230         int           bp_pageoffset;
2231         /** The page itself */
2232         struct page     *bp_page;
2233 };
2234
2235 #define BULK_GET_SOURCE   0
2236 #define BULK_PUT_SINK     1
2237 #define BULK_GET_SINK     2
2238 #define BULK_PUT_SOURCE   3
2239
2240 /**
2241  * Definition of bulk descriptor.
2242  * Bulks are special "Two phase" RPCs where initial request message
2243  * is sent first and it is followed bt a transfer (o receiving) of a large
2244  * amount of data to be settled into pages referenced from the bulk descriptors.
2245  * Bulks transfers (the actual data following the small requests) are done
2246  * on separate LNet portals.
2247  * In lustre we use bulk transfers for READ and WRITE transfers from/to OSTs.
2248  *  Another user is readpage for MDT.
2249  */
2250 struct ptlrpc_bulk_desc {
2251         /** completed with failure */
2252         unsigned long bd_failure:1;
2253         /** {put,get}{source,sink} */
2254         unsigned long bd_type:2;
2255         /** client side */
2256         unsigned long bd_registered:1;
2257         /** For serialization with callback */
2258         spinlock_t bd_lock;
2259         /** Import generation when request for this bulk was sent */
2260         int bd_import_generation;
2261         /** LNet portal for this bulk */
2262         __u32 bd_portal;
2263         /** Server side - export this bulk created for */
2264         struct obd_export *bd_export;
2265         /** Client side - import this bulk was sent on */
2266         struct obd_import *bd_import;
2267         /** Back pointer to the request */
2268         struct ptlrpc_request *bd_req;
2269         wait_queue_head_t           bd_waitq;   /* server side only WQ */
2270         int                 bd_iov_count;    /* # entries in bd_iov */
2271         int                 bd_max_iov;      /* allocated size of bd_iov */
2272         int                 bd_nob;       /* # bytes covered */
2273         int                 bd_nob_transferred; /* # bytes GOT/PUT */
2274
2275         __u64             bd_last_xid;
2276
2277         struct ptlrpc_cb_id    bd_cbid;  /* network callback info */
2278         lnet_nid_t           bd_sender;       /* stash event::sender */
2279         int                     bd_md_count;    /* # valid entries in bd_mds */
2280         int                     bd_md_max_brw;  /* max entries in bd_mds */
2281         /** array of associated MDs */
2282         lnet_handle_md_t        bd_mds[PTLRPC_BULK_OPS_COUNT];
2283
2284         /*
2285          * encrypt iov, size is either 0 or bd_iov_count.
2286          */
2287         lnet_kiov_t        *bd_enc_iov;
2288
2289         lnet_kiov_t         bd_iov[0];
2290 };
2291
2292 enum {
2293         SVC_STOPPED     = 1 << 0,
2294         SVC_STOPPING    = 1 << 1,
2295         SVC_STARTING    = 1 << 2,
2296         SVC_RUNNING     = 1 << 3,
2297         SVC_EVENT       = 1 << 4,
2298         SVC_SIGNAL      = 1 << 5,
2299 };
2300
2301 #define PTLRPC_THR_NAME_LEN             32
2302 /**
2303  * Definition of server service thread structure
2304  */
2305 struct ptlrpc_thread {
2306         /**
2307          * List of active threads in svc->srv_threads
2308          */
2309         struct list_head t_link;
2310         /**
2311          * thread-private data (preallocated memory)
2312          */
2313         void *t_data;
2314         __u32 t_flags;
2315         /**
2316          * service thread index, from ptlrpc_start_threads
2317          */
2318         unsigned int t_id;
2319         /**
2320          * service thread pid
2321          */
2322         pid_t t_pid;
2323         /**
2324          * put watchdog in the structure per thread b=14840
2325          *
2326          * Lustre watchdog is removed for client in the hope
2327          * of a generic watchdog can be merged in kernel.
2328          * When that happens, we should add below back.
2329          *
2330          * struct lc_watchdog *t_watchdog;
2331          */
2332         /**
2333          * the svc this thread belonged to b=18582
2334          */
2335         struct ptlrpc_service_part      *t_svcpt;
2336         wait_queue_head_t                       t_ctl_waitq;
2337         struct lu_env                   *t_env;
2338         char                            t_name[PTLRPC_THR_NAME_LEN];
2339 };
2340
2341 static inline int thread_is_init(struct ptlrpc_thread *thread)
2342 {
2343         return thread->t_flags == 0;
2344 }
2345
2346 static inline int thread_is_stopped(struct ptlrpc_thread *thread)
2347 {
2348         return !!(thread->t_flags & SVC_STOPPED);
2349 }
2350
2351 static inline int thread_is_stopping(struct ptlrpc_thread *thread)
2352 {
2353         return !!(thread->t_flags & SVC_STOPPING);
2354 }
2355
2356 static inline int thread_is_starting(struct ptlrpc_thread *thread)
2357 {
2358         return !!(thread->t_flags & SVC_STARTING);
2359 }
2360
2361 static inline int thread_is_running(struct ptlrpc_thread *thread)
2362 {
2363         return !!(thread->t_flags & SVC_RUNNING);
2364 }
2365
2366 static inline int thread_is_event(struct ptlrpc_thread *thread)
2367 {
2368         return !!(thread->t_flags & SVC_EVENT);
2369 }
2370
2371 static inline int thread_is_signal(struct ptlrpc_thread *thread)
2372 {
2373         return !!(thread->t_flags & SVC_SIGNAL);
2374 }
2375
2376 static inline void thread_clear_flags(struct ptlrpc_thread *thread, __u32 flags)
2377 {
2378         thread->t_flags &= ~flags;
2379 }
2380
2381 static inline void thread_set_flags(struct ptlrpc_thread *thread, __u32 flags)
2382 {
2383         thread->t_flags = flags;
2384 }
2385
2386 static inline void thread_add_flags(struct ptlrpc_thread *thread, __u32 flags)
2387 {
2388         thread->t_flags |= flags;
2389 }
2390
2391 static inline int thread_test_and_clear_flags(struct ptlrpc_thread *thread,
2392                                               __u32 flags)
2393 {
2394         if (thread->t_flags & flags) {
2395                 thread->t_flags &= ~flags;
2396                 return 1;
2397         }
2398         return 0;
2399 }
2400
2401 /**
2402  * Request buffer descriptor structure.
2403  * This is a structure that contains one posted request buffer for service.
2404  * Once data land into a buffer, event callback creates actual request and
2405  * notifies wakes one of the service threads to process new incoming request.
2406  * More than one request can fit into the buffer.
2407  */
2408 struct ptlrpc_request_buffer_desc {
2409         /** Link item for rqbds on a service */
2410         struct list_head             rqbd_list;
2411         /** History of requests for this buffer */
2412         struct list_head             rqbd_reqs;
2413         /** Back pointer to service for which this buffer is registered */
2414         struct ptlrpc_service_part *rqbd_svcpt;
2415         /** LNet descriptor */
2416         lnet_handle_md_t       rqbd_md_h;
2417         int                 rqbd_refcount;
2418         /** The buffer itself */
2419         char              *rqbd_buffer;
2420         struct ptlrpc_cb_id    rqbd_cbid;
2421         /**
2422          * This "embedded" request structure is only used for the
2423          * last request to fit into the buffer
2424          */
2425         struct ptlrpc_request  rqbd_req;
2426 };
2427
2428 typedef int  (*svc_handler_t)(struct ptlrpc_request *req);
2429
2430 struct ptlrpc_service_ops {
2431         /**
2432          * if non-NULL called during thread creation (ptlrpc_start_thread())
2433          * to initialize service specific per-thread state.
2434          */
2435         int             (*so_thr_init)(struct ptlrpc_thread *thr);
2436         /**
2437          * if non-NULL called during thread shutdown (ptlrpc_main()) to
2438          * destruct state created by ->srv_init().
2439          */
2440         void            (*so_thr_done)(struct ptlrpc_thread *thr);
2441         /**
2442          * Handler function for incoming requests for this service
2443          */
2444         int             (*so_req_handler)(struct ptlrpc_request *req);
2445         /**
2446          * function to determine priority of the request, it's called
2447          * on every new request
2448          */
2449         int             (*so_hpreq_handler)(struct ptlrpc_request *);
2450         /**
2451          * service-specific print fn
2452          */
2453         void            (*so_req_printer)(void *, struct ptlrpc_request *);
2454 };
2455
2456 #ifndef __cfs_cacheline_aligned
2457 /* NB: put it here for reducing patche dependence */
2458 # define __cfs_cacheline_aligned
2459 #endif
2460
2461 /**
2462  * How many high priority requests to serve before serving one normal
2463  * priority request
2464  */
2465 #define PTLRPC_SVC_HP_RATIO 10
2466
2467 /**
2468  * Definition of PortalRPC service.
2469  * The service is listening on a particular portal (like tcp port)
2470  * and perform actions for a specific server like IO service for OST
2471  * or general metadata service for MDS.
2472  */
2473 struct ptlrpc_service {
2474         /** serialize /proc operations */
2475         spinlock_t                      srv_lock;
2476         /** most often accessed fields */
2477         /** chain thru all services */
2478         struct list_head                      srv_list;
2479         /** service operations table */
2480         struct ptlrpc_service_ops       srv_ops;
2481         /** only statically allocated strings here; we don't clean them */
2482         char                       *srv_name;
2483         /** only statically allocated strings here; we don't clean them */
2484         char                       *srv_thread_name;
2485         /** service thread list */
2486         struct list_head                      srv_threads;
2487         /** threads # should be created for each partition on initializing */
2488         int                             srv_nthrs_cpt_init;
2489         /** limit of threads number for each partition */
2490         int                             srv_nthrs_cpt_limit;
2491         /** Root of /proc dir tree for this service */
2492         proc_dir_entry_t           *srv_procroot;
2493         /** Pointer to statistic data for this service */
2494         struct lprocfs_stats       *srv_stats;
2495         /** # hp per lp reqs to handle */
2496         int                          srv_hpreq_ratio;
2497         /** biggest request to receive */
2498         int                          srv_max_req_size;
2499         /** biggest reply to send */
2500         int                          srv_max_reply_size;
2501         /** size of individual buffers */
2502         int                          srv_buf_size;
2503         /** # buffers to allocate in 1 group */
2504         int                          srv_nbuf_per_group;
2505         /** Local portal on which to receive requests */
2506         __u32                      srv_req_portal;
2507         /** Portal on the client to send replies to */
2508         __u32                      srv_rep_portal;
2509         /**
2510          * Tags for lu_context associated with this thread, see struct
2511          * lu_context.
2512          */
2513         __u32                      srv_ctx_tags;
2514         /** soft watchdog timeout multiplier */
2515         int                          srv_watchdog_factor;
2516         /** under unregister_service */
2517         unsigned                        srv_is_stopping:1;
2518
2519         /** max # request buffers in history per partition */
2520         int                             srv_hist_nrqbds_cpt_max;
2521         /** number of CPTs this service bound on */
2522         int                             srv_ncpts;
2523         /** CPTs array this service bound on */
2524         __u32                           *srv_cpts;
2525         /** 2^srv_cptab_bits >= cfs_cpt_numbert(srv_cptable) */
2526         int                             srv_cpt_bits;
2527         /** CPT table this service is running over */
2528         struct cfs_cpt_table            *srv_cptable;
2529         /**
2530          * partition data for ptlrpc service
2531          */
2532         struct ptlrpc_service_part      *srv_parts[0];
2533 };
2534
2535 /**
2536  * Definition of PortalRPC service partition data.
2537  * Although a service only has one instance of it right now, but we
2538  * will have multiple instances very soon (instance per CPT).
2539  *
2540  * it has four locks:
2541  * \a scp_lock
2542  *    serialize operations on rqbd and requests waiting for preprocess
2543  * \a scp_req_lock
2544  *    serialize operations active requests sent to this portal
2545  * \a scp_at_lock
2546  *    serialize adaptive timeout stuff
2547  * \a scp_rep_lock
2548  *    serialize operations on RS list (reply states)
2549  *
2550  * We don't have any use-case to take two or more locks at the same time
2551  * for now, so there is no lock order issue.
2552  */
2553 struct ptlrpc_service_part {
2554         /** back reference to owner */
2555         struct ptlrpc_service           *scp_service __cfs_cacheline_aligned;
2556         /* CPT id, reserved */
2557         int                             scp_cpt;
2558         /** always increasing number */
2559         int                             scp_thr_nextid;
2560         /** # of starting threads */
2561         int                             scp_nthrs_starting;
2562         /** # of stopping threads, reserved for shrinking threads */
2563         int                             scp_nthrs_stopping;
2564         /** # running threads */
2565         int                             scp_nthrs_running;
2566         /** service threads list */
2567         struct list_head                        scp_threads;
2568
2569         /**
2570          * serialize the following fields, used for protecting
2571          * rqbd list and incoming requests waiting for preprocess,
2572          * threads starting & stopping are also protected by this lock.
2573          */
2574         spinlock_t                      scp_lock  __cfs_cacheline_aligned;
2575         /** total # req buffer descs allocated */
2576         int                             scp_nrqbds_total;
2577         /** # posted request buffers for receiving */
2578         int                             scp_nrqbds_posted;
2579         /** in progress of allocating rqbd */
2580         int                             scp_rqbd_allocating;
2581         /** # incoming reqs */
2582         int                             scp_nreqs_incoming;
2583         /** request buffers to be reposted */
2584         struct list_head                        scp_rqbd_idle;
2585         /** req buffers receiving */
2586         struct list_head                        scp_rqbd_posted;
2587         /** incoming reqs */
2588         struct list_head                        scp_req_incoming;
2589         /** timeout before re-posting reqs, in tick */
2590         cfs_duration_t                  scp_rqbd_timeout;
2591         /**
2592          * all threads sleep on this. This wait-queue is signalled when new
2593          * incoming request arrives and when difficult reply has to be handled.
2594          */
2595         wait_queue_head_t                       scp_waitq;
2596
2597         /** request history */
2598         struct list_head                        scp_hist_reqs;
2599         /** request buffer history */
2600         struct list_head                        scp_hist_rqbds;
2601         /** # request buffers in history */
2602         int                             scp_hist_nrqbds;
2603         /** sequence number for request */
2604         __u64                           scp_hist_seq;
2605         /** highest seq culled from history */
2606         __u64                           scp_hist_seq_culled;
2607
2608         /**
2609          * serialize the following fields, used for processing requests
2610          * sent to this portal
2611          */
2612         spinlock_t                      scp_req_lock __cfs_cacheline_aligned;
2613         /** # reqs in either of the NRS heads below */
2614         /** # reqs being served */
2615         int                             scp_nreqs_active;
2616         /** # HPreqs being served */
2617         int                             scp_nhreqs_active;
2618         /** # hp requests handled */
2619         int                             scp_hreq_count;
2620
2621         /** NRS head for regular requests */
2622         struct ptlrpc_nrs               scp_nrs_reg;
2623         /** NRS head for HP requests; this is only valid for services that can
2624          *  handle HP requests */
2625         struct ptlrpc_nrs              *scp_nrs_hp;
2626
2627         /** AT stuff */
2628         /** @{ */
2629         /**
2630          * serialize the following fields, used for changes on
2631          * adaptive timeout
2632          */
2633         spinlock_t                      scp_at_lock __cfs_cacheline_aligned;
2634         /** estimated rpc service time */
2635         struct adaptive_timeout         scp_at_estimate;
2636         /** reqs waiting for replies */
2637         struct ptlrpc_at_array          scp_at_array;
2638         /** early reply timer */
2639         timer_list_t                    scp_at_timer;
2640         /** debug */
2641         cfs_time_t                      scp_at_checktime;
2642         /** check early replies */
2643         unsigned                        scp_at_check;
2644         /** @} */
2645
2646         /**
2647          * serialize the following fields, used for processing
2648          * replies for this portal
2649          */
2650         spinlock_t                      scp_rep_lock __cfs_cacheline_aligned;
2651         /** all the active replies */
2652         struct list_head                        scp_rep_active;
2653         /** List of free reply_states */
2654         struct list_head                        scp_rep_idle;
2655         /** waitq to run, when adding stuff to srv_free_rs_list */
2656         wait_queue_head_t                       scp_rep_waitq;
2657         /** # 'difficult' replies */
2658         atomic_t                        scp_nreps_difficult;
2659 };
2660
2661 #define ptlrpc_service_for_each_part(part, i, svc)                      \
2662         for (i = 0;                                                     \
2663              i < (svc)->srv_ncpts &&                                    \
2664              (svc)->srv_parts != NULL &&                                \
2665              ((part) = (svc)->srv_parts[i]) != NULL; i++)
2666
2667 /**
2668  * Declaration of ptlrpcd control structure
2669  */
2670 struct ptlrpcd_ctl {
2671         /**
2672          * Ptlrpc thread control flags (LIOD_START, LIOD_STOP, LIOD_FORCE)
2673          */
2674         unsigned long                   pc_flags;
2675         /**
2676          * Thread lock protecting structure fields.
2677          */
2678         spinlock_t                      pc_lock;
2679         /**
2680          * Start completion.
2681          */
2682         struct completion               pc_starting;
2683         /**
2684          * Stop completion.
2685          */
2686         struct completion               pc_finishing;
2687         /**
2688          * Thread requests set.
2689          */
2690         struct ptlrpc_request_set  *pc_set;
2691         /**
2692          * Thread name used in cfs_daemonize()
2693          */
2694         char                    pc_name[16];
2695         /**
2696          * Environment for request interpreters to run in.
2697          */
2698         struct lu_env          pc_env;
2699         /**
2700          * Index of ptlrpcd thread in the array.
2701          */
2702         int                      pc_index;
2703         /**
2704          * Number of the ptlrpcd's partners.
2705          */
2706         int                      pc_npartners;
2707         /**
2708          * Pointer to the array of partners' ptlrpcd_ctl structure.
2709          */
2710         struct ptlrpcd_ctl      **pc_partners;
2711         /**
2712          * Record the partner index to be processed next.
2713          */
2714         int                      pc_cursor;
2715 };
2716
2717 /* Bits for pc_flags */
2718 enum ptlrpcd_ctl_flags {
2719         /**
2720          * Ptlrpc thread start flag.
2721          */
2722         LIOD_START       = 1 << 0,
2723         /**
2724          * Ptlrpc thread stop flag.
2725          */
2726         LIOD_STOP       = 1 << 1,
2727         /**
2728          * Ptlrpc thread force flag (only stop force so far).
2729          * This will cause aborting any inflight rpcs handled
2730          * by thread if LIOD_STOP is specified.
2731          */
2732         LIOD_FORCE       = 1 << 2,
2733         /**
2734          * This is a recovery ptlrpc thread.
2735          */
2736         LIOD_RECOVERY    = 1 << 3,
2737         /**
2738          * The ptlrpcd is bound to some CPU core.
2739          */
2740         LIOD_BIND       = 1 << 4,
2741 };
2742
2743 /**
2744  * \addtogroup nrs
2745  * @{
2746  *
2747  * Service compatibility function; the policy is compatible with all services.
2748  *
2749  * \param[in] svc  The service the policy is attempting to register with.
2750  * \param[in] desc The policy descriptor
2751  *
2752  * \retval true The policy is compatible with the service
2753  *
2754  * \see ptlrpc_nrs_pol_desc::pd_compat()
2755  */
2756 static inline bool nrs_policy_compat_all(const struct ptlrpc_service *svc,
2757                                          const struct ptlrpc_nrs_pol_desc *desc)
2758 {
2759         return true;
2760 }
2761
2762 /**
2763  * Service compatibility function; the policy is compatible with only a specific
2764  * service which is identified by its human-readable name at
2765  * ptlrpc_service::srv_name.
2766  *
2767  * \param[in] svc  The service the policy is attempting to register with.
2768  * \param[in] desc The policy descriptor
2769  *
2770  * \retval false The policy is not compatible with the service
2771  * \retval true  The policy is compatible with the service
2772  *
2773  * \see ptlrpc_nrs_pol_desc::pd_compat()
2774  */
2775 static inline bool nrs_policy_compat_one(const struct ptlrpc_service *svc,
2776                                          const struct ptlrpc_nrs_pol_desc *desc)
2777 {
2778         LASSERT(desc->pd_compat_svc_name != NULL);
2779         return strcmp(svc->srv_name, desc->pd_compat_svc_name) == 0;
2780 }
2781
2782 /** @} nrs */
2783
2784 /* ptlrpc/events.c */
2785 extern lnet_handle_eq_t ptlrpc_eq_h;
2786 extern int ptlrpc_uuid_to_peer(struct obd_uuid *uuid,
2787                                lnet_process_id_t *peer, lnet_nid_t *self);
2788 /**
2789  * These callbacks are invoked by LNet when something happened to
2790  * underlying buffer
2791  * @{
2792  */
2793 extern void request_out_callback(lnet_event_t *ev);
2794 extern void reply_in_callback(lnet_event_t *ev);
2795 extern void client_bulk_callback(lnet_event_t *ev);
2796 extern void request_in_callback(lnet_event_t *ev);
2797 extern void reply_out_callback(lnet_event_t *ev);
2798 /** @} */
2799
2800 /* ptlrpc/connection.c */
2801 struct ptlrpc_connection *ptlrpc_connection_get(lnet_process_id_t peer,
2802                                                 lnet_nid_t self,
2803                                                 struct obd_uuid *uuid);
2804 int ptlrpc_connection_put(struct ptlrpc_connection *c);
2805 struct ptlrpc_connection *ptlrpc_connection_addref(struct ptlrpc_connection *);
2806 int ptlrpc_connection_init(void);
2807 void ptlrpc_connection_fini(void);
2808 extern lnet_pid_t ptl_get_pid(void);
2809
2810 /* ptlrpc/niobuf.c */
2811 /**
2812  * Actual interfacing with LNet to put/get/register/unregister stuff
2813  * @{
2814  */
2815
2816 int ptlrpc_register_bulk(struct ptlrpc_request *req);
2817 int ptlrpc_unregister_bulk(struct ptlrpc_request *req, int async);
2818
2819 static inline int ptlrpc_client_bulk_active(struct ptlrpc_request *req)
2820 {
2821         struct ptlrpc_bulk_desc *desc;
2822         int                   rc;
2823
2824         LASSERT(req != NULL);
2825         desc = req->rq_bulk;
2826
2827         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_BULK_UNLINK) &&
2828             req->rq_bulk_deadline > cfs_time_current_sec())
2829                 return 1;
2830
2831         if (!desc)
2832                 return 0;
2833
2834         spin_lock(&desc->bd_lock);
2835         rc = desc->bd_md_count;
2836         spin_unlock(&desc->bd_lock);
2837         return rc;
2838 }
2839
2840 #define PTLRPC_REPLY_MAYBE_DIFFICULT 0x01
2841 #define PTLRPC_REPLY_EARLY         0x02
2842 int ptlrpc_send_reply(struct ptlrpc_request *req, int flags);
2843 int ptlrpc_reply(struct ptlrpc_request *req);
2844 int ptlrpc_send_error(struct ptlrpc_request *req, int difficult);
2845 int ptlrpc_error(struct ptlrpc_request *req);
2846 void ptlrpc_resend_req(struct ptlrpc_request *request);
2847 int ptlrpc_at_get_net_latency(struct ptlrpc_request *req);
2848 int ptl_send_rpc(struct ptlrpc_request *request, int noreply);
2849 int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd);
2850 /** @} */
2851
2852 /* ptlrpc/client.c */
2853 /**
2854  * Client-side portals API. Everything to send requests, receive replies,
2855  * request queues, request management, etc.
2856  * @{
2857  */
2858 void ptlrpc_init_client(int req_portal, int rep_portal, char *name,
2859                         struct ptlrpc_client *);
2860 void ptlrpc_cleanup_client(struct obd_import *imp);
2861 struct ptlrpc_connection *ptlrpc_uuid_to_connection(struct obd_uuid *uuid);
2862
2863 int ptlrpc_queue_wait(struct ptlrpc_request *req);
2864 int ptlrpc_replay_req(struct ptlrpc_request *req);
2865 int ptlrpc_unregister_reply(struct ptlrpc_request *req, int async);
2866 void ptlrpc_restart_req(struct ptlrpc_request *req);
2867 void ptlrpc_abort_inflight(struct obd_import *imp);
2868 void ptlrpc_cleanup_imp(struct obd_import *imp);
2869 void ptlrpc_abort_set(struct ptlrpc_request_set *set);
2870
2871 struct ptlrpc_request_set *ptlrpc_prep_set(void);
2872 struct ptlrpc_request_set *ptlrpc_prep_fcset(int max, set_producer_func func,
2873                                              void *arg);
2874 int ptlrpc_set_add_cb(struct ptlrpc_request_set *set,
2875                       set_interpreter_func fn, void *data);
2876 int ptlrpc_set_next_timeout(struct ptlrpc_request_set *);
2877 int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set);
2878 int ptlrpc_set_wait(struct ptlrpc_request_set *);
2879 int ptlrpc_expired_set(void *data);
2880 void ptlrpc_interrupted_set(void *data);
2881 void ptlrpc_mark_interrupted(struct ptlrpc_request *req);
2882 void ptlrpc_set_destroy(struct ptlrpc_request_set *);
2883 void ptlrpc_set_add_req(struct ptlrpc_request_set *, struct ptlrpc_request *);
2884 void ptlrpc_set_add_new_req(struct ptlrpcd_ctl *pc,
2885                             struct ptlrpc_request *req);
2886
2887 void ptlrpc_free_rq_pool(struct ptlrpc_request_pool *pool);
2888 void ptlrpc_add_rqs_to_pool(struct ptlrpc_request_pool *pool, int num_rq);
2889
2890 struct ptlrpc_request_pool *
2891 ptlrpc_init_rq_pool(int, int,
2892                     void (*populate_pool)(struct ptlrpc_request_pool *, int));
2893
2894 void ptlrpc_at_set_req_timeout(struct ptlrpc_request *req);
2895 struct ptlrpc_request *ptlrpc_request_alloc(struct obd_import *imp,
2896                                             const struct req_format *format);
2897 struct ptlrpc_request *ptlrpc_request_alloc_pool(struct obd_import *imp,
2898                                             struct ptlrpc_request_pool *,
2899                                             const struct req_format *format);
2900 void ptlrpc_request_free(struct ptlrpc_request *request);
2901 int ptlrpc_request_pack(struct ptlrpc_request *request,
2902                         __u32 version, int opcode);
2903 struct ptlrpc_request *ptlrpc_request_alloc_pack(struct obd_import *imp,
2904                                                 const struct req_format *format,
2905                                                 __u32 version, int opcode);
2906 int ptlrpc_request_bufs_pack(struct ptlrpc_request *request,
2907                              __u32 version, int opcode, char **bufs,
2908                              struct ptlrpc_cli_ctx *ctx);
2909 struct ptlrpc_request *ptlrpc_prep_req(struct obd_import *imp, __u32 version,
2910                                        int opcode, int count, __u32 *lengths,
2911                                        char **bufs);
2912 struct ptlrpc_request *ptlrpc_prep_req_pool(struct obd_import *imp,
2913                                              __u32 version, int opcode,
2914                                             int count, __u32 *lengths, char **bufs,
2915                                             struct ptlrpc_request_pool *pool);
2916 void ptlrpc_req_finished(struct ptlrpc_request *request);
2917 void ptlrpc_req_finished_with_imp_lock(struct ptlrpc_request *request);
2918 struct ptlrpc_request *ptlrpc_request_addref(struct ptlrpc_request *req);
2919 struct ptlrpc_bulk_desc *ptlrpc_prep_bulk_imp(struct ptlrpc_request *req,
2920                                               unsigned npages, unsigned max_brw,
2921                                               unsigned type, unsigned portal);
2922 void __ptlrpc_free_bulk(struct ptlrpc_bulk_desc *bulk, int pin);
2923 static inline void ptlrpc_free_bulk_pin(struct ptlrpc_bulk_desc *bulk)
2924 {
2925         __ptlrpc_free_bulk(bulk, 1);
2926 }
2927 static inline void ptlrpc_free_bulk_nopin(struct ptlrpc_bulk_desc *bulk)
2928 {
2929         __ptlrpc_free_bulk(bulk, 0);
2930 }
2931 void __ptlrpc_prep_bulk_page(struct ptlrpc_bulk_desc *desc,
2932                              struct page *page, int pageoffset, int len, int);
2933 static inline void ptlrpc_prep_bulk_page_pin(struct ptlrpc_bulk_desc *desc,
2934                                              struct page *page, int pageoffset,
2935                                              int len)
2936 {
2937         __ptlrpc_prep_bulk_page(desc, page, pageoffset, len, 1);
2938 }
2939
2940 static inline void ptlrpc_prep_bulk_page_nopin(struct ptlrpc_bulk_desc *desc,
2941                                                struct page *page, int pageoffset,
2942                                                int len)
2943 {
2944         __ptlrpc_prep_bulk_page(desc, page, pageoffset, len, 0);
2945 }
2946
2947 void ptlrpc_retain_replayable_request(struct ptlrpc_request *req,
2948                                       struct obd_import *imp);
2949 __u64 ptlrpc_next_xid(void);
2950 __u64 ptlrpc_sample_next_xid(void);
2951 __u64 ptlrpc_req_xid(struct ptlrpc_request *request);
2952
2953 /* Set of routines to run a function in ptlrpcd context */
2954 void *ptlrpcd_alloc_work(struct obd_import *imp,
2955                          int (*cb)(const struct lu_env *, void *), void *data);
2956 void ptlrpcd_destroy_work(void *handler);
2957 int ptlrpcd_queue_work(void *handler);
2958
2959 /** @} */
2960 struct ptlrpc_service_buf_conf {
2961         /* nbufs is buffers # to allocate when growing the pool */
2962         unsigned int                    bc_nbufs;
2963         /* buffer size to post */
2964         unsigned int                    bc_buf_size;
2965         /* portal to listed for requests on */
2966         unsigned int                    bc_req_portal;
2967         /* portal of where to send replies to */
2968         unsigned int                    bc_rep_portal;
2969         /* maximum request size to be accepted for this service */
2970         unsigned int                    bc_req_max_size;
2971         /* maximum reply size this service can ever send */
2972         unsigned int                    bc_rep_max_size;
2973 };
2974
2975 struct ptlrpc_service_thr_conf {
2976         /* threadname should be 8 characters or less - 6 will be added on */
2977         char                            *tc_thr_name;
2978         /* threads increasing factor for each CPU */
2979         unsigned int                    tc_thr_factor;
2980         /* service threads # to start on each partition while initializing */
2981         unsigned int                    tc_nthrs_init;
2982         /*
2983          * low water of threads # upper-limit on each partition while running,
2984          * service availability may be impacted if threads number is lower
2985          * than this value. It can be ZERO if the service doesn't require
2986          * CPU affinity or there is only one partition.
2987          */
2988         unsigned int                    tc_nthrs_base;
2989         /* "soft" limit for total threads number */
2990         unsigned int                    tc_nthrs_max;
2991         /* user specified threads number, it will be validated due to
2992          * other members of this structure. */
2993         unsigned int                    tc_nthrs_user;
2994         /* set NUMA node affinity for service threads */
2995         unsigned int                    tc_cpu_affinity;
2996         /* Tags for lu_context associated with service thread */
2997         __u32                           tc_ctx_tags;
2998 };
2999
3000 struct ptlrpc_service_cpt_conf {
3001         struct cfs_cpt_table            *cc_cptable;
3002         /* string pattern to describe CPTs for a service */
3003         char                            *cc_pattern;
3004 };
3005
3006 struct ptlrpc_service_conf {
3007         /* service name */
3008         char                            *psc_name;
3009         /* soft watchdog timeout multiplifier to print stuck service traces */
3010         unsigned int                    psc_watchdog_factor;
3011         /* buffer information */
3012         struct ptlrpc_service_buf_conf  psc_buf;
3013         /* thread information */
3014         struct ptlrpc_service_thr_conf  psc_thr;
3015         /* CPU partition information */
3016         struct ptlrpc_service_cpt_conf  psc_cpt;
3017         /* function table */
3018         struct ptlrpc_service_ops       psc_ops;
3019 };
3020
3021 /* ptlrpc/service.c */
3022 /**
3023  * Server-side services API. Register/unregister service, request state
3024  * management, service thread management
3025  *
3026  * @{
3027  */
3028 void ptlrpc_save_lock(struct ptlrpc_request *req,
3029                       struct lustre_handle *lock, int mode, int no_ack);
3030 void ptlrpc_commit_replies(struct obd_export *exp);
3031 void ptlrpc_dispatch_difficult_reply(struct ptlrpc_reply_state *rs);
3032 void ptlrpc_schedule_difficult_reply(struct ptlrpc_reply_state *rs);
3033 int ptlrpc_hpreq_handler(struct ptlrpc_request *req);
3034 struct ptlrpc_service *ptlrpc_register_service(
3035                                 struct ptlrpc_service_conf *conf,
3036                                 struct proc_dir_entry *proc_entry);
3037 void ptlrpc_stop_all_threads(struct ptlrpc_service *svc);
3038
3039 int ptlrpc_start_threads(struct ptlrpc_service *svc);
3040 int ptlrpc_unregister_service(struct ptlrpc_service *service);
3041 int liblustre_check_services(void *arg);
3042 void ptlrpc_daemonize(char *name);
3043 int ptlrpc_service_health_check(struct ptlrpc_service *);
3044 void ptlrpc_server_drop_request(struct ptlrpc_request *req);
3045 void ptlrpc_request_change_export(struct ptlrpc_request *req,
3046                                   struct obd_export *export);
3047
3048 int ptlrpc_hr_init(void);
3049 void ptlrpc_hr_fini(void);
3050
3051 /** @} */
3052
3053 /* ptlrpc/import.c */
3054 /**
3055  * Import API
3056  * @{
3057  */
3058 int ptlrpc_connect_import(struct obd_import *imp);
3059 int ptlrpc_init_import(struct obd_import *imp);
3060 int ptlrpc_disconnect_import(struct obd_import *imp, int noclose);
3061 int ptlrpc_import_recovery_state_machine(struct obd_import *imp);
3062 void deuuidify(char *uuid, const char *prefix, char **uuid_start,
3063                int *uuid_len);
3064
3065 /* ptlrpc/pack_generic.c */
3066 int ptlrpc_reconnect_import(struct obd_import *imp);
3067 /** @} */
3068
3069 /**
3070  * ptlrpc msg buffer and swab interface
3071  *
3072  * @{
3073  */
3074 int ptlrpc_buf_need_swab(struct ptlrpc_request *req, const int inout,
3075                          int index);
3076 void ptlrpc_buf_set_swabbed(struct ptlrpc_request *req, const int inout,
3077                                 int index);
3078 int ptlrpc_unpack_rep_msg(struct ptlrpc_request *req, int len);
3079 int ptlrpc_unpack_req_msg(struct ptlrpc_request *req, int len);
3080
3081 int lustre_msg_check_version(struct lustre_msg *msg, __u32 version);
3082 void lustre_init_msg_v2(struct lustre_msg_v2 *msg, int count, __u32 *lens,
3083                         char **bufs);
3084 int lustre_pack_request(struct ptlrpc_request *, __u32 magic, int count,
3085                         __u32 *lens, char **bufs);
3086 int lustre_pack_reply(struct ptlrpc_request *, int count, __u32 *lens,
3087                       char **bufs);
3088 int lustre_pack_reply_v2(struct ptlrpc_request *req, int count,
3089                          __u32 *lens, char **bufs, int flags);
3090 #define LPRFL_EARLY_REPLY 1
3091 int lustre_pack_reply_flags(struct ptlrpc_request *, int count, __u32 *lens,
3092                             char **bufs, int flags);
3093 int lustre_shrink_msg(struct lustre_msg *msg, int segment,
3094                       unsigned int newlen, int move_data);
3095 void lustre_free_reply_state(struct ptlrpc_reply_state *rs);
3096 int __lustre_unpack_msg(struct lustre_msg *m, int len);
3097 int lustre_msg_hdr_size(__u32 magic, int count);
3098 int lustre_msg_size(__u32 magic, int count, __u32 *lengths);
3099 int lustre_msg_size_v2(int count, __u32 *lengths);
3100 int lustre_packed_msg_size(struct lustre_msg *msg);
3101 int lustre_msg_early_size(void);
3102 void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size);
3103 void *lustre_msg_buf(struct lustre_msg *m, int n, int minlen);
3104 int lustre_msg_buflen(struct lustre_msg *m, int n);
3105 void lustre_msg_set_buflen(struct lustre_msg *m, int n, int len);
3106 int lustre_msg_bufcount(struct lustre_msg *m);
3107 char *lustre_msg_string(struct lustre_msg *m, int n, int max_len);
3108 __u32 lustre_msghdr_get_flags(struct lustre_msg *msg);
3109 void lustre_msghdr_set_flags(struct lustre_msg *msg, __u32 flags);
3110 __u32 lustre_msg_get_flags(struct lustre_msg *msg);
3111 void lustre_msg_add_flags(struct lustre_msg *msg, int flags);
3112 void lustre_msg_set_flags(struct lustre_msg *msg, int flags);
3113 void lustre_msg_clear_flags(struct lustre_msg *msg, int flags);
3114 __u32 lustre_msg_get_op_flags(struct lustre_msg *msg);
3115 void lustre_msg_add_op_flags(struct lustre_msg *msg, int flags);
3116 void lustre_msg_set_op_flags(struct lustre_msg *msg, int flags);
3117 struct lustre_handle *lustre_msg_get_handle(struct lustre_msg *msg);
3118 __u32 lustre_msg_get_type(struct lustre_msg *msg);
3119 __u32 lustre_msg_get_version(struct lustre_msg *msg);
3120 void lustre_msg_add_version(struct lustre_msg *msg, int version);
3121 __u32 lustre_msg_get_opc(struct lustre_msg *msg);
3122 __u64 lustre_msg_get_last_xid(struct lustre_msg *msg);
3123 __u64 lustre_msg_get_last_committed(struct lustre_msg *msg);
3124 __u64 *lustre_msg_get_versions(struct lustre_msg *msg);
3125 __u64 lustre_msg_get_transno(struct lustre_msg *msg);
3126 __u64 lustre_msg_get_slv(struct lustre_msg *msg);
3127 __u32 lustre_msg_get_limit(struct lustre_msg *msg);
3128 void lustre_msg_set_slv(struct lustre_msg *msg, __u64 slv);
3129 void lustre_msg_set_limit(struct lustre_msg *msg, __u64 limit);
3130 int lustre_msg_get_status(struct lustre_msg *msg);
3131 __u32 lustre_msg_get_conn_cnt(struct lustre_msg *msg);
3132 int lustre_msg_is_v1(struct lustre_msg *msg);
3133 __u32 lustre_msg_get_magic(struct lustre_msg *msg);
3134 __u32 lustre_msg_get_timeout(struct lustre_msg *msg);
3135 __u32 lustre_msg_get_service_time(struct lustre_msg *msg);
3136 char *lustre_msg_get_jobid(struct lustre_msg *msg);
3137 __u32 lustre_msg_get_cksum(struct lustre_msg *msg);
3138 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 7, 50, 0)
3139 __u32 lustre_msg_calc_cksum(struct lustre_msg *msg, int compat18);
3140 #else
3141 # warning "remove checksum compatibility support for b1_8"
3142 __u32 lustre_msg_calc_cksum(struct lustre_msg *msg);
3143 #endif
3144 void lustre_msg_set_handle(struct lustre_msg *msg,struct lustre_handle *handle);
3145 void lustre_msg_set_type(struct lustre_msg *msg, __u32 type);
3146 void lustre_msg_set_opc(struct lustre_msg *msg, __u32 opc);
3147 void lustre_msg_set_last_xid(struct lustre_msg *msg, __u64 last_xid);
3148 void lustre_msg_set_last_committed(struct lustre_msg *msg,__u64 last_committed);
3149 void lustre_msg_set_versions(struct lustre_msg *msg, __u64 *versions);
3150 void lustre_msg_set_transno(struct lustre_msg *msg, __u64 transno);
3151 void lustre_msg_set_status(struct lustre_msg *msg, __u32 status);
3152 void lustre_msg_set_conn_cnt(struct lustre_msg *msg, __u32 conn_cnt);
3153 void ptlrpc_req_set_repsize(struct ptlrpc_request *req, int count, __u32 *sizes);
3154 void ptlrpc_request_set_replen(struct ptlrpc_request *req);
3155 void lustre_msg_set_timeout(struct lustre_msg *msg, __u32 timeout);
3156 void lustre_msg_set_service_time(struct lustre_msg *msg, __u32 service_time);
3157 void lustre_msg_set_jobid(struct lustre_msg *msg, char *jobid);
3158 void lustre_msg_set_cksum(struct lustre_msg *msg, __u32 cksum);
3159
3160 static inline void
3161 lustre_shrink_reply(struct ptlrpc_request *req, int segment,
3162                     unsigned int newlen, int move_data)
3163 {
3164         LASSERT(req->rq_reply_state);
3165         LASSERT(req->rq_repmsg);
3166         req->rq_replen = lustre_shrink_msg(req->rq_repmsg, segment,
3167                                            newlen, move_data);
3168 }
3169 /** @} */
3170
3171 /** Change request phase of \a req to \a new_phase */
3172 static inline void
3173 ptlrpc_rqphase_move(struct ptlrpc_request *req, enum rq_phase new_phase)
3174 {
3175         if (req->rq_phase == new_phase)
3176                 return;
3177
3178         if (new_phase == RQ_PHASE_UNREGISTERING) {
3179                 req->rq_next_phase = req->rq_phase;
3180                 if (req->rq_import)
3181                         atomic_inc(&req->rq_import->imp_unregistering);
3182         }
3183
3184         if (req->rq_phase == RQ_PHASE_UNREGISTERING) {
3185                 if (req->rq_import)
3186                         atomic_dec(&req->rq_import->imp_unregistering);
3187         }
3188
3189         DEBUG_REQ(D_INFO, req, "move req \"%s\" -> \"%s\"",
3190                   ptlrpc_rqphase2str(req), ptlrpc_phase2str(new_phase));
3191
3192         req->rq_phase = new_phase;
3193 }
3194
3195 /**
3196  * Returns true if request \a req got early reply and hard deadline is not met
3197  */
3198 static inline int
3199 ptlrpc_client_early(struct ptlrpc_request *req)
3200 {
3201         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) &&
3202             req->rq_reply_deadline > cfs_time_current_sec())
3203                 return 0;
3204         return req->rq_early;
3205 }
3206
3207 /**
3208  * Returns true if we got real reply from server for this request
3209  */
3210 static inline int
3211 ptlrpc_client_replied(struct ptlrpc_request *req)
3212 {
3213         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) &&
3214             req->rq_reply_deadline > cfs_time_current_sec())
3215                 return 0;
3216         return req->rq_replied;
3217 }
3218
3219 /** Returns true if request \a req is in process of receiving server reply */
3220 static inline int
3221 ptlrpc_client_recv(struct ptlrpc_request *req)
3222 {
3223         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) &&
3224             req->rq_reply_deadline > cfs_time_current_sec())
3225                 return 1;
3226         return req->rq_receiving_reply;
3227 }
3228
3229 static inline int
3230 ptlrpc_client_recv_or_unlink(struct ptlrpc_request *req)
3231 {
3232         int rc;
3233
3234         spin_lock(&req->rq_lock);
3235         if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_REPL_UNLINK) &&
3236             req->rq_reply_deadline > cfs_time_current_sec()) {
3237                 spin_unlock(&req->rq_lock);
3238                 return 1;
3239         }
3240         rc = req->rq_receiving_reply || req->rq_must_unlink;
3241         spin_unlock(&req->rq_lock);
3242         return rc;
3243 }
3244
3245 static inline void
3246 ptlrpc_client_wake_req(struct ptlrpc_request *req)
3247 {
3248         if (req->rq_set == NULL)
3249                 wake_up(&req->rq_reply_waitq);
3250         else
3251                 wake_up(&req->rq_set->set_waitq);
3252 }
3253
3254 static inline void
3255 ptlrpc_rs_addref(struct ptlrpc_reply_state *rs)
3256 {
3257         LASSERT(atomic_read(&rs->rs_refcount) > 0);
3258         atomic_inc(&rs->rs_refcount);
3259 }
3260
3261 static inline void
3262 ptlrpc_rs_decref(struct ptlrpc_reply_state *rs)
3263 {
3264         LASSERT(atomic_read(&rs->rs_refcount) > 0);
3265         if (atomic_dec_and_test(&rs->rs_refcount))
3266                 lustre_free_reply_state(rs);
3267 }
3268
3269 /* Should only be called once per req */
3270 static inline void ptlrpc_req_drop_rs(struct ptlrpc_request *req)
3271 {
3272         if (req->rq_reply_state == NULL)
3273                 return; /* shouldn't occur */
3274         ptlrpc_rs_decref(req->rq_reply_state);
3275         req->rq_reply_state = NULL;
3276         req->rq_repmsg = NULL;
3277 }
3278
3279 static inline __u32 lustre_request_magic(struct ptlrpc_request *req)
3280 {
3281         return lustre_msg_get_magic(req->rq_reqmsg);
3282 }
3283
3284 static inline int ptlrpc_req_get_repsize(struct ptlrpc_request *req)
3285 {
3286         switch (req->rq_reqmsg->lm_magic) {
3287         case LUSTRE_MSG_MAGIC_V2:
3288                 return req->rq_reqmsg->lm_repsize;
3289         default:
3290                 LASSERTF(0, "incorrect message magic: %08x\n",
3291                          req->rq_reqmsg->lm_magic);
3292                 return -EFAULT;
3293         }
3294 }
3295
3296 static inline int ptlrpc_send_limit_expired(struct ptlrpc_request *req)
3297 {
3298         if (req->rq_delay_limit != 0 &&
3299             cfs_time_before(cfs_time_add(req->rq_queued_time,
3300                                          cfs_time_seconds(req->rq_delay_limit)),
3301                             cfs_time_current())) {
3302                 return 1;
3303         }
3304         return 0;
3305 }
3306
3307 static inline int ptlrpc_no_resend(struct ptlrpc_request *req)
3308 {
3309         if (!req->rq_no_resend && ptlrpc_send_limit_expired(req)) {
3310                 spin_lock(&req->rq_lock);
3311                 req->rq_no_resend = 1;
3312                 spin_unlock(&req->rq_lock);
3313         }
3314         return req->rq_no_resend;
3315 }
3316
3317 static inline int
3318 ptlrpc_server_get_timeout(struct ptlrpc_service_part *svcpt)
3319 {
3320         int at = AT_OFF ? 0 : at_get(&svcpt->scp_at_estimate);
3321
3322         return svcpt->scp_service->srv_watchdog_factor *
3323                max_t(int, at, obd_timeout);
3324 }
3325
3326 static inline struct ptlrpc_service *
3327 ptlrpc_req2svc(struct ptlrpc_request *req)
3328 {
3329         LASSERT(req->rq_rqbd != NULL);
3330         return req->rq_rqbd->rqbd_svcpt->scp_service;
3331 }
3332
3333 /* ldlm/ldlm_lib.c */
3334 /**
3335  * Target client logic
3336  * @{
3337  */
3338 int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg);
3339 int client_obd_cleanup(struct obd_device *obddev);
3340 int client_connect_import(const struct lu_env *env,
3341                           struct obd_export **exp, struct obd_device *obd,
3342                           struct obd_uuid *cluuid, struct obd_connect_data *,
3343                           void *localdata);
3344 int client_disconnect_export(struct obd_export *exp);
3345 int client_import_add_conn(struct obd_import *imp, struct obd_uuid *uuid,
3346                            int priority);
3347 int client_import_del_conn(struct obd_import *imp, struct obd_uuid *uuid);
3348 int client_import_find_conn(struct obd_import *imp, lnet_nid_t peer,
3349                             struct obd_uuid *uuid);
3350 int import_set_conn_priority(struct obd_import *imp, struct obd_uuid *uuid);
3351 void client_destroy_import(struct obd_import *imp);
3352 /** @} */
3353
3354
3355 /* ptlrpc/pinger.c */
3356 /**
3357  * Pinger API (client side only)
3358  * @{
3359  */
3360 enum timeout_event {
3361         TIMEOUT_GRANT = 1
3362 };
3363 struct timeout_item;
3364 typedef int (*timeout_cb_t)(struct timeout_item *, void *);
3365 int ptlrpc_pinger_add_import(struct obd_import *imp);
3366 int ptlrpc_pinger_del_import(struct obd_import *imp);
3367 int ptlrpc_add_timeout_client(int time, enum timeout_event event,
3368                               timeout_cb_t cb, void *data,
3369                               struct list_head *obd_list);
3370 int ptlrpc_del_timeout_client(struct list_head *obd_list,
3371                               enum timeout_event event);
3372 struct ptlrpc_request * ptlrpc_prep_ping(struct obd_import *imp);
3373 int ptlrpc_obd_ping(struct obd_device *obd);
3374 cfs_time_t ptlrpc_suspend_wakeup_time(void);
3375 void ping_evictor_start(void);
3376 void ping_evictor_stop(void);
3377 int ptlrpc_check_and_wait_suspend(struct ptlrpc_request *req);
3378 void ptlrpc_pinger_ir_up(void);
3379 void ptlrpc_pinger_ir_down(void);
3380 /** @} */
3381 int ptlrpc_pinger_suppress_pings(void);
3382
3383 /* ptlrpc daemon bind policy */
3384 typedef enum {
3385         /* all ptlrpcd threads are free mode */
3386         PDB_POLICY_NONE   = 1,
3387         /* all ptlrpcd threads are bound mode */
3388         PDB_POLICY_FULL   = 2,
3389         /* <free1 bound1> <free2 bound2> ... <freeN boundN> */
3390         PDB_POLICY_PAIR   = 3,
3391         /* <free1 bound1> <bound1 free2> ... <freeN boundN> <boundN free1>,
3392          * means each ptlrpcd[X] has two partners: thread[X-1] and thread[X+1].
3393          * If kernel supports NUMA, pthrpcd threads are binded and
3394          * grouped by NUMA node */
3395         PDB_POLICY_NEIGHBOR      = 4,
3396 } pdb_policy_t;
3397
3398 /* ptlrpc daemon load policy
3399  * It is caller's duty to specify how to push the async RPC into some ptlrpcd
3400  * queue, but it is not enforced, affected by "ptlrpcd_bind_policy". If it is
3401  * "PDB_POLICY_FULL", then the RPC will be processed by the selected ptlrpcd,
3402  * Otherwise, the RPC may be processed by the selected ptlrpcd or its partner,
3403  * depends on which is scheduled firstly, to accelerate the RPC processing. */
3404 typedef enum {
3405         /* on the same CPU core as the caller */
3406         PDL_POLICY_SAME  = 1,
3407         /* within the same CPU partition, but not the same core as the caller */
3408         PDL_POLICY_LOCAL        = 2,
3409         /* round-robin on all CPU cores, but not the same core as the caller */
3410         PDL_POLICY_ROUND        = 3,
3411         /* the specified CPU core is preferred, but not enforced */
3412         PDL_POLICY_PREFERRED    = 4,
3413 } pdl_policy_t;
3414
3415 /* ptlrpc/ptlrpcd.c */
3416 void ptlrpcd_stop(struct ptlrpcd_ctl *pc, int force);
3417 void ptlrpcd_free(struct ptlrpcd_ctl *pc);
3418 void ptlrpcd_wake(struct ptlrpc_request *req);
3419 void ptlrpcd_add_req(struct ptlrpc_request *req, pdl_policy_t policy, int idx);
3420 void ptlrpcd_add_rqset(struct ptlrpc_request_set *set);
3421 int ptlrpcd_addref(void);
3422 void ptlrpcd_decref(void);
3423
3424 /* ptlrpc/lproc_ptlrpc.c */
3425 /**
3426  * procfs output related functions
3427  * @{
3428  */
3429 const char* ll_opcode2str(__u32 opcode);
3430 #ifdef LPROCFS
3431 void ptlrpc_lprocfs_register_obd(struct obd_device *obd);
3432 void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd);
3433 void ptlrpc_lprocfs_brw(struct ptlrpc_request *req, int bytes);
3434 #else
3435 static inline void ptlrpc_lprocfs_register_obd(struct obd_device *obd) {}
3436 static inline void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd) {}
3437 static inline void ptlrpc_lprocfs_brw(struct ptlrpc_request *req, int bytes) {}
3438 #endif
3439 /** @} */
3440
3441 /* ptlrpc/llog_server.c */
3442 int llog_origin_handle_open(struct ptlrpc_request *req);
3443 int llog_origin_handle_destroy(struct ptlrpc_request *req);
3444 int llog_origin_handle_prev_block(struct ptlrpc_request *req);
3445 int llog_origin_handle_next_block(struct ptlrpc_request *req);
3446 int llog_origin_handle_read_header(struct ptlrpc_request *req);
3447 int llog_origin_handle_close(struct ptlrpc_request *req);
3448 int llog_origin_handle_cancel(struct ptlrpc_request *req);
3449
3450 /* ptlrpc/llog_client.c */
3451 extern struct llog_operations llog_client_ops;
3452
3453 /** @} net */
3454
3455 #endif
3456 /** @} PtlRPC */