File: [Development] / xfs-cmds / dmapi / include / dmapi.h (download)
Revision 1.4, Thu Mar 21 17:33:31 2002 UTC (15 years, 7 months ago) by roehrich
Branch: MAIN
Changes since 1.3: +6 -0
lines
dm_handle_to_path() will now work in most cases, and in the other cases
there's just a little more grunt work that has to be done in the library. If
the directory that contains some component of the path has never had a lookup
performed on it, then the kernel won't have that dir in its dcache. In that
case it'll create an anonymous dentry for the filesystem's root dir, and the
library detects that this happened.
If the library detects that an anonymous dentry was created, then it returns
an error indicating that it didn't find the path. Before I take this another
step, I'd like to know if this scenario happens in actual practice. I'm
betting the directory of interest has almost always been loaded into the
dcache by a user process before the HSM uses dm_handle_to_path(). We'll see.
It seems that ioctl(XFS_IOC_OPEN_BY_HANDLE) would have the same restriction,
though it looks like it's never used in a case where the path hasn't already
been accessed.
This mod also removes libdm's dependence on libhandle.
sync with kernel side
|
/*
* Copyright (c) 1995-2001 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.1 of the GNU Lesser 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 Lesser 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 _SYS_DMAPI_H
#define _SYS_DMAPI_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __KERNEL__
#include <sys/types.h>
#endif
#include <linux/types.h>
/**************************************************************************
* *
* The SGI implementation of DMAPI is based upon the X/Open document *
* Systems Management: Data Storage Managment (XDSM) API *
* dated February 1997. Not all DMAPI functions and structure fields *
* have been implemented. Most importantly, the DMAPI functions *
* dm_request_right, dm_release_right, dm_query_right, dm_upgrade_right *
* and dm_downgrade_right do not work as described in the specification. *
* *
* The XFS filesystem currently does not allow its locking mechanisms to *
* be externally accessed from user space. While the above-mentioned *
* dm_xxx_right functions exist and can be called by applications, they *
* always return successfully without actually obtaining any locks *
* within the filesystem. *
* *
* Applications which do not need full rights support and which only *
* make dm_xxx_right calls in order to satisfy the input requirements of *
* other DMAPI calls should be able to use these routines to avoid *
* having to implement special-case code for SGI platforms. Applications *
* which truely need the capabilities of a full implementation of rights *
* will unfortunately have to come up with alternate software solutions *
* until such time as rights can be completely implemented. *
* *
* Functions and structure fields defined within this file which are not *
* supported in the SGI implementation of DMAPI are indicated by comments *
* following their definitions such as "not supported", or "not *
* completely supported". Any function or field not so marked may be *
* assumed to work exactly according to the spec. *
* *
**************************************************************************/
/* The first portion of this file contains defines and typedefs that are
DMAPI implementation-dependent, and could be different on other platforms.
*/
typedef __s64 dm_attrloc_t;
typedef unsigned int dm_boolean_t;
typedef __u64 dm_eventset_t;
typedef __u64 dm_fsid_t;
typedef __u64 dm_ino_t;
typedef __u32 dm_igen_t;
typedef __s64 dm_off_t;
typedef unsigned int dm_sequence_t;
typedef int dm_sessid_t;
typedef __u64 dm_size_t;
typedef __s64 dm_ssize_t;
typedef int dm_token_t;
/* XXX dev_t, mode_t, and nlink_t are not the same size in kernel space
and user space. This affects the field offsets for dm_stat_t.
The following solution is temporary.
user space sizes: dev_t=8 mode_t=4 nlink_t=4
kernel space : dev_t=2 mode_t=2 nlink_t=2
*/
typedef __s64 dm_dev_t;
typedef int dm_mode_t;
typedef int dm_nlink_t;
#define DM_REGION_NOEVENT 0x0
#define DM_REGION_READ 0x1
#define DM_REGION_WRITE 0x2
#define DM_REGION_TRUNCATE 0x4
/* Values for the mask argument used with dm_get_fileattr, dm_get_bulkattr,
dm_get_dirattrs, and dm_set_fileattr.
*/
#define DM_AT_MODE 0x0001
#define DM_AT_UID 0x0002
#define DM_AT_GID 0x0004
#define DM_AT_ATIME 0x0008
#define DM_AT_MTIME 0x0010
#define DM_AT_CTIME 0x0020
#define DM_AT_SIZE 0x0040
#define DM_AT_DTIME 0x0080
#define DM_AT_HANDLE 0x0100
#define DM_AT_EMASK 0x0200
#define DM_AT_PMANR 0x0400
#define DM_AT_PATTR 0x0800
#define DM_AT_STAT 0x1000
#define DM_AT_CFLAG 0x2000
#define DM_EV_WAIT 0x1 /* used in dm_get_events() */
#define DM_MOUNT_RDONLY 0x1 /* me_mode field in dm_mount_event_t */
#define DM_RR_WAIT 0x1
#define DM_UNMOUNT_FORCE 0x1 /* ne_mode field in dm_namesp_event_t */
#define DM_WRITE_SYNC 0x1 /* used in dm_write_invis() */
#define DM_SESSION_INFO_LEN 256
#define DM_NO_SESSION 0
#define DM_TRUE 1
#define DM_FALSE 0
#define DM_INVALID_TOKEN 0
#define DM_NO_TOKEN (-1)
#define DM_INVALID_HANP NULL
#define DM_INVALID_HLEN 0
#define DM_GLOBAL_HANP ((void *)(1LL))
#define DM_GLOBAL_HLEN ((size_t)(1))
#define DM_VER_STR_CONTENTS "SGI DMAPI (XDSM) API, Release 1.0."
#define DMEV_SET(event_type, event_list) \
((event_list) |= (1 << (event_type)))
#define DMEV_CLR(event_type, event_list) \
((event_list) &= ~(1 << (event_type)))
#define DMEV_ISSET(event_type, event_list) \
(int)(((event_list) & (1 << (event_type))) != 0)
#define DMEV_ZERO(event_list) \
(event_list) = 0
typedef struct {
int vd_offset; /* offset from start of containing struct */
unsigned int vd_length; /* length of data starting at vd_offset */
} dm_vardata_t;
#define DM_GET_VALUE(p, field, type) \
((type) ((char *)(p) + (p)->field.vd_offset))
#define DM_GET_LEN(p, field) \
((p)->field.vd_length)
#define DM_STEP_TO_NEXT(p, type) \
((type) ((p)->_link ? (char *)(p) + (p)->_link : NULL))
/* The remainder of this include file contains defines, typedefs, and
structures which are strictly defined by the DMAPI 2.3 specification.
(The _link field which appears in several structures is an
implementation-specific way to implement DM_STEP_TO_NEXT, and
should not be referenced directly by application code.)
*/
#define DM_ATTR_NAME_SIZE 8
struct dm_attrname {
unsigned char an_chars[DM_ATTR_NAME_SIZE];
};
typedef struct dm_attrname dm_attrname_t;
struct dm_attrlist {
int _link;
dm_attrname_t al_name;
dm_vardata_t al_data;
};
typedef struct dm_attrlist dm_attrlist_t;
typedef enum {
DM_CONFIG_INVALID,
DM_CONFIG_BULKALL,
DM_CONFIG_CREATE_BY_HANDLE,
DM_CONFIG_DTIME_OVERLOAD,
DM_CONFIG_LEGACY,
DM_CONFIG_LOCK_UPGRADE,
DM_CONFIG_MAX_ATTR_ON_DESTROY,
DM_CONFIG_MAX_ATTRIBUTE_SIZE,
DM_CONFIG_MAX_HANDLE_SIZE,
DM_CONFIG_MAX_MANAGED_REGIONS,
DM_CONFIG_MAX_MESSAGE_DATA,
DM_CONFIG_OBJ_REF,
DM_CONFIG_PENDING,
DM_CONFIG_PERS_ATTRIBUTES,
DM_CONFIG_PERS_EVENTS,
DM_CONFIG_PERS_INHERIT_ATTRIBS,
DM_CONFIG_PERS_MANAGED_REGIONS,
DM_CONFIG_PUNCH_HOLE,
DM_CONFIG_TOTAL_ATTRIBUTE_SPACE,
DM_CONFIG_WILL_RETRY
} dm_config_t;
struct dm_dioinfo { /* non-standard SGI addition */
unsigned int d_mem;
unsigned int d_miniosz;
unsigned int d_maxiosz;
dm_boolean_t d_dio_only;
};
typedef struct dm_dioinfo dm_dioinfo_t;
struct dm_dispinfo {
int _link;
unsigned int di_pad1; /* reserved; do not reference */
dm_vardata_t di_fshandle;
dm_eventset_t di_eventset;
};
typedef struct dm_dispinfo dm_dispinfo_t;
typedef enum {
DM_EVENT_INVALID = -1,
DM_EVENT_CANCEL = 0, /* not supported */
DM_EVENT_MOUNT = 1,
DM_EVENT_PREUNMOUNT = 2,
DM_EVENT_UNMOUNT = 3,
DM_EVENT_DEBUT = 4, /* not supported */
DM_EVENT_CREATE = 5,
DM_EVENT_CLOSE = 6, /* not supported */
DM_EVENT_POSTCREATE = 7,
DM_EVENT_REMOVE = 8,
DM_EVENT_POSTREMOVE = 9,
DM_EVENT_RENAME = 10,
DM_EVENT_POSTRENAME = 11,
DM_EVENT_LINK = 12,
DM_EVENT_POSTLINK = 13,
DM_EVENT_SYMLINK = 14,
DM_EVENT_POSTSYMLINK = 15,
DM_EVENT_READ = 16,
DM_EVENT_WRITE = 17,
DM_EVENT_TRUNCATE = 18,
DM_EVENT_ATTRIBUTE = 19,
DM_EVENT_DESTROY = 20,
DM_EVENT_NOSPACE = 21,
DM_EVENT_USER = 22,
DM_EVENT_MAX = 23
} dm_eventtype_t;
struct dm_eventmsg {
int _link;
dm_eventtype_t ev_type;
dm_token_t ev_token;
dm_sequence_t ev_sequence;
dm_vardata_t ev_data;
};
typedef struct dm_eventmsg dm_eventmsg_t;
struct dm_cancel_event { /* not supported */
dm_sequence_t ce_sequence;
dm_token_t ce_token;
};
typedef struct dm_cancel_event dm_cancel_event_t;
struct dm_data_event {
dm_vardata_t de_handle;
dm_off_t de_offset;
dm_size_t de_length;
};
typedef struct dm_data_event dm_data_event_t;
struct dm_destroy_event {
dm_vardata_t ds_handle;
dm_attrname_t ds_attrname;
dm_vardata_t ds_attrcopy;
};
typedef struct dm_destroy_event dm_destroy_event_t;
struct dm_mount_event {
mode_t me_mode;
dm_vardata_t me_handle1;
dm_vardata_t me_handle2;
dm_vardata_t me_name1;
dm_vardata_t me_name2;
dm_vardata_t me_roothandle;
};
typedef struct dm_mount_event dm_mount_event_t;
struct dm_namesp_event {
mode_t ne_mode;
dm_vardata_t ne_handle1;
dm_vardata_t ne_handle2;
dm_vardata_t ne_name1;
dm_vardata_t ne_name2;
int ne_retcode;
};
typedef struct dm_namesp_event dm_namesp_event_t;
typedef enum {
DM_EXTENT_INVALID,
DM_EXTENT_RES,
DM_EXTENT_HOLE
} dm_extenttype_t;
struct dm_extent {
dm_extenttype_t ex_type;
unsigned int ex_pad1; /* reserved; do not reference */
dm_off_t ex_offset;
dm_size_t ex_length;
};
typedef struct dm_extent dm_extent_t;
struct dm_fileattr {
mode_t fa_mode;
uid_t fa_uid;
gid_t fa_gid;
time_t fa_atime;
time_t fa_mtime;
time_t fa_ctime;
time_t fa_dtime;
unsigned int fa_pad1; /* reserved; do not reference */
dm_off_t fa_size;
};
typedef struct dm_fileattr dm_fileattr_t;
struct dm_inherit { /* not supported */
dm_attrname_t ih_name;
mode_t ih_filetype;
};
typedef struct dm_inherit dm_inherit_t;
typedef enum {
DM_MSGTYPE_INVALID,
DM_MSGTYPE_SYNC,
DM_MSGTYPE_ASYNC
} dm_msgtype_t;
struct dm_region {
dm_off_t rg_offset;
dm_size_t rg_size;
unsigned int rg_flags;
unsigned int rg_pad1; /* reserved; do not reference */
};
typedef struct dm_region dm_region_t;
typedef enum {
DM_RESP_INVALID,
DM_RESP_CONTINUE,
DM_RESP_ABORT,
DM_RESP_DONTCARE
} dm_response_t;
typedef enum {
DM_RIGHT_NULL,
DM_RIGHT_SHARED,
DM_RIGHT_EXCL
} dm_right_t;
struct dm_stat {
int _link;
dm_vardata_t dt_handle;
dm_vardata_t dt_compname;
int dt_nevents;
dm_eventset_t dt_emask;
int dt_pers; /* field not supported */
int dt_pmanreg;
time_t dt_dtime;
unsigned int dt_change; /* field not supported */
unsigned int dt_pad1; /* reserved; do not reference */
dm_dev_t dt_dev;
dm_ino_t dt_ino;
dm_mode_t dt_mode;
dm_nlink_t dt_nlink;
uid_t dt_uid;
gid_t dt_gid;
dm_dev_t dt_rdev;
unsigned int dt_pad2; /* reserved; do not reference */
dm_off_t dt_size;
time_t dt_atime;
time_t dt_mtime;
time_t dt_ctime;
unsigned int dt_blksize;
dm_size_t dt_blocks;
/* Non-standard filesystem-specific fields. Currently XFS is the only
supported filesystem type.
*/
__u64 dt_pad3; /* reserved; do not reference */
int dt_fstype; /* filesystem index; see sysfs(2) */
union {
struct {
dm_igen_t igen;
unsigned int xflags;
unsigned int extsize;
unsigned int extents;
unsigned short aextents;
unsigned short dmstate;
} sgi_xfs;
} fsys_dep;
};
typedef struct dm_stat dm_stat_t;
#define dt_xfs_igen fsys_dep.sgi_xfs.igen
#define dt_xfs_xflags fsys_dep.sgi_xfs.xflags
#define dt_xfs_extsize fsys_dep.sgi_xfs.extsize
#define dt_xfs_extents fsys_dep.sgi_xfs.extents
#define dt_xfs_aextents fsys_dep.sgi_xfs.aextents
#define dt_xfs_dmstate fsys_dep.sgi_xfs.dmstate
/* Flags for the non-standard dt_xfs_xflags field. */
#define DM_XFLAG_REALTIME 0x1
#define DM_XFLAG_PREALLOC 0x2
#define DM_XFLAG_HASATTR 0x80000000
struct dm_timestruct {
time_t dm_tv_sec;
int dm_tv_nsec;
};
typedef struct dm_timestruct dm_timestruct_t;
struct dm_xstat { /* not supported */
dm_stat_t dx_statinfo;
dm_vardata_t dx_attrdata;
};
typedef struct dm_xstat dm_xstat_t;
/* The following list provides the prototypes for all functions defined in
the DMAPI interface.
*/
extern int
dm_clear_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep);
extern int
dm_create_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname);
extern int
dm_create_session(
dm_sessid_t oldsid,
char *sessinfop,
dm_sessid_t *newsidp);
extern int
dm_create_userevent(
dm_sessid_t sid,
size_t msglen,
void *msgdatap,
dm_token_t *tokenp);
extern int
dm_destroy_session(
dm_sessid_t sid);
extern int
dm_downgrade_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_fd_to_handle(
int fd,
void **hanpp,
size_t *hlenp);
extern int
dm_find_eventmsg(
dm_sessid_t sid,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_allocinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t *offp,
unsigned int nelem,
dm_extent_t *extentp,
unsigned int *nelemp);
extern int
dm_get_bulkall( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrname_t *attrnamep,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_bulkattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_config(
void *hanp,
size_t hlen,
dm_config_t flagname,
dm_size_t *retvalp);
extern int
dm_get_config_events(
void *hanp,
size_t hlen,
unsigned int nelem,
dm_eventset_t *eventsetp,
unsigned int *nelemp);
extern int
dm_get_dirattrs(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_attrloc_t *locp,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_eventlist(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_eventset_t *eventsetp,
unsigned int *nelemp);
extern int
dm_get_events(
dm_sessid_t sid,
unsigned int maxmsgs,
unsigned int flags,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_fileattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_stat_t *statp);
extern int
dm_get_mountinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_get_region(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_region_t *regbufp,
unsigned int *nelemp);
extern int
dm_getall_disp(
dm_sessid_t sid,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_getall_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
size_t buflen,
void *bufp,
size_t *rlenp);
extern int
dm_getall_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_inherit_t *inheritbufp,
unsigned int *nelemp);
extern int
dm_getall_sessions(
unsigned int nelem,
dm_sessid_t *sidbufp,
unsigned int *nelemp);
extern int
dm_getall_tokens(
dm_sessid_t sid,
unsigned int nelem,
dm_token_t *tokenbufp,
unsigned int *nelemp);
extern int
dm_handle_cmp(
void *hanp1,
size_t hlen1,
void *hanp2,
size_t hlen2);
extern void
dm_handle_free(
void *hanp,
size_t hlen);
extern u_int
dm_handle_hash(
void *hanp,
size_t hlen);
extern dm_boolean_t
dm_handle_is_valid(
void *hanp,
size_t hlen);
extern int
dm_handle_to_fshandle(
void *hanp,
size_t hlen,
void **fshanpp,
size_t *fshlenp);
extern int
dm_handle_to_fsid(
void *hanp,
size_t hlen,
dm_fsid_t *fsidp);
extern int
dm_handle_to_igen(
void *hanp,
size_t hlen,
dm_igen_t *igenp);
extern int
dm_handle_to_ino(
void *hanp,
size_t hlen,
dm_ino_t *inop);
extern int
dm_handle_to_path(
void *dirhanp,
size_t dirhlen,
void *targhanp,
size_t targhlen,
size_t buflen,
char *pathbufp,
size_t *rlenp);
extern int
dm_init_attrloc(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrloc_t *locp);
extern int
dm_init_service(
char **versionstrpp);
extern int
dm_make_handle(
dm_fsid_t *fsidp,
dm_ino_t *inop,
dm_igen_t *igenp,
void **hanpp,
size_t *hlenp);
extern int
dm_make_fshandle(
dm_fsid_t *fsidp,
void **hanpp,
size_t *hlenp);
extern int
dm_mkdir_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname);
extern int
dm_move_event(
dm_sessid_t srcsid,
dm_token_t token,
dm_sessid_t targetsid,
dm_token_t *rtokenp);
extern int
dm_obj_ref_hold(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_obj_ref_query(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_obj_ref_rele(
dm_sessid_t sid,
dm_token_t token,
void *hanp,
size_t hlen);
extern int
dm_path_to_fshandle(
char *path,
void **hanpp,
size_t *hlenp);
extern int
dm_path_to_handle(
char *path,
void **hanpp,
size_t *hlenp);
extern int
dm_pending(
dm_sessid_t sid,
dm_token_t token,
dm_timestruct_t *delay);
extern int
dm_probe_hole(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len,
dm_off_t *roffp,
dm_size_t *rlenp);
extern int
dm_punch_hole(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len);
extern int
dm_query_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_right_t *rightp);
extern int
dm_query_session(
dm_sessid_t sid,
size_t buflen,
void *bufp,
size_t *rlenp);
extern dm_ssize_t
dm_read_invis(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_off_t off,
dm_size_t len,
void *bufp);
extern int
dm_release_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_remove_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
int setdtime,
dm_attrname_t *attrnamep);
extern int
dm_request_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int flags,
dm_right_t right);
extern int
dm_respond_event(
dm_sessid_t sid,
dm_token_t token,
dm_response_t response,
int reterror,
size_t buflen,
void *respbufp);
extern int
dm_send_msg(
dm_sessid_t targetsid,
dm_msgtype_t msgtype,
size_t buflen,
void *bufp);
extern int
dm_set_disp(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_eventset_t *eventsetp,
unsigned int maxevent);
extern int
dm_set_dmattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
int setdtime,
size_t buflen,
void *bufp);
extern int
dm_set_eventlist(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_eventset_t *eventsetp,
unsigned int maxevent);
extern int
dm_set_fileattr(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int mask,
dm_fileattr_t *attrp);
extern int
dm_set_inherit( /* not supported */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
mode_t mode);
extern int
dm_set_region(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
unsigned int nelem,
dm_region_t *regbufp,
dm_boolean_t *exactflagp);
extern int
dm_set_return_on_destroy(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_attrname_t *attrnamep,
dm_boolean_t enable);
extern int
dm_symlink_by_handle( /* not supported */
dm_sessid_t sid,
void *dirhanp,
size_t dirhlen,
dm_token_t token,
void *hanp,
size_t hlen,
char *cname,
char *path);
extern int
dm_sync_by_handle(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern int
dm_upgrade_right( /* not completely supported; see caveat above */
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token);
extern dm_ssize_t
dm_write_invis(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
int flags,
dm_off_t off,
dm_size_t len,
void *bufp);
/* Non-standard SGI additions to the DMAPI interface. */
int
dm_open_by_handle(
void *hanp,
size_t hlen,
int mode);
extern int
dm_get_dioinfo(
dm_sessid_t sid,
void *hanp,
size_t hlen,
dm_token_t token,
dm_dioinfo_t *diop);
#ifdef __cplusplus
}
#endif
#endif /* _SYS_DMAPI_H */