generic/60[78]: ensure the initial DAX file flag state before test
[xfstests-dev.git] / dmapi / src / common / lib / dmport.h
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2000-2001 Silicon Graphics, Inc.
4  * All Rights Reserved.
5  */
6
7 #ifndef _DMFSAPI_DMPORT_H
8 #define _DMFSAPI_DMPORT_H
9
10 #ifdef  __cplusplus
11 extern  "C" {
12 #endif
13
14 /**************************************************************************
15  *                                                                        *
16  * DMF's use of DMAPI is based upon the X/Open document                   *
17  *      Systems Management: Data Storage Managment (XDSM) API             *
18  * dated February 1997.  However, no implementation of DMAPI perfectly    *
19  * matches the spec.  Each implementation has some functions that it      *
20  * didn't implement, non-standard functions that it added, differences    *
21  * in function parameter types, return value types, number and order of   *
22  * parameters, etc.  There are also differences in the formats of some    *
23  * of the DMAPI structures used by those functions.  Finally, there are   *
24  * many scalar values for which DMAPI assigned no particular size.  For   *
25  * example, a dm_fsid_t is 32 bits under Veritas and 64 bits under SGI.   *
26  *                                                                        *
27  * To hide the differences as much as possible, this include file tries   *
28  * to shoehorn each DMAPI implementation into the XDSM mold as much as    *
29  * possible.  Functions which are not compatible with the XDSM spec are   *
30  * redefined using wrapper routines to make them conform to the spec.     *
31  * Functions which were not implemented have stubs defined which return   *
32  * ENOSYS (see file stubs.c for all wrappers and stubs).  In dmport.h,    *
33  * missing structures and scalers are defined, incompatible typedefs are  *
34  * redefined, etc.                                                        *
35  *                                                                        *
36  * The goal is to reduce as much as possible the number of #ifdefs that   *
37  * have to be added to DMF to handle specific DMAPI implementations.      *
38  * Some #ifdefs may still be required because of semantic differences     *
39  * between the XDSM spec definition and the actual implementation.        *
40  *                                                                        *
41  * Following all the implementation-specific definitions, dmport.h        *
42  * includes a complete set of prototypes for all functions that are part  *
43  * of  the XDSM specification.  This is done as a double-check.  Should   *
44  * any of the actual implementations change, the compiler should tip us   *
45  * off by complaining about imcompatible function redefinitions.          *
46  *                                                                        *
47  **************************************************************************/
48
49
50 /* ---------------- Veritas-specific hack documentation -----------------
51
52 The following functions have no prototypes in the Veritas include file
53 <sys/dmapi/dmapi.h>.  They do not link either.
54
55 extern int dm_handle_is_valid(void *, size_t);
56
57
58 The following functions have prototypes in <sys/dmapi/dmapi.h>, but
59 they do not link.
60
61 extern int dm_getall_disp(dm_sessid_t, size_t, void *, size_t *);
62 extern int dm_getall_dmattr(dm_sessid_t, void *, size_t, 
63                 dm_token_t, size_t, void *, size_t *);
64
65
66 The following functions have no prototypes in <sys/dmapi/dmapi.h> but do link.
67
68 extern int dm_obj_ref_hold(dm_sessid_t, dm_token_t, void *, size_t);
69 extern int dm_obj_ref_rele(dm_sessid_t, dm_token_t, void *, size_t);
70 extern int dm_obj_ref_query(dm_sessid_t, dm_token_t, void *, size_t);
71
72
73 The following Veritas prototypes are different in some way from the
74 spec prototypes, either in parameter types, return value types, or in
75 some semantic way.  Look below to see the spec versions of the prototypes.
76
77 extern int dm_downgrade_right(dm_sessid_t, void *, size_t, 
78                 dm_token_t, int, dm_right_t);
79 extern int dm_get_config_events(void *, size_t, u_int,
80                 dm_eventset_t *, u_int *);
81 extern int dm_get_events(dm_sessid_t, u_int, int, size_t, void *, size_t *);
82 extern int dm_get_mountinfo(dm_sessid_t, dm_token_t, void *, size_t, 
83                 size_t, void *, size_t *);
84 extern int dm_init_service(void);
85 extern int dm_make_handle(dev_t , long, long, void **, size_t *);
86 extern int dm_make_fshandle(dev_t , void **, size_t *);
87 extern dev_t dm_handle_to_dev(void *, size_t);
88 extern long dm_handle_to_fgen(void *, size_t);
89 extern long dm_handle_to_ino(void *, size_t);
90 extern int dm_pending(dm_sessid_t, void *, size_t, dm_token_t, int);
91 extern dm_ssize_t dm_read_invis(dm_sessid_t, void *, size_t,
92                 dm_token_t, dm_off_t, dm_ssize_t, void *);
93 extern dm_ssize_t dm_write_invis(dm_sessid_t, void *, size_t,
94                 dm_token_t, dm_off_t, dm_ssize_t, void *, int);
95 extern int dm_request_right(dm_sessid_t, void *, size_t, 
96                 dm_token_t, int, dm_right_t);
97 extern int dm_set_inherit(dm_sessid_t, void *, size_t,
98                 dm_token_t, dm_attrname_t *, u_int);
99 extern int dm_set_return_ondestroy(dm_sessid_t, void *, size_t,
100                 dm_token_t,  dm_attrname_t *, int);
101 extern int dm_upgrade_right(dm_sessid_t, void *, size_t, 
102                 dm_token_t, int, dm_right_t);
103 extern int dm_set_region(dm_sessid_t, void *, size_t,
104                 dm_token_t, u_int, dm_region_t *, u_int *);
105 extern dm_ssize_t dm_sync_by_handle(dm_sessid_t, void *, size_t, dm_token_t);
106
107
108 The following Veritas prototype exists in <sys/dmapi/dmapi.h> but
109 does not appear in the spec.
110
111 extern void dm_attach_event(dm_sessid_t, dm_token_t);
112
113 The following functions exist in the Veritas library libdmi.a, but have no
114 prototypes within <sys/dmapi/dmapi.h>.  Their function is unknown.
115
116 dm_attach_event_nofork
117 dm_event_query
118 dm_event_valid
119 dm_get_disp
120 dm_set_resident
121 dmregion_compare
122 kdm_get_eventinfo
123 kdm_get_sessioninfo
124
125 -------------- end of Veritas-specific hack documentation --------------- */
126
127 #ifdef  VERITAS_21
128
129 #include <sys/types.h>
130
131 #include <sys/dmapi/dmapi.h>
132
133 /* Rename functions whose prototypes clash with the XDSM standard.  (Library
134    routines map from XDSM functions back to Veritas functions.)
135 */
136
137 #define dm_downgrade_right      xvfs_dm_downgrade_right
138 #define dm_fd_to_handle         xvfs_dm_fd_to_handle
139 #define dm_get_events           xvfs_dm_get_events
140 #define dm_get_mountinfo        xvfs_dm_get_mountinfo
141 #define dm_handle_to_ino        xvfs_dm_handle_to_ino
142 #define dm_init_service         xvfs_dm_init_service
143 #define dm_make_fshandle        xvfs_dm_make_fshandle
144 #define dm_make_handle          xvfs_dm_make_handle
145 #define dm_path_to_fshandle     xvfs_dm_path_to_fshandle
146 #define dm_path_to_handle       xvfs_dm_path_to_handle
147 #define dm_pending              xvfs_dm_pending
148 #define dm_read_invis           xvfs_dm_read_invis
149 #define dm_write_invis          xvfs_dm_write_invis
150 #define dm_request_right        xvfs_dm_request_right
151 #define dm_set_inherit          xvfs_dm_set_inherit
152 #define dm_set_region           xvfs_dm_set_region
153 #define dm_sync_by_handle       xvfs_dm_sync_by_handle
154 #define dm_upgrade_right        xvfs_dm_upgrade_right
155
156
157 #define DM_ATTR_NAME_SIZE       8
158 #undef  DM_ATTRNAME_SIZE
159 #define DM_VER_STR_CONTENTS     "Veritas DMAPI V1.0"
160
161 #define DM_EV_WAIT      0x1
162 #define DM_RR_WAIT      0x1
163 #undef  DM_WAIT
164 #undef  DM_NOWAIT
165 #undef  DM_EVENT_NOWAIT
166
167 #define DM_CONFIG_INHERIT_ATTRIBS       (DM_CONFIG_LOCK_UPGRADE + 1)
168 #undef  DM_CONFIG_INHERIT
169 #define DM_CONFIG_MAX_HANDLE_SIZE       (DM_CONFIG_INHERIT_ATTRIBS + 1)
170 #undef  DM_CONFIG_MAX_FILE_HANDLE_SIZE
171 #define DM_CONFIG_MAX_ATTR_ON_DESTROY   (DM_CONFIG_MAX_HANDLE_SIZE + 1)
172 #undef  DM_CONFIG_MAX_ATTR_BYTES_ON_DESTROY
173 #define DM_CONFIG_OBJ_REF               (DM_CONFIG_MAX_ATTR_ON_DESTROY + 1)
174 #define DM_CONFIG_DTIME_OVERLOAD        (DM_CONFIG_OBJ_REF + 1)
175 #undef  DM_CONFIG_MAX
176
177 #define DM_AT_DTIME     DM_AT_DTIMES
178
179 /* In the dm_fileattr_t structure, Veritas used 'timeval' structures for all
180    the time fields while XDSM uses 'time_t' structures.  Define some symbols
181    that can be used for the time fields with all implementation types.
182 */
183
184 #define FA_ATIME        fa_atime.tv_sec
185 #define FA_MTIME        fa_atime.tv_sec
186 #define FA_CTIME        fa_ctime.tv_sec
187 #define FA_DTIME        fa_dtime.tv_sec
188
189 #define DM_WRITE_SYNC   0x1     /* used in dm_write_invis() */
190
191 #define DM_UNMOUNT_FORCE 0x1    /* ne_mode field in dm_namesp_event_t */
192
193 /* Rename one event to match the XDSM standard. */
194
195 #define DM_EVENT_CLOSE          (DM_EVENT_DESTROY + 1)
196 #undef  DM_EVENT_CLOSED
197
198 /* DM_EVENT_CANCEL is defined above DM_EVENT_MAX, and is unsupported. */
199
200 #undef  DM_REGION_VALIDFLAG
201
202 /* Add missing typedefs */
203
204 typedef u_int   dm_boolean_t;
205 typedef dev_t   dm_fsid_t;      /* This could be made a uint64_t with work! */
206 typedef long    dm_igen_t;
207 typedef long    dm_ino_t;
208 typedef u_int   dm_sequence_t;
209
210
211 /* Define missing fields within the various event structures. */
212
213 #define ev_sequence     ev_token        /* for compilation only!  Won't work! */
214
215 #define ds_handle       te_handle       /* fix fields in dm_destroy_event_t */
216 #define ds_attrname     te_attrname
217 #define ds_attrcopy     te_attrdata
218
219
220 struct  dm_cancel_event {               /* define missing dm_cancel_event_t */
221         dm_sequence_t   ce_sequence;
222         dm_token_t      ce_token;
223 };
224 typedef struct dm_cancel_event  dm_cancel_event_t;
225
226
227 struct  dm_mount_event {                /* define missing dm_mount_event_t */
228         mode_t          me_mode;
229         dm_vardata_t    me_handle1;
230         dm_vardata_t    me_handle2;
231         dm_vardata_t    me_name1;
232         dm_vardata_t    me_name2;
233         dm_vardata_t    me_roothandle;
234 };
235 typedef struct dm_mount_event   dm_mount_event_t;
236
237
238 /* Add the missing dm_timestruct_t structure used by dm_pending. */
239
240 struct  dm_timestruct {
241         time_t          dm_tv_sec;
242         int             dm_tv_nsec;
243 };
244 typedef struct dm_timestruct dm_timestruct_t;
245
246 #endif
247
248
249
250 /* -------------------- SGI-specific hack documentation -------------------
251
252    There are various fields within DMAPI structures that are not supported.
253    Fill in this information someday.
254
255    The following functions have prototypes defined in <sys/dmi.h> and have
256    entry points defined in libdm.so, but they are not actually implemented
257    within the kernel.  They all return ENOSYS if called.
258
259         dm_clear_inherit
260         dm_create_by_handle
261         dm_get_bulkall
262         dm_getall_inherit
263         dm_mkdir_by_handle
264         dm_set_inherit
265         dm_symlink_by_handle
266
267    The DMAPI functions which deal with rights do not work as described in
268    the specification.  While the functions exist and are callable, they
269    always return successfully without actually obtaining any locks within
270    the filesystem.                        
271
272         dm_downgrade_right
273         dm_query_right
274         dm_release_right
275         dm_request_right
276         dm_upgrade_right
277
278    The following non-standard SGI prototype is added to the DMAPI interface
279    so that real-time files may be migrated and recalled.
280
281         dm_get_dioinfo
282
283 -------------- end of SGI-specific hack documentation --------------- */
284
285 #ifdef  linux
286
287 #include <dmapi.h>
288
289 /* In the dm_fileattr_t structure, Veritas used 'timeval' structures for all
290    the time fields while XDSM uses 'time_t' structures.  Define some symbols
291    that can be used for the time fields with all implementation types.
292 */
293
294 #define FA_ATIME        fa_atime
295 #define FA_MTIME        fa_mtime
296 #define FA_CTIME        fa_ctime
297 #define FA_DTIME        fa_dtime
298
299 #endif /* linux */
300
301 /* ----------------------- XDSM standard prototypes ----------------------- */
302
303 /* The following list provides the prototypes for all functions defined in
304    the DMAPI interface spec from X/Open (XDSM) dated February 1997.  They
305    are here to force compiler errors in case the Veritas or SGI DMAPI
306    prototypes should ever change without our knowing about it.
307 */
308
309 extern int
310 dm_clear_inherit(
311         dm_sessid_t     sid,
312         void            *hanp,
313         size_t          hlen,
314         dm_token_t      token,
315         dm_attrname_t   *attrnamep);
316
317 extern int
318 dm_create_by_handle(
319         dm_sessid_t     sid,
320         void            *dirhanp,
321         size_t          dirhlen,
322         dm_token_t      token,
323         void            *hanp,
324         size_t          hlen,
325         char            *cname);
326
327 extern int
328 dm_create_session(
329         dm_sessid_t     oldsid,
330         char            *sessinfop,
331         dm_sessid_t     *newsidp);
332
333 extern int
334 dm_create_userevent(
335         dm_sessid_t     sid,
336         size_t          msglen,
337         void            *msgdatap,
338         dm_token_t      *tokenp);
339
340 extern int
341 dm_destroy_session(
342         dm_sessid_t     sid);
343
344 extern int
345 dm_downgrade_right(
346         dm_sessid_t     sid,
347         void            *hanp,
348         size_t          hlen,
349         dm_token_t      token);
350
351 extern int
352 dm_fd_to_handle(
353         int             fd,
354         void            **hanpp,
355         size_t          *hlenp);
356
357 extern int
358 dm_find_eventmsg(
359         dm_sessid_t     sid,
360         dm_token_t      token,
361         size_t          buflen,
362         void            *bufp,
363         size_t          *rlenp);
364
365 extern int
366 dm_get_allocinfo(
367         dm_sessid_t     sid,
368         void            *hanp,
369         size_t          hlen,
370         dm_token_t      token,
371         dm_off_t        *offp,
372         u_int           nelem,
373         dm_extent_t     *extentp,
374         u_int           *nelemp);
375
376 extern int
377 dm_get_bulkall(
378         dm_sessid_t     sid,
379         void            *hanp,
380         size_t          hlen,
381         dm_token_t      token,
382         u_int           mask,
383         dm_attrname_t   *attrnamep,
384         dm_attrloc_t    *locp,
385         size_t          buflen,
386         void            *bufp,
387         size_t          *rlenp);
388
389 extern int
390 dm_get_bulkattr(
391         dm_sessid_t     sid,
392         void            *hanp,
393         size_t          hlen,
394         dm_token_t      token,
395         u_int           mask,
396         dm_attrloc_t    *locp,
397         size_t          buflen,
398         void            *bufp,
399         size_t          *rlenp);
400
401 extern int
402 dm_get_config(
403         void            *hanp,
404         size_t          hlen,
405         dm_config_t     flagname,
406         dm_size_t       *retvalp);
407
408 extern int
409 dm_get_config_events(
410         void            *hanp,
411         size_t          hlen,
412         u_int           nelem,
413         dm_eventset_t   *eventsetp,
414         u_int           *nelemp);
415
416 extern int
417 dm_get_dirattrs(
418         dm_sessid_t     sid,
419         void            *hanp,
420         size_t          hlen,
421         dm_token_t      token,
422         u_int           mask,
423         dm_attrloc_t    *locp,
424         size_t          buflen,
425         void            *bufp,
426         size_t          *rlenp);
427
428 extern int
429 dm_get_dmattr(
430         dm_sessid_t     sid,
431         void            *hanp,
432         size_t          hlen,
433         dm_token_t      token,
434         dm_attrname_t   *attrnamep,
435         size_t          buflen,
436         void            *bufp,
437         size_t          *rlenp);
438
439 extern int
440 dm_get_eventlist(
441         dm_sessid_t     sid,
442         void            *hanp,
443         size_t          hlen,
444         dm_token_t      token,
445         u_int           nelem,
446         dm_eventset_t   *eventsetp,
447         u_int           *nelemp);
448
449 extern int
450 dm_get_events(
451         dm_sessid_t     sid,
452         u_int           maxmsgs,
453         u_int           flags,
454         size_t          buflen,
455         void            *bufp,
456         size_t          *rlenp);
457
458 extern int
459 dm_get_fileattr(
460         dm_sessid_t     sid,
461         void            *hanp,
462         size_t          hlen,
463         dm_token_t      token,
464         u_int           mask,
465         dm_stat_t       *statp);
466
467 extern int
468 dm_get_mountinfo(
469         dm_sessid_t     sid,
470         void            *hanp,
471         size_t          hlen,
472         dm_token_t      token,
473         size_t          buflen,
474         void            *bufp,
475         size_t          *rlenp);
476
477 extern int
478 dm_get_region(
479         dm_sessid_t     sid,
480         void            *hanp,
481         size_t          hlen,
482         dm_token_t      token,
483         u_int           nelem,
484         dm_region_t     *regbufp,
485         u_int           *nelemp);
486
487 extern int
488 dm_getall_disp(
489         dm_sessid_t     sid,
490         size_t          buflen,
491         void            *bufp,
492         size_t          *rlenp);
493
494 extern int
495 dm_getall_dmattr(
496         dm_sessid_t     sid,
497         void            *hanp,
498         size_t          hlen,
499         dm_token_t      token,
500         size_t          buflen,
501         void            *bufp,
502         size_t          *rlenp);
503
504 extern int
505 dm_getall_inherit(
506         dm_sessid_t     sid,
507         void            *hanp,
508         size_t          hlen,
509         dm_token_t      token,
510         u_int           nelem,
511         dm_inherit_t    *inheritbufp,
512         u_int           *nelemp);
513
514 extern int
515 dm_getall_sessions(
516         u_int           nelem,
517         dm_sessid_t     *sidbufp,
518         u_int           *nelemp);
519
520 extern int
521 dm_getall_tokens(
522         dm_sessid_t     sid,
523         u_int           nelem,
524         dm_token_t      *tokenbufp,
525         u_int           *nelemp);
526
527 extern int
528 dm_handle_cmp(
529         void            *hanp1,
530         size_t          hlen1,
531         void            *hanp2,
532         size_t          hlen2);
533
534 extern void
535 dm_handle_free(
536         void            *hanp,
537         size_t          hlen);
538
539 extern u_int
540 dm_handle_hash(
541         void            *hanp,
542         size_t          hlen);
543
544 extern dm_boolean_t
545 dm_handle_is_valid(
546         void            *hanp,
547         size_t          hlen);
548
549 extern int
550 dm_handle_to_fshandle(
551         void            *hanp,
552         size_t          hlen,
553         void            **fshanpp,
554         size_t          *fshlenp);
555
556 extern int
557 dm_handle_to_fsid(
558         void            *hanp,
559         size_t          hlen,
560         dm_fsid_t       *fsidp);
561
562 extern int
563 dm_handle_to_igen(
564         void            *hanp,
565         size_t          hlen,
566         dm_igen_t       *igenp);
567
568 extern int
569 dm_handle_to_ino(
570         void            *hanp,
571         size_t          hlen,
572         dm_ino_t        *inop);
573
574 extern int
575 dm_handle_to_path(
576         void            *dirhanp,
577         size_t          dirhlen,
578         void            *targhanp,
579         size_t          targhlen,
580         size_t          buflen,
581         char            *pathbufp,
582         size_t          *rlenp);
583
584 extern int
585 dm_init_attrloc(
586         dm_sessid_t     sid,
587         void            *hanp,
588         size_t          hlen,
589         dm_token_t      token,
590         dm_attrloc_t    *locp);
591
592 extern int
593 dm_init_service(
594         char            **versionstrpp);
595
596 extern int
597 dm_make_fshandle(
598         dm_fsid_t       *fsidp,
599         void            **hanpp,
600         size_t          *hlenp);
601
602 extern int
603 dm_make_handle(
604         dm_fsid_t       *fsidp,
605         dm_ino_t        *inop,
606         dm_igen_t       *igenp,
607         void            **hanpp,
608         size_t          *hlenp);
609
610 extern int
611 dm_mkdir_by_handle(
612         dm_sessid_t     sid,
613         void            *dirhanp,
614         size_t          dirhlen,
615         dm_token_t      token,
616         void            *hanp,
617         size_t          hlen,
618         char            *cname);
619
620 extern int
621 dm_move_event(
622         dm_sessid_t     srcsid,
623         dm_token_t      token,
624         dm_sessid_t     targetsid,
625         dm_token_t      *rtokenp);
626
627 extern int
628 dm_obj_ref_hold(
629         dm_sessid_t     sid,
630         dm_token_t      token,
631         void            *hanp,
632         size_t          hlen);
633
634 extern int
635 dm_obj_ref_query(
636         dm_sessid_t     sid,
637         dm_token_t      token,
638         void            *hanp,
639         size_t          hlen);
640
641 extern int
642 dm_obj_ref_rele(
643         dm_sessid_t     sid,
644         dm_token_t      token,
645         void            *hanp,
646         size_t          hlen);
647
648 extern int
649 dm_path_to_fshandle(
650         char            *path,
651         void            **hanpp,
652         size_t          *hlenp);
653
654 extern int
655 dm_path_to_handle(
656         char            *path,
657         void            **hanpp,
658         size_t          *hlenp);
659
660 extern int
661 dm_pending(
662         dm_sessid_t     sid,
663         dm_token_t      token,
664         dm_timestruct_t *delay);
665
666 extern int
667 dm_probe_hole(
668         dm_sessid_t     sid,
669         void            *hanp,
670         size_t          hlen,
671         dm_token_t      token,
672         dm_off_t        off,
673         dm_size_t       len,
674         dm_off_t        *roffp,
675         dm_size_t       *rlenp);
676
677 extern int
678 dm_punch_hole(
679         dm_sessid_t     sid,
680         void            *hanp,
681         size_t          hlen,
682         dm_token_t      token,
683         dm_off_t        off,
684         dm_size_t       len);
685
686 extern int
687 dm_query_right(
688         dm_sessid_t     sid,
689         void            *hanp,
690         size_t          hlen,
691         dm_token_t      token,
692         dm_right_t      *rightp);
693
694 extern int
695 dm_query_session(
696         dm_sessid_t     sid,
697         size_t          buflen,
698         void            *bufp,
699         size_t          *rlenp);
700
701 extern dm_ssize_t
702 dm_read_invis(
703         dm_sessid_t     sid,
704         void            *hanp,
705         size_t          hlen,
706         dm_token_t      token,
707         dm_off_t        off,
708         dm_size_t       len,
709         void            *bufp);
710
711 extern int
712 dm_release_right(
713         dm_sessid_t     sid,
714         void            *hanp,
715         size_t          hlen,
716         dm_token_t      token);
717
718 extern int
719 dm_remove_dmattr(
720         dm_sessid_t     sid,
721         void            *hanp,
722         size_t          hlen,
723         dm_token_t      token,
724         int             setdtime,
725         dm_attrname_t   *attrnamep);
726
727 extern int
728 dm_request_right(
729         dm_sessid_t     sid,
730         void            *hanp,
731         size_t          hlen,
732         dm_token_t      token,
733         u_int           flags,
734         dm_right_t      right);
735
736 extern int
737 dm_respond_event(
738         dm_sessid_t     sid,
739         dm_token_t      token,
740         dm_response_t   response,
741         int             reterror,
742         size_t          buflen,
743         void            *respbufp);
744
745 extern int
746 dm_send_msg(
747         dm_sessid_t     targetsid,
748         dm_msgtype_t    msgtype,
749         size_t          buflen,
750         void            *bufp);
751
752 extern int
753 dm_set_disp(
754         dm_sessid_t     sid,
755         void            *hanp,
756         size_t          hlen,
757         dm_token_t      token,
758         dm_eventset_t   *eventsetp,
759         u_int           maxevent);
760
761 extern int
762 dm_set_dmattr(
763         dm_sessid_t     sid,
764         void            *hanp,
765         size_t          hlen,
766         dm_token_t      token,
767         dm_attrname_t   *attrnamep,
768         int             setdtime,
769         size_t          buflen,
770         void            *bufp);
771
772 extern int
773 dm_set_eventlist(
774         dm_sessid_t     sid,
775         void            *hanp,
776         size_t          hlen,
777         dm_token_t      token,
778         dm_eventset_t   *eventsetp,
779         u_int           maxevent);
780
781 extern int
782 dm_set_fileattr(
783         dm_sessid_t     sid,
784         void            *hanp,
785         size_t          hlen,
786         dm_token_t      token,
787         u_int           mask,
788         dm_fileattr_t   *attrp);
789
790 extern int
791 dm_set_inherit(
792         dm_sessid_t     sid,
793         void            *hanp,
794         size_t          hlen,
795         dm_token_t      token,
796         dm_attrname_t   *attrnamep,
797         mode_t          mode);
798
799 extern int
800 dm_set_region(
801         dm_sessid_t     sid,
802         void            *hanp,
803         size_t          hlen,
804         dm_token_t      token,
805         u_int           nelem,
806         dm_region_t     *regbufp,
807         dm_boolean_t    *exactflagp);
808
809 extern int
810 dm_set_return_on_destroy(
811         dm_sessid_t     sid,
812         void            *hanp,
813         size_t          hlen,
814         dm_token_t      token,
815         dm_attrname_t   *attrnamep,
816         dm_boolean_t    enable);
817
818 extern int
819 dm_symlink_by_handle(
820         dm_sessid_t     sid,
821         void            *dirhanp,
822         size_t          dirhlen,
823         dm_token_t      token,
824         void            *hanp,
825         size_t          hlen,
826         char            *cname,
827         char            *path);
828
829 extern int
830 dm_sync_by_handle(
831         dm_sessid_t     sid,
832         void            *hanp,
833         size_t          hlen,
834         dm_token_t      token);
835
836 extern int
837 dm_upgrade_right(
838         dm_sessid_t     sid,
839         void            *hanp,
840         size_t          hlen,
841         dm_token_t      token);
842
843 extern dm_ssize_t
844 dm_write_invis(
845         dm_sessid_t     sid,
846         void            *hanp,
847         size_t          hlen,
848         dm_token_t      token,
849         int             flags,
850         dm_off_t        off,
851         dm_size_t       len,
852         void            *bufp);
853
854
855 #ifdef  __cplusplus
856 }
857 #endif
858
859 #endif  /* _DMFSAPI_DMPORT_H */