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__ */
|