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
18 #ifndef LPROCFS_EXISTS
19 #define LPROCFS_EXISTS
22 #define LPROCFS_SUCCESS 1
23 #define LPROCFS_FAILURE -1
25 #include <linux/time.h>
26 #include <linux/proc_fs.h>
27 #include <linux/config.h>
28 #include <linux/param.h>
29 /* #include <linux/msr.h> */
31 typedef enum lprofilers {
36 typedef struct lprocfs_vars{
38 read_proc_t* read_fptr;
39 write_proc_t* write_fptr;
42 typedef struct lprocfs_group {
44 lprocfs_vars_t* count_func_namespace;
45 lprofilers_e prof_type;
48 typedef struct lprocfs_obd_nm {
50 lprocfs_group_t* obd_names;
51 unsigned int cntr_blk_sz;
57 * Structure defining the variables to be maintained
58 * on a per attribute basis for entries. The size of
59 * the profiling entry needs to be passed during registration
60 * with LProcFS, to enable it to allocate space. It is expected
61 * that on a per-device class basis, there would exist only
65 struct lprofiler_gen {
70 /* Default, used for storing intermediate value */
71 unsigned long long start_time;
74 struct lprofiler_ldlm {
82 __u64 num_zerolatency;
83 __u64 num_zerolatency_inflight;
84 __u64 num_zerolatency_done;
85 __u64 non_zero_mintime;
86 __u64 non_zero_maxtime;
87 __u64 non_zero_sumtime;
90 struct lprofiler_ptlrpc {
95 /* Default, used for storing intermediate value */
105 __u64 portal_kmemory;
110 struct namespace_index {
114 struct groupspace_index {
116 struct namespace_index* directory;
117 struct namespace_index* counters;
121 * Used for connections and such
125 typedef enum te_leafType {
133 struct lprocfs_conn_namespace {
142 #ifdef LPROCFS_EXISTS
144 * Utility functions to return the timeofday
147 static inline unsigned long lprocfs_util_gettime(void)
151 struct timeval myTime;
153 do_gettimeofday(&myTime);
154 temp=((__u64)(myTime.tv_usec))&0xFFFFFFFF;
155 temp|=(((__u64)(myTime.tv_sec))<<(8*sizeof(unsigned long)));
160 static inline unsigned long lprocfs_util_getdiff(unsigned long x,
163 return ((x>y)?(x-y):(y-x));
167 tempSec=((y>>8*sizeof(unsigned long))-(x>>8*sizeof(unsigned long)));
168 if(tempSec<0)tempSec=-tempSec;
169 tempuSec=((y&0xFFFFFFFF)-(x&0xFFFFFFFF));
170 if(tempuSec<0)tempuSec=-tempuSec;
171 return(tempSec*1000000+tempuSec);
176 #define LPROCFS_NAMESPACE_ENUM(CLASS, NAME) e_ ##CLASS## _##NAME
179 #define DEV_PROF_START(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
181 struct lprofiler_##PROF_CLASS *x; \
182 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
183 x=(struct lprofiler_##PROF_CLASS *)((OBD)->counters); \
185 /* rdtscl(x->start_time); */ \
186 x->start_time=lprocfs_util_gettime(); \
190 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
192 unsigned long end_time, delta; \
193 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
194 struct lprofiler_##PROF_CLASS *x= \
195 (struct lprofiler_##PROF_CLASS*)((OBD)->counters); \
197 end_time=lprocfs_util_gettime(); \
198 delta=lprocfs_util_getdiff(x->start_time, end_time); \
199 if((delta<x->min_time)||(x->min_time==0))x->min_time=delta; \
200 if(delta>x->max_time)x->max_time=delta; \
201 x->sum_time+=delta; \
206 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
208 __u64 end_time, delta; \
209 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
210 struct lprofiler_##PROF_CLASS *x= \
211 (struct lprofiler_##PROF_CLASS*)((OBD)->counters); \
213 end_time=lprocfs_util_gettime(); \
214 delta=lprocfs_util_getdiff(x->start_time, end_time); \
215 if((delta<x->min_time)||(x->min_time==0))x->min_time=delta; \
216 if(delta>x->max_time)x->max_time=delta; \
217 x->sum_time+=delta; \
222 #define DEV_PRINT_CNTR(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) \
224 int index=LPROCFS_NAMESPACE_ENUM(DEV_CLASS, ATTRIBUTE); \
225 struct lprofiler_##PROF_CLASS *x= \
226 (struct lprofiler_##PROF_CLASS *)&((OBD)->counters); \
228 printk("Max_time=%lld(usec)\n", x->max_time); \
229 printk("Min_time=%lld(usec)\n", x->min_time); \
230 printk("Sum_time=%lld(usec)\n", x->sum_time); \
231 printk("Num_ops=%lld\n", x->num_ops); \
237 * This enum is used as an array index into the counts
238 * that are maintained for the MDS device. The number of
239 * entries here determine the amount of memory allocated
240 * for counters for every instance of this class of
244 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_setup),
245 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_cleanup),
246 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_connect),
247 LPROCFS_NAMESPACE_ENUM(mdc, mgmt_disconnect),
248 LPROCFS_NAMESPACE_ENUM(mdc, reint),
249 LPROCFS_NAMESPACE_ENUM(mdc, getstatus),
250 LPROCFS_NAMESPACE_ENUM(mdc, getattr),
251 LPROCFS_NAMESPACE_ENUM(mdc, setattr),
252 LPROCFS_NAMESPACE_ENUM(mdc, open),
253 LPROCFS_NAMESPACE_ENUM(mdc, readpage),
254 LPROCFS_NAMESPACE_ENUM(mdc, create),
255 LPROCFS_NAMESPACE_ENUM(mdc, unlink),
256 LPROCFS_NAMESPACE_ENUM(mdc, link),
257 LPROCFS_NAMESPACE_ENUM(mdc, rename),
258 LPROCFS_MAX_ENUM_DIR_MDC
262 LPROCFS_NAMESPACE_ENUM(mds, mgmt_setup),
263 LPROCFS_NAMESPACE_ENUM(mds, mgmt_cleanup),
264 LPROCFS_NAMESPACE_ENUM(mds, mgmt_connect),
265 LPROCFS_NAMESPACE_ENUM(mds, mgmt_disconnect),
266 LPROCFS_NAMESPACE_ENUM(mds, getstatus),
267 LPROCFS_NAMESPACE_ENUM(mds, connect),
268 LPROCFS_NAMESPACE_ENUM(mds, disconnect_callback),
269 LPROCFS_NAMESPACE_ENUM(mds, getattr),
270 LPROCFS_NAMESPACE_ENUM(mds, readpage),
271 LPROCFS_NAMESPACE_ENUM(mds, open),
272 LPROCFS_NAMESPACE_ENUM(mds, close),
273 LPROCFS_NAMESPACE_ENUM(mds, create),
274 LPROCFS_NAMESPACE_ENUM(mds, unlink),
275 LPROCFS_NAMESPACE_ENUM(mds, link),
276 LPROCFS_NAMESPACE_ENUM(mds, rename),
277 LPROCFS_NAMESPACE_ENUM(mds, reint_summary),
278 LPROCFS_NAMESPACE_ENUM(mds, reint_setattr),
279 LPROCFS_NAMESPACE_ENUM(mds, reint_create),
280 LPROCFS_NAMESPACE_ENUM(mds, reint_unlink),
281 LPROCFS_NAMESPACE_ENUM(mds, reint_link),
282 LPROCFS_NAMESPACE_ENUM(mds, reint_rename),
283 LPROCFS_NAMESPACE_ENUM(mds, reint_recreate),
284 LPROCFS_MAX_ENUM_DIR_MDS
289 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_setup),
290 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_cleanup),
291 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_connect),
292 LPROCFS_NAMESPACE_ENUM(mdt, mgmt_disconnect),
296 LPROCFS_NAMESPACE_ENUM(osc, mgmt_setup),
297 LPROCFS_NAMESPACE_ENUM(osc, mgmt_cleanup),
298 LPROCFS_NAMESPACE_ENUM(osc, mgmt_connect),
299 LPROCFS_NAMESPACE_ENUM(osc, mgmt_disconnect),
300 LPROCFS_NAMESPACE_ENUM(osc, create),
301 LPROCFS_NAMESPACE_ENUM(osc, destroy),
302 LPROCFS_NAMESPACE_ENUM(osc, getattr),
303 LPROCFS_NAMESPACE_ENUM(osc, setattr),
304 LPROCFS_NAMESPACE_ENUM(osc, open),
305 LPROCFS_NAMESPACE_ENUM(osc, close),
306 LPROCFS_NAMESPACE_ENUM(osc, brw),
307 LPROCFS_NAMESPACE_ENUM(osc, punch),
308 LPROCFS_NAMESPACE_ENUM(osc, summary),
309 LPROCFS_NAMESPACE_ENUM(osc, cancel),
310 LPROCFS_MAX_ENUM_DIR_OSC
314 LPROCFS_NAMESPACE_ENUM(ost, mgmt_setup),
315 LPROCFS_NAMESPACE_ENUM(ost, mgmt_cleanup),
316 LPROCFS_NAMESPACE_ENUM(ost, mgmt_connect),
317 LPROCFS_NAMESPACE_ENUM(ost, mgmt_disconnect),
318 LPROCFS_NAMESPACE_ENUM(ost, create),
319 LPROCFS_NAMESPACE_ENUM(ost, destroy),
320 LPROCFS_NAMESPACE_ENUM(ost, getattr),
321 LPROCFS_NAMESPACE_ENUM(ost, setattr),
322 LPROCFS_NAMESPACE_ENUM(ost, open),
323 LPROCFS_NAMESPACE_ENUM(ost, close),
324 LPROCFS_NAMESPACE_ENUM(ost, brw),
325 LPROCFS_NAMESPACE_ENUM(ost, punch),
326 LPROCFS_NAMESPACE_ENUM(ost, summary),
327 LPROCFS_NAMESPACE_ENUM(ost, cancel),
328 LPROCFS_NAMESPACE_ENUM(ost, getinfo),
329 LPROCFS_MAX_ENUM_DIR_OST
333 LPROCFS_NAMESPACE_ENUM(lov, mgmt_setup),
334 LPROCFS_NAMESPACE_ENUM(lov, mgmt_cleanup),
335 LPROCFS_NAMESPACE_ENUM(lov, mgmt_connect),
336 LPROCFS_NAMESPACE_ENUM(lov, mgmt_disconnect),
337 LPROCFS_NAMESPACE_ENUM(lov, create),
338 LPROCFS_NAMESPACE_ENUM(lov, destroy),
339 LPROCFS_NAMESPACE_ENUM(lov, getattr),
340 LPROCFS_NAMESPACE_ENUM(lov, setattr),
341 LPROCFS_NAMESPACE_ENUM(lov, open),
342 LPROCFS_NAMESPACE_ENUM(lov, close),
343 LPROCFS_NAMESPACE_ENUM(lov, brw),
344 LPROCFS_NAMESPACE_ENUM(lov, punch),
345 LPROCFS_NAMESPACE_ENUM(lov, summary),
346 LPROCFS_NAMESPACE_ENUM(lov, cancel),
347 LPROCFS_NAMESPACE_ENUM(lov, getinfo),
348 LPROCFS_MAX_ENUM_DIR_LOV
352 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_setup),
353 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_cleanup),
354 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_connect),
355 LPROCFS_NAMESPACE_ENUM(obdfilter, mgmt_disconnect),
356 LPROCFS_NAMESPACE_ENUM(obdfilter, create),
357 LPROCFS_NAMESPACE_ENUM(obdfilter, destroy),
358 LPROCFS_NAMESPACE_ENUM(obdfilter, getattr),
359 LPROCFS_NAMESPACE_ENUM(obdfilter, setattr),
360 LPROCFS_NAMESPACE_ENUM(obdfilter, open),
361 LPROCFS_NAMESPACE_ENUM(obdfilter, close),
362 LPROCFS_NAMESPACE_ENUM(obdfilter, brw),
363 LPROCFS_NAMESPACE_ENUM(obdfilter, punch),
364 LPROCFS_NAMESPACE_ENUM(obdfilter, summary),
365 LPROCFS_NAMESPACE_ENUM(obdfilter, cancel),
366 LPROCFS_NAMESPACE_ENUM(obdfilter, getinfo),
367 LPROCFS_MAX_ENUM_DIR_OBDFILTER
371 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_setup),
372 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_cleanup),
373 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_connect),
374 LPROCFS_NAMESPACE_ENUM(ldlm, mgmt_disconnect),
375 LPROCFS_NAMESPACE_ENUM(ldlm, locks_enqueus),
376 LPROCFS_NAMESPACE_ENUM(ldlm, locks_cancels),
377 LPROCFS_NAMESPACE_ENUM(ldlm, locks_converts),
378 LPROCFS_NAMESPACE_ENUM(ldlm, locks_matches),
379 LPROCFS_MAX_ENUM_DIR_LDLM
383 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_setup),
384 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_cleanup),
385 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_connect),
386 LPROCFS_NAMESPACE_ENUM(ptlrpc, mgmt_disconnect),
387 LPROCFS_NAMESPACE_ENUM(ptlrpc, counters),
388 LPROCFS_NAMESPACE_ENUM(ptlrpc, network),
389 LPROCFS_MAX_ENUM_DIR_PTLRPC
392 #define LPROCFS_DIR_INDEX(CLASS, DIR) \
393 [LPROCFS_NAMESPACE_ENUM(CLASS, DIR)]={#DIR}
396 * Similar rule for profiling counters
401 LPROCFS_NAMESPACE_ENUM(mdc, min_time),
402 LPROCFS_NAMESPACE_ENUM(mdc, max_time),
403 LPROCFS_NAMESPACE_ENUM(mdc, sum_time),
404 LPROCFS_NAMESPACE_ENUM(mdc, num_ops),
409 LPROCFS_NAMESPACE_ENUM(mds, min_time),
410 LPROCFS_NAMESPACE_ENUM(mds, max_time),
411 LPROCFS_NAMESPACE_ENUM(mds, sum_time),
412 LPROCFS_NAMESPACE_ENUM(mds, num_ops),
417 LPROCFS_NAMESPACE_ENUM(osc, min_time),
418 LPROCFS_NAMESPACE_ENUM(osc, max_time),
419 LPROCFS_NAMESPACE_ENUM(osc, sum_time),
420 LPROCFS_NAMESPACE_ENUM(osc, num_ops),
425 LPROCFS_NAMESPACE_ENUM(ost, min_time),
426 LPROCFS_NAMESPACE_ENUM(ost, max_time),
427 LPROCFS_NAMESPACE_ENUM(ost, sum_time),
428 LPROCFS_NAMESPACE_ENUM(ost, num_ops),
433 LPROCFS_NAMESPACE_ENUM(lov, min_time),
434 LPROCFS_NAMESPACE_ENUM(lov, max_time),
435 LPROCFS_NAMESPACE_ENUM(lov, sum_time),
436 LPROCFS_NAMESPACE_ENUM(lov, num_ops),
441 LPROCFS_NAMESPACE_ENUM(obdfilter, min_time),
442 LPROCFS_NAMESPACE_ENUM(obdfilter, max_time),
443 LPROCFS_NAMESPACE_ENUM(obdfilter, sum_time),
444 LPROCFS_NAMESPACE_ENUM(obdfilter, num_ops),
450 LPROCFS_NAMESPACE_ENUM(ldlm, min_time),
451 LPROCFS_NAMESPACE_ENUM(ldlm, max_time),
452 LPROCFS_NAMESPACE_ENUM(ldlm, sum_time),
453 LPROCFS_NAMESPACE_ENUM(ldlm, num_ops),
454 LPROCFS_NAMESPACE_ENUM(ldlm, num_total),
455 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency),
456 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency_inflight),
457 LPROCFS_NAMESPACE_ENUM(ldlm, num_zerolatency_done),
458 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_mintime),
459 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_maxtime),
460 LPROCFS_NAMESPACE_ENUM(ldlm, nonzero_sumtime),
465 LPROCFS_NAMESPACE_ENUM(ptlrpc, min_time),
466 LPROCFS_NAMESPACE_ENUM(ptlrpc, max_time),
467 LPROCFS_NAMESPACE_ENUM(ptlrpc, sum_time),
468 LPROCFS_NAMESPACE_ENUM(ptlrpc, num_ops),
470 LPROCFS_NAMESPACE_ENUM(ptlrpc, msgs_alloc),
471 LPROCFS_NAMESPACE_ENUM(ptlrpc, msgs_max),
472 LPROCFS_NAMESPACE_ENUM(ptlrpc, recv_count),
473 LPROCFS_NAMESPACE_ENUM(ptlrpc, recv_length),
474 LPROCFS_NAMESPACE_ENUM(ptlrpc, send_count),
475 LPROCFS_NAMESPACE_ENUM(ptlrpc, send_length),
476 LPROCFS_NAMESPACE_ENUM(ptlrpc, portal_kmemory),
484 #define LPROCFS_ENUM(X) e_##X
493 LPROCFS_ENUM(obdfilter),
495 LPROCFS_ENUM(ptlrpc),
499 #define LPROCFS_CNTR_INDEX(CLASS, NAME) \
500 [LPROCFS_NAMESPACE_ENUM(CLASS, NAME)]={#NAME}
502 #define LPROCFS_GROUP_CREATE(CLASS) \
503 [LPROCFS_ENUM(CLASS)]={#CLASS, dir_##CLASS##_index, prof_##CLASS##_index}
506 * OBD Namespace API: Obtain the namespace group index, given a name
508 int lprocfs_get_nm(char* name, lprocfs_obd_nm_t* collection);
516 int lprocfs_reg_dev(struct obd_device* device, lprocfs_group_t* namespace,
517 unsigned int cnt_struct_size);
519 int lprocfs_dereg_dev(struct obd_device* device);
524 int lprocfs_reg_conn(unsigned int conn_number,
525 struct lprocfs_conn_namespace* namespace);
526 int lprocfs_dereg_conn(unsigned int conn_number);
531 int lprocfs_add_export(unsigned int conn_number,
532 struct obd_device* device);
533 int lprocfs_add_import(unsigned int conn_number,
534 struct obd_device* device);
535 int lprocfs_remove_export(unsigned int conn_number,
536 struct obd_device* device);
537 int lprocfs_remove_import(unsigned int conn_number,
538 struct obd_device* device);
544 struct proc_dir_entry* lprocfs_add_dir(struct proc_dir_entry* root,
547 unsigned int* escape);
550 struct proc_dir_entry* lprocfs_mkdir(const char* dname,
551 struct proc_dir_entry *parent);
554 struct proc_dir_entry* lprocfs_bfs_srch(struct proc_dir_entry* root,
557 struct proc_dir_entry* lprocfs_srch(struct proc_dir_entry* head,
560 int lprocfs_link_dir_counters(struct obd_device* device,
561 struct proc_dir_entry* this_dev_root,
562 lprocfs_group_t* namespace,
563 unsigned int cnt_struct_size,
564 unsigned int class_array_index);
566 int lprocfs_create_dir_namespace(struct proc_dir_entry* this_dev_root,
567 lprocfs_group_t* namespace,
568 unsigned int *num_dirs);
570 int lprocfs_getclass_idx(struct groupspace_index* group,
571 const char* classname);
572 struct proc_dir_entry* lprocfs_mkinitdir(struct obd_device* device);
573 int lprocfs_get_idx(struct namespace_index* class, const char* dir_name);
574 unsigned int lprocfs_add_var(struct obd_device* device,
575 struct proc_dir_entry* root,
576 lprocfs_vars_t* variable,
579 unsigned int cnt_arr_size,
583 void lprocfs_remove_all(struct proc_dir_entry* root);
586 * List of read/write functions that will implement reading
587 * or writing to counters/other variables from userland
588 * processes. Note that the definition allows as many different
589 * functions to be defined as there are counter-variables.
590 * In practice, however, the module implementor is expected
591 * to have a different function only when the variable types are
592 * different, for e.g counter types will have one read/write
593 * function, while strings will have another.
597 int lprocfs_ll_rd(char* page, char **start, off_t off,
598 int count, int *eof, void *data);
599 int lprocfs_ll_wr(struct file* file, const char *buffer,
600 unsigned long count, void *data);
602 int rd_other(char* page, char **start, off_t off,
603 int count, int *eof, void *data);
604 int wr_other(struct file* file, const char *buffer,
605 unsigned long count, void *data);
607 int rd_string(char* page, char **start, off_t off,
608 int count, int *eof, void *data);
609 int wr_string(struct file* file, const char *buffer,
610 unsigned long count, void *data);
612 int rd_fs_type(char* page, char **start, off_t off,
613 int count, int *eof, void *data);
615 int rd_uuid(char* page, char **start, off_t off,
616 int count, int *eof, void *data);
617 int wr_uuid(struct file* file, const char *buffer,
618 unsigned long count, void *data);
620 int rd_uuid(char* page, char **start, off_t off,
621 int count, int *eof, void *data);
623 int rd_blksize(char* page, char **start, off_t off,
624 int count, int *eof, void *data);
625 int rd_blktotal(char* page, char **start, off_t off,
626 int count, int *eof, void *data);
627 int rd_blkfree(char* page, char **start, off_t off,
628 int count, int *eof, void *data);
629 int rd_kbfree(char* page, char **start, off_t off,
630 int count, int *eof, void *data);
632 int rd_numobjects(char* page, char **start, off_t off,
633 int count, int *eof, void *data);
634 int rd_objfree(char* page, char **start, off_t off,
635 int count, int *eof, void *data);
637 int rd_objgroups(char* page, char **start, off_t off,
638 int count, int *eof, void *data);
641 #else /* LProcFS not compiled */
643 #define DEV_PROF_START(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
644 #define DEV_PROF_END(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
645 #define DEV_PRINT_CNTR(DEV_CLASS, OBD, PROF_CLASS, ATTRIBUTE) 0
647 static inline int lprocfs_get_nm(char* name, lprocfs_obd_nm_t* collection)
652 static inline int lprocfs_reg_dev(struct obd_device* device,
653 lprocfs_group_t* namespace,
654 unsigned int cnt_struct_size)
659 static inline int lprocfs_dereg_dev(struct obd_device* device)
661 return LPROCFS_SUCCESS;
664 static inline int lprocfs_reg_conn(unsigned int conn_number,
665 struct lprocfs_conn_namespace* nm)
670 static inline int lprocfs_dereg_conn(unsigned int conn_number)
675 static inline int lprocfs_add_export(unsigned int conn_number,
676 struct obd_device* device)
681 static inline int lprocfs_add_import(unsigned int conn_number,
682 struct obd_device* device)
687 static inline int lprocfs_remove_export(unsigned int conn_number,
688 struct obd_device* device)
693 static inline int lprocfs_remove_import(unsigned int conn_number,
694 struct obd_device* device)
699 #endif /* LPROCFS_EXISTS */
701 #endif /* __LPROCFS_H__ */