File: dmapi_kern.h

package info (click to toggle)
dmapi 2.0.2-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 304 kB
  • ctags: 591
  • sloc: ansic: 2,733; sh: 371; makefile: 242
file content (552 lines) | stat: -rw-r--r-- 14,566 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
/*
 * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
 * 
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it would be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * 
 * Further, this software is distributed without any warranty that it is
 * free of the rightful claim of any third person regarding infringement
 * or the like.  Any license provided herein, whether implied or
 * otherwise, applies only to this software file.  Patent licenses, if
 * any, provided herein do not apply to combinations of this program with
 * other software, or any other product whatsoever.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write the Free Software Foundation, Inc., 59
 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
 * 
 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
 * Mountain View, CA  94043, or:
 * 
 * http://www.sgi.com 
 * 
 * For further information regarding this notice, see: 
 * 
 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
 */

#ifndef __DMAPI_KERN_H__
#define __DMAPI_KERN_H__


struct sys_dmapi_args {
	long arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11;
};
typedef struct sys_dmapi_args sys_dmapi_args_t;


#ifdef __KERNEL__

struct xfs_handle_t;

/* The first group of definitions and prototypes define the filesystem's
   interface into the DMAPI code.
*/


/* Definitions used for the flags field on dm_send_data_event(),
   dm_send_unmount_event(), and dm_send_namesp_event() calls.
*/

#define	DM_FLAGS_NDELAY		0x001	/* return EAGAIN after dm_pending() */
#define	DM_FLAGS_UNWANTED	0x002	/* event not in fsys dm_eventset_t */

/* Possible code levels reported by dm_code_level(). */

#define	DM_CLVL_INIT	0	/* DMAPI prior to X/Open compliance */
#define	DM_CLVL_XOPEN	1	/* X/Open compliant DMAPI */


/* Prototypes used outside of the DMI module/directory. */

int		dm_send_data_event(
			dm_eventtype_t	event,
			struct bhv_desc	*bdp,
			dm_right_t	vp_right,
			off_t		off,
			size_t		len,
			int		flags);

int		dm_send_destroy_event(
			struct bhv_desc	*bdp,
			dm_right_t	vp_right);

int		dm_send_mount_event(
			struct vfs	*vfsp,
			dm_right_t	vfsp_right,
			struct bhv_desc *bdp,
			dm_right_t	vp_right,
			struct bhv_desc *rootbdp,
			dm_right_t	rootvp_right,
			char		*name1,
			char		*name2);

int		dm_send_namesp_event(
			dm_eventtype_t	event,
			struct bhv_desc	*bdp1,
			dm_right_t	vp1_right,
			struct bhv_desc	*bdp2,
			dm_right_t	vp2_right,
			char		*name1,
			char		*name2,
			mode_t		mode,
			int		retcode,
			int		flags);

void		dm_send_unmount_event(
			struct vfs	*vfsp,
			struct vnode	*vp,
			dm_right_t	vfsp_right,
			mode_t		mode,
			int		retcode,
			int		flags);

int		dm_code_level(void);

int		dm_vp_to_handle (
			struct vnode	*vp,
			xfs_handle_t	*handlep);

void		dm_hookup_vfsmount(
			vfs_t		*vfsp,
			struct vfsmount	*mnt);

/* The following prototypes and definitions are used by DMAPI as its
   interface into the filesystem code.  Communication between DMAPI and the
   filesystem are established as follows:
   1. DMAPI uses the VFS_DMAPI_FSYS_VECTOR to ask for the addresses
      of all the functions within the filesystem that it may need to call.
   2. The filesystem returns an array of function name/address pairs which
      DMAPI builds into a function vector.
   The VFS_DMAPI_FSYS_VECTOR call is only made one time for a particular
   filesystem type.  From then on, DMAPI uses its function vector to call the
   filesystem functions directly.  Functions in the array which DMAPI doesn't
   recognize are ignored.  A dummy function which returns ENOSYS is used for
   any function that DMAPI needs but which was not provided by the filesystem.
   If XFS doesn't recognize the VFS_DMAPI_FSYS_VECTOR, DMAPI assumes that it
   doesn't have the X/Open support code; in this case DMAPI uses the XFS-code
   originally bundled within DMAPI.

   The goal of this interface is allow incremental changes to be made to
   both the filesystem and to DMAPI while minimizing inter-patch dependencies,
   and to eventually allow DMAPI to support multiple filesystem types at the
   same time should that become necessary.
*/

