The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/tests/zfs-tests/cmd/mmap_libaio.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 
   22 /*
   23  * Copyright 2018 Canonical.  All rights reserved.
   24  */
   25 
   26 #include <stdio.h>
   27 #include <stdlib.h>
   28 #include <unistd.h>
   29 #include <fcntl.h>
   30 #include <sys/mman.h>
   31 #include <sys/types.h>
   32 #include <sys/stat.h>
   33 #include <libaio.h>
   34 #include <err.h>
   35 
   36 static io_context_t io_ctx;
   37 
   38 static void
   39 do_sync_io(struct iocb *iocb)
   40 {
   41         struct io_event event;
   42         struct iocb *iocbs[] = { iocb };
   43         struct timespec ts = { 30, 0 };
   44 
   45         if (io_submit(io_ctx, 1, iocbs) != 1)
   46                 err(1, "io_submit failed");
   47 
   48         if (io_getevents(io_ctx, 0, 1, &event, &ts) != 1)
   49                 err(1, "io_getevents failed");
   50 }
   51 
   52 int
   53 main(int argc, char **argv)
   54 {
   55         (void) argc;
   56         char *buf;
   57         int page_size = getpagesize();
   58         int buf_size = strtol(argv[2], NULL, 0);
   59         int rwfd;
   60         struct iocb iocb;
   61 
   62         if (io_queue_init(1024, &io_ctx))
   63                 err(1, "io_queue_init failed");
   64 
   65         rwfd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
   66         if (rwfd < 0)
   67                 err(1, "open failed");
   68 
   69         if (ftruncate(rwfd, buf_size) < 0)
   70                 err(1, "ftruncate failed");
   71 
   72         buf = mmap(0, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, rwfd, 0);
   73         if (buf == MAP_FAILED)
   74                 err(1, "mmap failed");
   75 
   76         (void) io_prep_pwrite(&iocb, rwfd, buf, buf_size, 0);
   77         do_sync_io(&iocb);
   78 
   79         (void) io_prep_pread(&iocb, rwfd, buf, buf_size, 0);
   80         do_sync_io(&iocb);
   81 
   82         if (close(rwfd))
   83                 err(1, "close failed");
   84 
   85         if (io_queue_release(io_ctx) != 0)
   86                 err(1, "io_queue_release failed");
   87 
   88         return (0);
   89 }

Cache object: 94f2df6292f9882f046bef9368187a5f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.