[OpenAFS] Re: Large files with 1.6.0pre2
Ryan C. Underwood
nemesis@icequake.net
Sat, 5 Mar 2011 20:10:42 -0600
> More on pwritev(). Looks like there is not a 64-bit version of the call
> per se. But it sure looks like a wraparound issue of some sort.
> http://lwn.net/Articles/311630/
I stand corrected. there is a 64-bit version. Maybe some AFS compile
time defines are wrong? I foggily remember having these kinds of issues
before, years ago, with other apps that were just becoming 64-bit aware.
>From <sys/uio.h>
#ifdef __USE_BSD
# ifndef __USE_FILE_OFFSET64
/* Read data from file descriptor FD at the given position OFFSET
without change the file pointer, and put the result in the buffers
described by IOVEC, which is a vector of COUNT 'struct iovec's.
The buffers are filled in the order specified. Operates just like
'pread' (see <unistd.h>) except that data are put in IOVEC instead
of a contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
extern ssize_t preadv (int __fd, __const struct iovec *__iovec, int __count,
__off_t __offset) __wur;
/* Write data pointed by the buffers described by IOVEC, which is a
vector of COUNT 'struct iovec's, to file descriptor FD at the given
position OFFSET without change the file pointer. The data is
written in the order specified. Operates just like 'pwrite' (see
<unistd.h>) except that the data are taken from IOVEC instead of a
contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
extern ssize_t pwritev (int __fd, __const struct iovec *__iovec, int __count,
__off_t __offset) __wur;
# else
# ifdef __REDIRECT
extern ssize_t __REDIRECT (preadv, (int __fd, __const struct iovec *__iovec,
int __count, __off64_t __offset),
preadv64) __wur;
extern ssize_t __REDIRECT (pwritev, (int __fd, __const struct iovec *__iovec,
int __count, __off64_t __offset),
pwritev64) __wur;
# else
# define preadv preadv64
# define pwritev pwritev64
# endif
# endif
# ifdef __USE_LARGEFILE64
/* Read data from file descriptor FD at the given position OFFSET
without change the file pointer, and put the result in the buffers
described by IOVEC, which is a vector of COUNT 'struct iovec's.
The buffers are filled in the order specified. Operates just like
'pread' (see <unistd.h>) except that data are put in IOVEC instead
of a contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
extern ssize_t preadv64 (int __fd, __const struct iovec *__iovec, int __count,
__off64_t __offset) __wur;
/* Write data pointed by the buffers described by IOVEC, which is a
vector of COUNT 'struct iovec's, to file descriptor FD at the given
position OFFSET without change the file pointer. The data is
written in the order specified. Operates just like 'pwrite' (see
<unistd.h>) except that the data are taken from IOVEC instead of a
contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
extern ssize_t pwritev64 (int __fd, __const struct iovec *__iovec, int __count,
__off64_t __offset) __wur;
# endif
#endif /* Use BSD */
--
Ryan C. Underwood, <nemesis@icequake.net>