Example #1
0
static int
tapdisk_logfile_init_buffer(td_logfile_t *log, size_t size)
{
    int prot, flags, err;

    if (!size)
        return -EINVAL;

    prot  = PROT_READ|PROT_WRITE;
    flags = MAP_ANONYMOUS|MAP_PRIVATE;

    log->vbuf = mmap(NULL, page_align(size), prot, flags, -1, 0);
    if (log->vbuf == MAP_FAILED) {
        log->vbuf = NULL;
        goto fail;
    }

    err = mlock(log->vbuf, page_align(size));
    if (err)
        goto fail;

    log->vbufsz = size;

    return 0;

fail:
    tapdisk_logfile_free_buffer(log);
    err = -errno;
    return err;
}
Example #2
0
void tapdisk_logfile_close(td_logfile_t * log)
{
    if (log->file) {
        fclose(log->file);
        log->file = NULL;
    }

    tapdisk_logfile_free_buffer(log);
}