int dm_get_config_events( void *hanp, size_t hlen, u_int nelem, dm_eventset_t *eventsetp, u_int *nelemp) { dm_fsys_vector_t *fsys_vector; dm_tokdata_t *tdp; int error; /* Convert the handle into a vnode. */ if ((error = dm_get_config_tdp(hanp, hlen, &tdp)) != 0) return(error); /* Now call the filesystem-specific routine to determine the events supported by that filesystem. */ VN_BHV_READ_LOCK(VN_BHV_HEAD(tdp->td_vp)); fsys_vector = dm_fsys_vector(tdp->td_vp); error = fsys_vector->get_config_events(tdp->td_vp, tdp->td_right, nelem, eventsetp, nelemp); VN_BHV_READ_UNLOCK(VN_BHV_HEAD(tdp->td_vp)); dm_app_put_tdp(tdp); return(error); }
int dm_symlink_by_handle( dm_sessid_t sid, void *dirhanp, size_t dirhlen, dm_token_t token, void *hanp, size_t hlen, char *cname, char *path) { dm_fsys_vector_t *fsys_vector; dm_tokdata_t *tdp; int error; error = dm_app_get_tdp(sid, dirhanp, dirhlen, token, DM_TDT_DIR, DM_RIGHT_EXCL, &tdp); if (error != 0) return(error); fsys_vector = dm_fsys_vector(tdp->td_bdp); error = fsys_vector->symlink_by_handle(tdp->td_bdp, tdp->td_right, hanp, hlen, cname, path); dm_app_put_tdp(tdp); return(error); }
int dm_set_region( dm_sessid_t sid, void *hanp, size_t hlen, dm_token_t token, u_int nelem, dm_region_t *regbufp, dm_boolean_t *exactflagp) { dm_fsys_vector_t *fsys_vector; dm_tokdata_t *tdp; int error; error = dm_app_get_tdp(sid, hanp, hlen, token, DM_TDT_REG, DM_RIGHT_EXCL, &tdp); if (error != 0) return(error); VN_BHV_READ_LOCK(VN_BHV_HEAD(tdp->td_vp)); fsys_vector = dm_fsys_vector(tdp->td_vp); error = fsys_vector->set_region(tdp->td_vp, tdp->td_right, nelem, regbufp, exactflagp); VN_BHV_READ_UNLOCK(VN_BHV_HEAD(tdp->td_vp)); dm_app_put_tdp(tdp); return(error); }
int dm_get_config( void *hanp, size_t hlen, dm_config_t flagname, dm_size_t *retvalp) { dm_fsys_vector_t *fsys_vector; dm_tokdata_t *tdp; dm_size_t retval; int system = 1; int error; /* Trap and process configuration parameters which are system-wide. */ switch (flagname) { case DM_CONFIG_LEGACY: case DM_CONFIG_PENDING: case DM_CONFIG_OBJ_REF: retval = DM_TRUE; break; case DM_CONFIG_MAX_MESSAGE_DATA: retval = DM_MAX_MSG_DATA; break; default: system = 0; break; } if (system) { #ifdef __sgi if (copyout(&retval, retvalp, sizeof(retval))) return(EFAULT); #else if (copy_to_user(retvalp, &retval, sizeof(retval))) return(EFAULT); #endif return(0); } /* Must be filesystem-specific. Convert the handle into a vnode. */ if ((error = dm_get_config_tdp(hanp, hlen, &tdp)) != 0) return(error); /* Now call the filesystem-specific routine to determine the value of the configuration option for that filesystem. */ fsys_vector = dm_fsys_vector(tdp->td_bdp); error = fsys_vector->get_config(tdp->td_bdp, tdp->td_right, flagname, retvalp); dm_app_put_tdp(tdp); return(error); }
int dm_get_eventlist( dm_sessid_t sid, void *hanp, size_t hlen, dm_token_t token, u_int nelem, dm_eventset_t *eventsetp, u_int *nelemp) { dm_fsys_vector_t *fsys_vector; dm_tokdata_t *tdp; dm_eventset_t eventset; u_int elem; int error; if (nelem == 0) return(EINVAL); /* Access the specified object. */ error = dm_app_get_tdp(sid, hanp, hlen, token, DM_TDT_ANY, DM_RIGHT_SHARED, &tdp); if (error != 0) return(error); /* Get the object's event list. */ fsys_vector = dm_fsys_vector(tdp->td_bdp); error = fsys_vector->get_eventlist(tdp->td_bdp, tdp->td_right, (tdp->td_type == DM_TDT_VFS ? DM_FSYS_OBJ : 0), nelem, &eventset, &elem); dm_app_put_tdp(tdp); if (error) return(error); if (copy_to_user(eventsetp, &eventset, sizeof(eventset))) return(EFAULT); if (put_user(nelem, nelemp)) return(EFAULT); return(0); }
int dm_set_eventlist( dm_sessid_t sid, void *hanp, size_t hlen, dm_token_t token, dm_eventset_t *eventsetp, u_int maxevent) { dm_fsys_vector_t *fsys_vector; dm_eventset_t eventset; dm_tokdata_t *tdp; int error; if (copy_from_user(&eventset, eventsetp, sizeof(eventset))) return(EFAULT); /* Do some minor sanity checking. */ if (maxevent == 0 || maxevent > DM_EVENT_MAX) return(EINVAL); /* Access the specified object. */ error = dm_app_get_tdp(sid, hanp, hlen, token, DM_TDT_ANY, DM_RIGHT_EXCL, &tdp); if (error != 0) return(error); fsys_vector = dm_fsys_vector(tdp->td_bdp); error = fsys_vector->set_eventlist(tdp->td_bdp, tdp->td_right, (tdp->td_type == DM_TDT_VFS ? DM_FSYS_OBJ : 0), &eventset, maxevent); dm_app_put_tdp(tdp); return(error); }