int _lock_flush(struct fdinfo *fio, struct ffsw *stat) { struct fdinfo *llfio; int ret; llfio = fio->fioptr; LYR_LOCK(fio); ret = XRCALL(llfio, flushrtn) llfio, stat); LYR_UNLOCK(fio); return(ret); }
/* * lock listio requests * The lock layer will be called only if the lower layer can handle listio * requests. */ _lock_listio( int cmd, /* LC_WAIT or LC_START */ struct fflistreq *list, /* list of requests (see fflistio) */ int nreq, /* number of requests */ struct ffsw *stat) /* status structure */ { int i; struct fdinfo *llfio; struct fdinfo *first_fio; struct fdinfo *fio; struct fflistreq *copy; /* copy of the list of requests */ int numdone; int curent; int pos; bitptr buf; int nb; int zero; int ret; int nstr; struct ffsw locstat; struct ffsw *istat; if (nreq == 0) return(0); first_fio = GETIOB(list[0].li_fildes); for (i = 0; i < nreq; i++) { fio = GETIOB(list[i].li_fildes); if (fio != first_fio) { _SETERROR(stat, FDC_ERR_LSTIO, 0); return (-1); } } llfio = first_fio->fioptr; if (llfio->can_listio) { copy = malloc(nreq * sizeof(*list)); if (copy == NULL) ERETURN(stat, FDC_ERR_NOMEM, 0); for (i = 0; i < nreq; i++) { copy[i] = list[i]; /* copy the entry */ copy[i].li_fildes = (int)llfio; } LYR_LOCK(fio); numdone = XRCALL(llfio, listiortn) cmd, copy, nreq, stat); LYR_UNLOCK(fio); free(copy); return(numdone); }
_ffseek_t _lock_seek(struct fdinfo *fio, off_t pos, int whence, struct ffsw *stat) { struct fdinfo *llfio; _ffseek_t ret; llfio = fio->fioptr; LYR_LOCK(fio); ret = XRCALL(llfio, seekrtn) llfio, pos, whence, stat); LYR_UNLOCK(fio); return(ret); }
ssize_t _lock_readc(struct fdinfo *fio, bitptr bufptr, size_t nbytes, struct ffsw *stat, int fulp) { struct fdinfo *llfio; ssize_t ret; llfio = fio->fioptr; LYR_LOCK(fio); ret = XRCALL(llfio, readcrtn)llfio, bufptr, nbytes, stat, fulp); LYR_UNLOCK(fio); return(ret); }
ssize_t _lock_writea(struct fdinfo *fio, bitptr bufptr, size_t nbytes, struct ffsw *stat, int fulp, int *ubc) { struct fdinfo *llfio; ssize_t ret; llfio = fio->fioptr; LYR_LOCK(fio); ret = XRCALL(llfio, writeartn) llfio, bufptr, nbytes, stat, fulp, ubc); LYR_UNLOCK(fio); return(ret); }