typedef enum {
	DM_FSYS_CLEAR_INHERIT		=  0,
	DM_FSYS_CREATE_BY_HANDLE	=  1,
	DM_FSYS_DOWNGRADE_RIGHT		=  2,
	DM_FSYS_GET_ALLOCINFO_RVP	=  3,
	DM_FSYS_GET_BULKALL_RVP		=  4,
	DM_FSYS_GET_BULKATTR_RVP	=  5,
	DM_FSYS_GET_CONFIG		=  6,
	DM_FSYS_GET_CONFIG_EVENTS	=  7,
	DM_FSYS_GET_DESTROY_DMATTR	=  8,
	DM_FSYS_GET_DIOINFO		=  9,
	DM_FSYS_GET_DIRATTRS_RVP	= 10,
	DM_FSYS_GET_DMATTR		= 11,
	DM_FSYS_GET_EVENTLIST		= 12,
	DM_FSYS_GET_FILEATTR		= 13,
	DM_FSYS_GET_REGION		= 14,
	DM_FSYS_GETALL_DMATTR		= 15,
	DM_FSYS_GETALL_INHERIT		= 16,
	DM_FSYS_INIT_ATTRLOC		= 17,
	DM_FSYS_MKDIR_BY_HANDLE		= 18,
	DM_FSYS_PROBE_HOLE		= 19,
	DM_FSYS_PUNCH_HOLE		= 20,
	DM_FSYS_READ_INVIS_RVP		= 21,
	DM_FSYS_RELEASE_RIGHT		= 22,
	DM_FSYS_REMOVE_DMATTR		= 23,
	DM_FSYS_REQUEST_RIGHT		= 24,
	DM_FSYS_SET_DMATTR		= 25,
	DM_FSYS_SET_EVENTLIST		= 26,
	DM_FSYS_SET_FILEATTR		= 27,
	DM_FSYS_SET_INHERIT		= 28,
	DM_FSYS_SET_REGION		= 29,
	DM_FSYS_SYMLINK_BY_HANDLE	= 30,
	DM_FSYS_SYNC_BY_HANDLE		= 31,
	DM_FSYS_UPGRADE_RIGHT		= 32,
	DM_FSYS_WRITE_INVIS_RVP		= 33,
	DM_FSYS_MAX			= 34
} dm_fsys_switch_t;


#define	DM_FSYS_OBJ	0x1		/* object refers to a fsys handle */


/*
 *  Prototypes for filesystem-specific functions.
 */

typedef	int	(*dm_fsys_clear_inherit_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_attrname_t	*attrnamep);

typedef	int	(*dm_fsys_create_by_handle_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			void		*hanp,
			size_t		hlen,
			char		*cname);

typedef	int	(*dm_fsys_downgrade_right_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type);		/* DM_FSYS_OBJ or zero */

typedef	int	(*dm_fsys_get_allocinfo_rvp_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_off_t	*offp,
			u_int		nelem,
			dm_extent_t	*extentp,
			u_int		*nelemp,
			int		*rvalp);

typedef	int 	(*dm_fsys_get_bulkall_rvp_t)(
			bhv_desc_t	*bdp,		/* root vnode */
			dm_right_t	right,
			u_int		mask,
			dm_attrname_t	*attrnamep,
			dm_attrloc_t	*locp,
			size_t		buflen,
			void		*bufp,
			size_t		*rlenp,
			int		*rvalp);

typedef	int 	(*dm_fsys_get_bulkattr_rvp_t)(
			bhv_desc_t	*bdp,		/* root vnode */
			dm_right_t	right,
			u_int		mask,
			dm_attrloc_t	*locp,
			size_t		buflen,
			void		*bufp,
			size_t		*rlenp,
			int		*rvalp);

typedef	int	(*dm_fsys_get_config_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_config_t	flagname,
			dm_size_t	*retvalp);

typedef	int	(*dm_fsys_get_config_events_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		nelem,
			dm_eventset_t	*eventsetp,
			u_int		*nelemp);

typedef	int	(*dm_fsys_get_destroy_dmattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_attrname_t	*attrnamep,
			char		**valuepp,
			int		*vlenp);

typedef	int	(*dm_fsys_get_dioinfo_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_dioinfo_t	*diop);

typedef	int	(*dm_fsys_get_dirattrs_rvp_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		mask,
			dm_attrloc_t	*locp,
			size_t		buflen,
			void		*bufp,
			size_t		*rlenp,
			int		*rvalp);

typedef	int	(*dm_fsys_get_dmattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_attrname_t	*attrnamep,
			size_t		buflen,
			void		*bufp,
			size_t		*rlenp);

