Module Name: src Committed By: ozaki-r Date: Wed Oct 16 09:09:39 UTC 2024
Modified Files: src/lib/librumpuser: rumpuser_file.c Log Message: librumpuser: use preadv/pwritev if available Because Calling lseek then readv/writev is racy. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/lib/librumpuser/rumpuser_file.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/librumpuser/rumpuser_file.c diff -u src/lib/librumpuser/rumpuser_file.c:1.4 src/lib/librumpuser/rumpuser_file.c:1.5 --- src/lib/librumpuser/rumpuser_file.c:1.4 Tue Nov 4 21:08:12 2014 +++ src/lib/librumpuser/rumpuser_file.c Wed Oct 16 09:09:39 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpuser_file.c,v 1.4 2014/11/04 21:08:12 pooka Exp $ */ +/* $NetBSD: rumpuser_file.c,v 1.5 2024/10/16 09:09:39 ozaki-r Exp $ */ /* * Copyright (c) 2007-2010 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ #include "rumpuser_port.h" #if !defined(lint) -__RCSID("$NetBSD: rumpuser_file.c,v 1.4 2014/11/04 21:08:12 pooka Exp $"); +__RCSID("$NetBSD: rumpuser_file.c,v 1.5 2024/10/16 09:09:39 ozaki-r Exp $"); #endif /* !lint */ #include <sys/ioctl.h> @@ -250,6 +250,9 @@ rumpuser_iovread(int fd, struct rumpuser if (off == RUMPUSER_IOV_NOSEEK) { KLOCK_WRAP(nn = readv(fd, iov, iovlen)); } else { +#ifdef HAVE_PREADV + KLOCK_WRAP(nn = preadv(fd, iov, iovlen, off)); +#else int nlocks; rumpkern_unsched(&nlocks, NULL); @@ -259,6 +262,7 @@ rumpuser_iovread(int fd, struct rumpuser nn = -1; } rumpkern_sched(nlocks, NULL); +#endif } if (nn == -1) { @@ -283,6 +287,9 @@ rumpuser_iovwrite(int fd, const struct r if (off == RUMPUSER_IOV_NOSEEK) { KLOCK_WRAP(nn = writev(fd, iov, iovlen)); } else { +#ifdef HAVE_PWRITEV + KLOCK_WRAP(nn = pwritev(fd, iov, iovlen, off)); +#else int nlocks; rumpkern_unsched(&nlocks, NULL); @@ -292,6 +299,7 @@ rumpuser_iovwrite(int fd, const struct r nn = -1; } rumpkern_sched(nlocks, NULL); +#endif } if (nn == -1) {