1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
4 * Copyright (C) 2002 Intel Corporation
9 * Author: Hariharan Thantry
10 * File Name: lprocfs.h
12 * Header file for the LProcFS file system
19 #ifndef LPROCFS_EXISTS
20 #define LPROCFS_EXISTS
24 #define LPROCFS_SUCCESS 1
25 #define LPROCFS_FAILURE -1
27 #include <linux/time.h>
28 #include <linux/proc_fs.h>
29 #include <linux/config.h>
30 #include <linux/param.h>
31 /* #include <linux/msr.h> */
33 typedef enum lprofilers {
38 typedef struct lprocfs_vars{
40 read_proc_t* read_fptr;
41 write_proc_t* write_fptr;
44 typedef struct lprocfs_group {
46 lprocfs_vars_t* count_func_namespace;
47 lprofilers_e prof_type;
50 typedef struct lprocfs_obd_nm {
52 lprocfs_group_t* obd_names;
53 unsigned int cntr_blk_sz;
59 * Structure defining the variables to be maintained
60 * on a per attribute basis for entries. The size of
61 * the profiling entry needs to be passed during registration
62 * with LProcFS, to enable it to allocate space. It is expected
63 * that on a per-device class basis, there would exist only
67 struct lprofiler_gen {
72 /* Default, used for storing intermediate value */
73 unsigned long long start_time;
76 struct lprofiler_ldlm {
84 __u64 num_zerolatency;
85 __u64 num_zerolatency_inflight;
86 __u64 num_zerolatency_done;
87 __u64 non_zero_mintime;
88 __u64 non_zero_maxtime;
89 __u64 non_zero_sumtime;
92 struct lprofiler_ptlrpc {
97 /* Default, used for storing intermediate value */
107 __u64 portal_kmemory;
112 struct namespace_index {
116 struct groupspace_index {
118 struct namespace_index* directory;
119 struct namespace_index* counters;
123 * Used for connections and such
127 typedef enum te_leafType {
135 struct lprocfs_conn_namespace {
144 #ifdef LPROCFS_EXISTS
146 * Utility functions to return the timeofday
149 static inline unsigned long lprocfs_util_gettime(void)
153 struct timeval myTime;
155 do_gettimeofday(&myTime);
156 temp=((__u64)(myTime.tv_usec))&0xFFFFFFFF;
157 temp|=(((__u64)(myTime.tv_sec))<<(8*sizeof(unsigned long)));
162 static inline unsigned long lprocfs_util_getdiff(unsigned long x,
165 return ((x>y)?(x-y):(y-x));
169 tempSec=((y>>8*sizeof(unsigned long))-(x>>8*sizeof(unsigned long)));
170 if(tempSec<0)tempSec=-tempSec;
171 tempuSec=((y&0xFFFFFFFF)-(x&0xFFFFFFFF));
172 if(tempuSec<0)tempuSec=-tempuSec;
173 return(tempSec*1000000+tempuSec);
178 #define LPROCFS_NAMESPACE_ENUM(CLASS, NAME) e_ ##CLASS## _##NAME
181 #define DEV_PROF_START(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
183 struct lprofiler_##PROF_CLASS *x; \
184 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
185 x=(struct lprofiler_##PROF_CLASS *)((OBD)->counters); \
187 /* rdtscl(x->start_time); */ \
188 x->start_time=lprocfs_util_gettime(); \
192 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
194 unsigned long end_time, delta; \
195 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
196 struct lprofiler_##PROF_CLASS *x= \
197 (struct lprofiler_##PROF_CLASS*)((OBD)->counters); \
199 end_time=lprocfs_util_gettime(); \
200 delta=lprocfs_util_getdiff(x->start_time, end_time); \
201 if((delta<x->min_time)||(x->min_time==0))x->min_time=delta; \
202 if(delta>x->max_time)x->max_time=delta; \
203 x->sum_time+=delta; \
208 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
210 __u64 end_time, delta; \
211 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
212 struct lprofiler_##PROF_CLASS *x= \
213 (struct lprofiler_##PROF_CLASS*)((OBD)->counters); \
215 end_time=lprocfs_util_gettime(); \
216 delta=lprocfs_util_getdiff(x->start_time, end_time); \
217 if((delta<x->min_time)||(x->min_time==0))x->min_time=delta; \
218 if(delta>x->max_time)x->max_time=delta; \
219 x->sum_time+=delta; \
224 #define DEV_PRINT_CNTR(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
226 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
227 struct lprofiler_##PROF_CLASS *x= \
228 (struct lprofiler_##PROF_CLASS *)&((OBD)->counters); \
230 printk("Max_time=%lld(usec)\n", x->max_time); \
231 printk("Min_time=%lld(usec)\n", x->min_time); \
232 printk("Sum_time=%lld(usec)\n", x->sum_time); \
233 printk("Num_ops=%lld\n", x->num_ops); \
239 * This enum is used as an array index into the counts
240 * that are maintained for the MDS device. The number of
241 * entries here determine the amount of memory allocated
242 * for counters for every instance of this class of
246 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_setup),
247 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_cleanup),
248 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_connect),
249 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_disconnect),
250 LPROCFS_NAMESPACE_ENUM(mdc, reint),
251 LPROCFS_NAMESPACE_ENUM(mdc, getstatus),
252 LPROCFS_NAMESPACE_ENUM(mdc, getattr),
253 LPROCFS_NAMESPACE_ENUM(mdc, setattr),
254 LPROCFS_NAMESPACE_ENUM(mdc, open),
255 LPROCFS_NAMESPACE_ENUM(mdc, readpage),
256 LPROCFS_NAMESPACE_ENUM(mdc, create),
257 LPROCFS_NAMESPACE_ENUM(mdc, unlink),
258 LPROCFS_NAMESPACE_ENUM(mdc, link),
259 LPROCFS_NAMESPACE_ENUM(mdc, rename),
260 LPROCFS_MAX_ENUM_DIR_MDC
264 LPROCFS_NAMESPACE_ENUM(mds, mgmt_setup),
265 LPROCFS_NAMESPACE_ENUM(mds, mgmt_cleanup),
266 LPROCFS_NAMESPACE_ENUM(mds, mgmt_connect),
267 LPROCFS_NAMESPACE_ENUM(mds, mgmt_disconnect),
268 LPROCFS_NAMESPACE_ENUM(mds, getstatus),
269 LPROCFS_NAMESPACE_ENUM(mds, connect),
270 LPROCFS_NAMESPACE_ENUM(mds, disconnect_callback),
271 LPROCFS_NAMESPACE_ENUM(mds, getattr),
272 LPROCFS_NAMESPACE_ENUM(mds, readpage),
273 LPROCFS_NAMESPACE_ENUM(mds, open),
274 LPROCFS_NAMESPACE_ENUM(mds, close),
275 LPROCFS_NAMESPACE_ENUM(mds, create),
276 LPROCFS_NAMESPACE_ENUM(mds, unlink),
277 LPROCFS_NAMESPACE_ENUM(mds, link),
278 LPROCFS_NAMESPACE_ENUM(mds, rename),
279 LPROCFS_NAMESPACE_ENUM(mds, reint_summary),
280 LPROCFS_NAMESPACE_ENUM(mds, reint_setattr),
281 LPROCFS_NAMESPACE_ENUM(mds, reint_create),
282 LPROCFS_NAMESPACE_ENUM(mds, reint_unlink),
283 LPROCFS_NAMESPACE_ENUM(mds, reint_link),
284 LPROCFS_NAMESPACE_ENUM(mds, reint_rename),
285 LPROCFS_NAMESPACE_ENUM(mds, reint_recreate),
286 LPROCFS_MAX_ENUM_DIR_MDS
291 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_setup),
292 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_cleanup),
293 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_connect),
294 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_disconnect),
298 LPROCFS_NAMESPACE_ENUM(osc, mgmt_setup),
299 LPROCFS_NAMESPACE_ENUM(osc, mgmt_cleanup),
300 LPROCFS_NAMESPACE_ENUM(osc, mgmt_connect),
301 LPROCFS_NAMESPACE_ENUM(osc, mgmt_disconnect),
302 LPROCFS_NAMESPACE_ENUM(osc, create),
303 LPROCFS_NAMESPACE_ENUM(osc, destroy),
304 LPROCFS_NAMESPACE_ENUM(osc, getattr),
305 LPROCFS_NAMESPACE_ENUM(osc, setattr),
306 LPROCFS_NAMESPACE_ENUM(osc, open),
307 LPROCFS_NAMESPACE_ENUM(osc, close),
308 LPROCFS_NAMESPACE_ENUM(osc, brw),
309 LPROCFS_NAMESPACE_ENUM(osc, punch),
310 LPROCFS_NAMESPACE_ENUM(osc, summary),
311 LPROCFS_NAMESPACE_ENUM(osc, cancel),
312 LPROCFS_MAX_ENUM_DIR_OSC
316 LPROCFS_NAMESPACE_ENUM(ost, mgmt_setup),
317 LPROCFS_NAMESPACE_ENUM(ost, mgmt_cleanup),
318 LPROCFS_NAMESPACE_ENUM(ost, mgmt_connect),
319 LPROCFS_NAMESPACE_ENUM(ost, mgmt_disconnect),
320 LPROCFS_NAMESPACE_ENUM(ost, create),
321 LPROCFS_NAMESPACE_ENUM(ost, destroy),
322 LPROCFS_NAMESPACE_ENUM(ost, getattr),
323 LPROCFS_NAMESPACE_ENUM(ost, setattr),
324 LPROCFS_NAMESPACE_ENUM(ost, open),
325 LPROCFS_NAMESPACE_ENUM(ost, close),
326 LPROCFS_NAMESPACE_ENUM(ost, brw),
327 LPROCFS_NAMESPACE_ENUM(ost, punch),
328 LPROCFS_NAMESPACE_ENUM(ost, summary),
329 LPROCFS_NAMESPACE_ENUM(ost, cancel),
330 LPROCFS_NAMESPACE_ENUM(ost, getinfo),
331 LPROCFS_MAX_ENUM_DIR_OST
335 LPROCFS_NAMESPACE_ENUM(lov, mgmt_setup),
336 LPROCFS_NAMESPACE_ENUM(lov, mgmt_cleanup),
337 LPROCFS_NAMESPACE_ENUM(lov, mgmt_connect),
338 LPROCFS_NAMESPACE_ENUM(lov, mgmt_disconnect),
339 LPROCFS_NAMESPACE_ENUM(lov, create),
340 LPROCFS_NAMESPACE_ENUM(lov, destroy),
341 LPROCFS_NAMESPACE_ENUM(lov, getattr),
342 LPROCFS_NAMESPACE_ENUM(lov, setattr),
343 LPROCFS_NAMESPACE_ENUM(lov, open),
344 LPROCFS_NAMESPACE_ENUM(lov, close),
345 LPROCFS_NAMESPACE_ENUM(lov, brw),
346 LPROCFS_NAMESPACE_ENUM(lov, punch),
347 LPROCFS_NAMESPACE_ENUM(lov, summary),
348 LPROCFS_NAMESPACE_ENUM(lov, cancel),
349 LPROCFS_NAMESPACE_ENUM(lov, getinfo),
350 LPROCFS_MAX_ENUM_DIR_LOV
354 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_setup),
355 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_cleanup),
356 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_connect),
357 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_disconnect),
358 LPROCFS_NAMESPACE_ENUM(obdfilter, create),
359 LPROCFS_NAMESPACE_ENUM(obdfilter, destroy),
360 LPROCFS_NAMESPACE_ENUM(obdfilter, getattr),
361 LPROCFS_NAMESPACE_ENUM(obdfilter, setattr),
362 LPROCFS_NAMESPACE_ENUM(obdfilter, open),
363 LPROCFS_NAMESPACE_ENUM(obdfilter, close),
364 LPROCFS_NAMESPACE_ENUM(obdfilter, brw),
365 LPROCFS_NAMESPACE_ENUM(obdfilter, punch),
366 LPROCFS_NAMESPACE_ENUM(obdfilter, summary),
367 LPROCFS_NAMESPACE_ENUM(obdfilter, cancel),
368 LPROCFS_NAMESPACE_ENUM(obdfilter, getinfo),
369 LPROCFS_MAX_ENUM_DIR_OBDFILTER
373 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_setup),
374 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_cleanup),
375 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_connect),
376 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_disconnect),
377 LPROCFS_NAMESPACE_ENUM(ldlm, locks_enqueus),
378 LPROCFS_NAMESPACE_ENUM(ldlm, locks_cancels),
379 LPROCFS_NAMESPACE_ENUM(ldlm, locks_converts),
380 LPROCFS_NAMESPACE_ENUM(ldlm, locks_matches),
381 LPROCFS_MAX_ENUM_DIR_LDLM
385 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_setup),
386 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_cleanup),
387 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_connect),
388 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_disconnect),
389 LPROCFS_NAMESPACE_ENUM(ptlrpc, counters),
390 LPROCFS_NAMESPACE_ENUM(ptlrpc, network),
391 LPROCFS_MAX_ENUM_DIR_PTLRPC
394 #define LPROCFS_DIR_INDEX(CLASS, DIR) \
395 [LPROCFS_NAMESPACE_ENUM(CLASS, DIR)]={#DIR}
398 * Similar rule for profiling counters
403 LPROCFS_NAMESPACE_ENUM(mdc, min_time),
404 LPROCFS_NAMESPACE_ENUM(mdc, max_time),
405 LPROCFS_NAMESPACE_ENUM(mdc, sum_time),
406 LPROCFS_NAMESPACE_ENUM(mdc, num_ops),
411 LPROCFS_NAMESPACE_ENUM(mds, min_time),
412 LPROCFS_NAMESPACE_ENUM(mds, max_time),
413 LPROCFS_NAMESPACE_ENUM(mds, sum_time),
414 LPROCFS_NAMESPACE_ENUM(mds, num_ops),
419 LPROCFS_NAMESPACE_ENUM(osc, min_time),
420 LPROCFS_NAMESPACE_ENUM(osc, max_time),
421 LPROCFS_NAMESPACE_ENUM(osc, sum_time),
422 LPROCFS_NAMESPACE_ENUM(osc, num_ops),
427 LPROCFS_NAMESPACE_ENUM(ost, min_time),
428 LPROCFS_NAMESPACE_ENUM(ost, max_time),
429 LPROCFS_NAMESPACE_ENUM(ost, sum_time),
430 LPROCFS_NAMESPACE_ENUM(ost, num_ops),
435 LPROCFS_NAMESPACE_ENUM(lov, min_time),
436 LPROCFS_NAMESPACE_ENUM(lov, max_time),
437 LPROCFS_NAMESPACE_ENUM(lov, sum_time),
438 LPROCFS_NAMESPACE_ENUM(lov, num_ops),
443 LPROCFS_NAMESPACE_ENUM(obdfilter, min_time),
444 LPROCFS_NAMESPACE_ENUM(obdfilter, max_time),
445 LPROCFS_NAMESPACE_ENUM(obdfilter, sum_time),
446 LPROCFS_NAMESPACE_ENUM(obdfilter, num_ops),
452 LPROCFS_NAMESPACE_ENUM(ldlm, min_time),
453 LPROCFS_NAMESPACE_ENUM(ldlm, max_time),
454 LPROCFS_NAMESPACE_ENUM(ldlm, sum_time),
455 LPROCFS_NAMESPACE_ENUM(ldlm, num_ops),
456 LPROCFS_NAMESPACE_ENUM(ldlm, num_total),
457 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency),
458 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency_inflight),
459 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency_done),
460 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_mintime),
461 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_maxtime),
462 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_sumtime),
467 LPROCFS_NAMESPACE_ENUM(ptlrpc, min_time),
468 LPROCFS_NAMESPACE_ENUM(ptlrpc, max_time),
469 LPROCFS_NAMESPACE_ENUM(ptlrpc, sum_time),
470 LPROCFS_NAMESPACE_ENUM(ptlrpc, num_ops),
472 LPROCFS_NAMESPACE_ENUM(ptlrpc, msgs_alloc),
473 LPROCFS_NAMESPACE_ENUM(ptlrpc, msgs_max),
474 LPROCFS_NAMESPACE_ENUM(ptlrpc, recv_count),
475 LPROCFS_NAMESPACE_ENUM(ptlrpc, recv_length),
476 LPROCFS_NAMESPACE_ENUM(ptlrpc, send_count),
477 LPROCFS_NAMESPACE_ENUM(ptlrpc, send_length),
478 LPROCFS_NAMESPACE_ENUM(ptlrpc, portal_kmemory),
486 #define LPROCFS_ENUM(X) e_##X
495 LPROCFS_ENUM(obdfilter),
497 LPROCFS_ENUM(ptlrpc),
501 #define LPROCFS_CNTR_INDEX(CLASS, NAME) \
502 [LPROCFS_NAMESPACE_ENUM(CLASS, NAME)]={#NAME}
504 #define LPROCFS_GROUP_CREATE(CLASS) \
505 [LPROCFS_ENUM(CLASS)]={#CLASS, dir_##CLASS##_index, prof_##CLASS##_index}
508 * OBD Namespace API: Obtain the namespace group index, given a name
510 int lprocfs_get_nm(char* name, lprocfs_obd_nm_t* collection);
518 int lprocfs_reg_dev(struct obd_device* device, lprocfs_group_t* namespace,
519 unsigned int cnt_struct_size);
521 int lprocfs_dereg_dev(struct obd_device* device);
526 int lprocfs_reg_conn(unsigned int conn_number,
527 struct lprocfs_conn_namespace* namespace);
528 int lprocfs_dereg_conn(unsigned int conn_number);
533 int lprocfs_add_export(unsigned int conn_number,
534 struct obd_device* device);
535 int lprocfs_add_import(unsigned int conn_number,
536 struct obd_device* device);
537 int lprocfs_remove_export(unsigned int conn_number,
538 struct obd_device* device);
539 int lprocfs_remove_import(unsigned int conn_number,
540 struct obd_device* device);
546 struct proc_dir_entry* lprocfs_add_dir(struct proc_dir_entry* root,
549 unsigned int* escape);
552 struct proc_dir_entry* lprocfs_mkdir(const char* dname,
553 struct proc_dir_entry *parent);
556 struct proc_dir_entry* lprocfs_bfs_srch(struct proc_dir_entry* root,
559 struct proc_dir_entry* lprocfs_srch(struct proc_dir_entry* head,
562 int lprocfs_link_dir_counters(struct obd_device* device,
563 struct proc_dir_entry* this_dev_root,
564 lprocfs_group_t* namespace,
565 unsigned int cnt_struct_size,
566 unsigned int class_array_index);
568 int lprocfs_create_dir_namespace(struct proc_dir_entry* this_dev_root,
569 lprocfs_group_t* namespace,
570 unsigned int *num_dirs);
572 int lprocfs_getclass_idx(struct groupspace_index* group,
573 const char* classname);
574 struct proc_dir_entry* lprocfs_mkinitdir(struct obd_device* device);
575 int lprocfs_get_idx(struct namespace_index* class, const char* dir_name);
576 unsigned int lprocfs_add_var(struct obd_device* device,
577 struct proc_dir_entry* root,
578 lprocfs_vars_t* variable,
581 unsigned int cnt_arr_size,
585 void lprocfs_remove_all(struct proc_dir_entry* root);
588 * List of read/write functions that will implement reading
589 * or writing to counters/other variables from userland
590 * processes. Note that the definition allows as many different
591 * functions to be defined as there are counter-variables.
592 * In practice, however, the module implementor is expected
593 * to have a different function only when the variable types are
594 * different, for e.g counter types will have one read/write
595 * function, while strings will have another.
599 int lprocfs_ll_rd(char* page, char **start, off_t off,
600 int count, int *eof, void *data);
601 int lprocfs_ll_wr(struct file* file, const char *buffer,
602 unsigned long count, void *data);
604 int rd_other(char* page, char **start, off_t off,
605 int count, int *eof, void *data);
606 int wr_other(struct file* file, const char *buffer,
607 unsigned long count, void *data);
609 int rd_string(char* page, char **start, off_t off,
610 int count, int *eof, void *data);
611 int wr_string(struct file* file, const char *buffer,
612 unsigned long count, void *data);
614 int rd_fs_type(char* page, char **start, off_t off,
615 int count, int *eof, void *data);
617 int rd_uuid(char* page, char **start, off_t off,
618 int count, int *eof, void *data);
619 int wr_uuid(struct file* file, const char *buffer,
620 unsigned long count, void *data);
622 int rd_uuid(char* page, char **start, off_t off,
623 int count, int *eof, void *data);
625 int rd_blksize(char* page, char **start, off_t off,
626 int count, int *eof, void *data);
627 int rd_blktotal(char* page, char **start, off_t off,
628 int count, int *eof, void *data);
629 int rd_blkfree(char* page, char **start, off_t off,
630 int count, int *eof, void *data);
631 int rd_kbfree(char* page, char **start, off_t off,
632 int count, int *eof, void *data);
634 int rd_numobjects(char* page, char **start, off_t off,
635 int count, int *eof, void *data);
636 int rd_objfree(char* page, char **start, off_t off,
637 int count, int *eof, void *data);
639 int rd_objgroups(char* page, char **start, off_t off,
640 int count, int *eof, void *data);
643 #else /* LProcFS not compiled */
645 #define DEV_PROF_START(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
646 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
647 #define DEV_PRINT_CNTR(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
649 static inline int lprocfs_get_nm(char* name, lprocfs_obd_nm_t* collection)
654 static inline int lprocfs_reg_dev(struct obd_device* device,
655 lprocfs_group_t* namespace,
656 unsigned int cnt_struct_size)
661 static inline int lprocfs_dereg_dev(struct obd_device* device)
663 return LPROCFS_SUCCESS;
666 static inline int lprocfs_reg_conn(unsigned int conn_number,
667 struct lprocfs_conn_namespace* nm)
672 static inline int lprocfs_dereg_conn(unsigned int conn_number)
677 static inline int lprocfs_add_export(unsigned int conn_number,
678 struct obd_device* device)
683 static inline int lprocfs_add_import(unsigned int conn_number,
684 struct obd_device* device)
689 static inline int lprocfs_remove_export(unsigned int conn_number,
690 struct obd_device* device)
695 static inline int lprocfs_remove_import(unsigned int conn_number,
696 struct obd_device* device)
701 #endif /* LPROCFS_EXISTS */
703 #endif /* __LPROCFS_H__ */