typedef	int	(*dm_fsys_get_eventlist_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type,
			u_int		nelem,
			dm_eventset_t	*eventsetp,	/* in kernel space! */
			u_int		*nelemp);		/* in kernel space! */

typedef	int	(*dm_fsys_get_fileattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		mask,
			dm_stat_t	*statp);

typedef	int	(*dm_fsys_get_region_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		nelem,
			dm_region_t	*regbufp,
			u_int		*nelemp);

typedef	int	(*dm_fsys_getall_dmattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			size_t		buflen,
			void		*bufp,
			size_t		*rlenp);

typedef	int	(*dm_fsys_getall_inherit_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		nelem,
			dm_inherit_t	*inheritbufp,
			u_int		*nelemp);

typedef	int	(*dm_fsys_init_attrloc_t)(
			bhv_desc_t	*bdp,	/* sometimes root vnode */
			dm_right_t	right,
			dm_attrloc_t	*locp);

typedef	int	(*dm_fsys_mkdir_by_handle_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			void		*hanp,
			size_t		hlen,
			char		*cname);

typedef	int	(*dm_fsys_probe_hole_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_off_t	off,
			dm_size_t	len,
			dm_off_t	*roffp,
			dm_size_t	*rlenp);

typedef	int	(*dm_fsys_punch_hole_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_off_t	off,
			dm_size_t	len);

typedef	int	(*dm_fsys_read_invis_rvp_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_off_t	off,
			dm_size_t	len,
			void		*bufp,
			int		*rvp);

typedef	int	(*dm_fsys_release_right_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type);

typedef	int	(*dm_fsys_remove_dmattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			int		setdtime,
			dm_attrname_t	*attrnamep);

typedef	int	(*dm_fsys_request_right_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type,	/* DM_FSYS_OBJ or zero */
			u_int		flags,
			dm_right_t	newright);

typedef	int	(*dm_fsys_set_dmattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_attrname_t	*attrnamep,
			int		setdtime,
			size_t		buflen,
			void		*bufp);

typedef	int	(*dm_fsys_set_eventlist_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type,
			dm_eventset_t	*eventsetp,	/* in kernel space! */
			u_int		maxevent);

typedef	int	(*dm_fsys_set_fileattr_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		mask,
			dm_fileattr_t	*attrp);

typedef	int	(*dm_fsys_set_inherit_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			dm_attrname_t	*attrnamep,
			mode_t		mode);

typedef	int	(*dm_fsys_set_region_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		nelem,
			dm_region_t	*regbufp,
			dm_boolean_t	*exactflagp);

typedef	int	(*dm_fsys_symlink_by_handle_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			void		*hanp,
			size_t		hlen,
			char		*cname,
			char		*path);

typedef	int	(*dm_fsys_sync_by_handle_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right);

typedef	int	(*dm_fsys_upgrade_right_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			u_int		type);		/* DM_FSYS_OBJ or zero */

typedef	int	(*dm_fsys_write_invis_rvp_t)(
			bhv_desc_t	*bdp,
			dm_right_t	right,
			int		flags,
			dm_off_t	off,
			dm_size_t	len,
			void		*bufp,
			int		*rvp);

/* Structure definitions used by the VFS_DMAPI_FSYS_VECTOR call. */

typedef	struct {
	dm_fsys_switch_t  func_no;	/* function number */
	union {
		dm_fsys_clear_inherit_t clear_inherit;
		dm_fsys_create_by_handle_t create_by_handle;
		dm_fsys_downgrade_right_t downgrade_right;
		dm_fsys_get_allocinfo_rvp_t get_allocinfo_rvp;
		dm_fsys_get_bulkall_rvp_t get_bulkall_rvp;
		dm_fsys_get_bulkattr_rvp_t get_bulkattr_rvp;
		dm_fsys_get_config_t get_config;
		dm_fsys_get_config_events_t get_config_events;
		dm_fsys_get_destroy_dmattr_t get_destroy_dmattr;
		dm_fsys_get_dioinfo_t get_dioinfo;
		dm_fsys_get_dirattrs_rvp_t get_dirattrs_rvp;
		dm_fsys_get_dmattr_t get_dmattr;
		dm_fsys_get_eventlist_t get_eventlist;
		dm_fsys_get_fileattr_t get_fileattr;
		dm_fsys_get_region_t get_region;
		dm_fsys_getall_dmattr_t getall_dmattr;
		dm_fsys_getall_inherit_t getall_inherit;
		dm_fsys_init_attrloc_t init_attrloc;
		dm_fsys_mkdir_by_handle_t mkdir_by_handle;
		dm_fsys_probe_hole_t probe_hole;
		dm_fsys_punch_hole_t punch_hole;
		dm_fsys_read_invis_rvp_t read_invis_rvp;
		dm_fsys_release_right_t release_right;
		dm_fsys_remove_dmattr_t remove_dmattr;
		dm_fsys_request_right_t request_right;
		dm_fsys_set_dmattr_t set_dmattr;
		dm_fsys_set_eventlist_t set_eventlist;
		dm_fsys_set_fileattr_t set_fileattr;
		dm_fsys_set_inherit_t set_inherit;
		dm_fsys_set_region_t set_region;
		dm_fsys_symlink_by_handle_t symlink_by_handle;
		dm_fsys_sync_by_handle_t sync_by_handle;
		dm_fsys_upgrade_right_t upgrade_right;
		dm_fsys_write_invis_rvp_t write_invis_rvp;
	} u_fc;
} fsys_function_vector_t;

