mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
[virtio-9p] Use preadv/pwritev instead of readv/writev
readv & writev, read & write respectively from the current offset of the file & hence their use has to be preceeded by a call to lseek. preadv/writev can be used instead, as they take the offset as an argument. This saves one system call( lseek ). In case preadv is not supported, it is implemented by an lseek followed by a readv. Depending upon the configuration of QEMU, the appropriate read & write methods are selected. This patch also fixes the zero byte read/write bug & obviates the need to apply a fix for that bug separately. Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com> Signed-off-by: Sanchit Garg <sancgarg@linux.vnet.ibm.com> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
This commit is contained in:
parent
9f506893a4
commit
56d15a5329
3 changed files with 67 additions and 94 deletions
|
@ -80,9 +80,8 @@ typedef struct FileOperations
|
|||
off_t (*telldir)(FsContext *, DIR *);
|
||||
struct dirent *(*readdir)(FsContext *, DIR *);
|
||||
void (*seekdir)(FsContext *, DIR *, off_t);
|
||||
ssize_t (*readv)(FsContext *, int, const struct iovec *, int);
|
||||
ssize_t (*writev)(FsContext *, int, const struct iovec *, int);
|
||||
off_t (*lseek)(FsContext *, int, off_t, int);
|
||||
ssize_t (*preadv)(FsContext *, int, const struct iovec *, int, off_t);
|
||||
ssize_t (*pwritev)(FsContext *, int, const struct iovec *, int, off_t);
|
||||
int (*mkdir)(FsContext *, const char *, FsCred *);
|
||||
int (*fstat)(FsContext *, int, struct stat *);
|
||||
int (*rename)(FsContext *, const char *, const char *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue