diff options
| author | Christian Schoenebeck <qemu_oss@crudebyte.com> | 2020-07-29 10:12:33 +0200 |
|---|---|---|
| committer | Christian Schoenebeck <qemu_oss@crudebyte.com> | 2020-08-12 09:17:32 +0200 |
| commit | 2149675b195f2d9a1a4e3b966d45aba234def69b (patch) | |
| tree | 86497b565aeebbc91263901e7eeb6a3bab9be2aa /hw/9pfs/coth.h | |
| parent | dd8151f4fed6ee078a33cff4caa9ac5c558940ef (diff) | |
| download | focaccia-qemu-2149675b195f2d9a1a4e3b966d45aba234def69b.tar.gz focaccia-qemu-2149675b195f2d9a1a4e3b966d45aba234def69b.zip | |
9pfs: add new function v9fs_co_readdir_many()
The newly added function v9fs_co_readdir_many() retrieves multiple directory entries with a single fs driver request. It is intended to replace uses of v9fs_co_readdir(), the latter only retrieves a single directory entry per fs driver request instead. The reason for this planned replacement is that for every fs driver request the coroutine is dispatched from main I/O thread to a background I/O thread and eventually dispatched back to main I/O thread. Hopping between threads adds latency. So if a 9pfs Treaddir request reads a large amount of directory entries, this currently sums up to huge latencies of several hundred ms or even more. So using v9fs_co_readdir_many() instead of v9fs_co_readdir() will provide significant performance improvements. Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Message-Id: <73dc827a12ef577ae7e644dcf34a5c0e443ab42f.1596012787.git.qemu_oss@crudebyte.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Diffstat (limited to 'hw/9pfs/coth.h')
| -rw-r--r-- | hw/9pfs/coth.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/9pfs/coth.h b/hw/9pfs/coth.h index c2cdc7a9ea..fd4a45bc7c 100644 --- a/hw/9pfs/coth.h +++ b/hw/9pfs/coth.h @@ -49,6 +49,9 @@ void co_run_in_worker_bh(void *); int coroutine_fn v9fs_co_readlink(V9fsPDU *, V9fsPath *, V9fsString *); int coroutine_fn v9fs_co_readdir(V9fsPDU *, V9fsFidState *, struct dirent **); +int coroutine_fn v9fs_co_readdir_many(V9fsPDU *, V9fsFidState *, + struct V9fsDirEnt **, off_t, int32_t, + bool); off_t coroutine_fn v9fs_co_telldir(V9fsPDU *, V9fsFidState *); void coroutine_fn v9fs_co_seekdir(V9fsPDU *, V9fsFidState *, off_t); void coroutine_fn v9fs_co_rewinddir(V9fsPDU *, V9fsFidState *); |