struct dm_fcntl_vector {
	int	code_level;
	int	count;		/* Number of functions in the vector */
	fsys_function_vector_t *vecp;
};
typedef struct dm_fcntl_vector dm_fcntl_vector_t;

struct dm_fcntl_mapevent {
	size_t	length;			/* length of transfer */
	dm_eventtype_t	max_event;	/* Maximum (WRITE or READ)  event */
	int	error;			/* returned error code */
};
typedef struct dm_fcntl_mapevent dm_fcntl_mapevent_t;

#endif	/* __KERNEL__ */


/* The following definitions are needed both by the kernel and by the
   library routines.
*/

#define	DM_MAX_HANDLE_SIZE	56	/* maximum size for a file handle */


/*
 *  Opcodes for dmapi ioctl.
 */

#define	DM_CLEAR_INHERIT	1
#define	DM_CREATE_BY_HANDLE	2
#define	DM_CREATE_SESSION	3
#define	DM_CREATE_USEREVENT	4
#define	DM_DESTROY_SESSION	5
#define	DM_DOWNGRADE_RIGHT	6
#define	DM_FD_TO_HANDLE		7
#define	DM_FIND_EVENTMSG	8
#define	DM_GET_ALLOCINFO	9
#define	DM_GET_BULKALL		10
#define	DM_GET_BULKATTR		11
#define	DM_GET_CONFIG		12
#define	DM_GET_CONFIG_EVENTS	13
#define	DM_GET_DIOINFO		14
#define	DM_GET_DIRATTRS		15
#define	DM_GET_DMATTR		16
#define	DM_GET_EVENTLIST	17
#define	DM_GET_EVENTS		18
#define	DM_GET_FILEATTR		19
#define	DM_GET_MOUNTINFO	20
#define	DM_GET_REGION		21
#define	DM_GETALL_DISP		22
#define	DM_GETALL_DMATTR	23
#define	DM_GETALL_INHERIT	24
#define	DM_GETALL_SESSIONS	25
#define	DM_GETALL_TOKENS	26
#define	DM_INIT_ATTRLOC		27
#define	DM_MKDIR_BY_HANDLE	28
#define	DM_MOVE_EVENT		29
#define	DM_OBJ_REF_HOLD		30
#define	DM_OBJ_REF_QUERY	31
#define	DM_OBJ_REF_RELE		32
#define	DM_PATH_TO_FSHANDLE	33
#define	DM_PATH_TO_HANDLE	34
#define	DM_PENDING		35
#define	DM_PROBE_HOLE		36
#define	DM_PUNCH_HOLE		37
#define	DM_QUERY_RIGHT		38
#define	DM_QUERY_SESSION	39
#define	DM_READ_INVIS		40
#define	DM_RELEASE_RIGHT	41
#define	DM_REMOVE_DMATTR	42
#define	DM_REQUEST_RIGHT	43
#define	DM_RESPOND_EVENT	44
#define	DM_SEND_MSG		45
#define	DM_SET_DISP		46
#define	DM_SET_DMATTR		47
#define	DM_SET_EVENTLIST	48
#define	DM_SET_FILEATTR		49
#define	DM_SET_INHERIT		50
#define	DM_SET_REGION		51
#define	DM_SET_RETURN_ON_DESTROY 52
#define	DM_SYMLINK_BY_HANDLE	53
#define	DM_SYNC_BY_HANDLE	54
#define	DM_UPGRADE_RIGHT	55
#define	DM_WRITE_INVIS		56
#define	DM_OPEN_BY_HANDLE	57

#endif /* __DMAPI_KERN_H__ */