Lines Matching +full:0 +full:- +full:9
2 * 9p backend
10 * the COPYING file in the top-level directory.
15 * Not so fast! You might want to read the 9p developer docs first:
16 * https://wiki.qemu.org/Documentation/9p
20 #include "fsdev/qemu-fsdev.h"
22 #include "qemu/main-loop.h"
23 #include "qemu/error-report.h"
25 #include "9p-xattr.h"
26 #include "9p-util.h"
29 * Intended to be called from bottom-half (e.g. background I/O thread)
34 int err = 0; in do_readdir()
35 V9fsState *s = pdu->s; in do_readdir()
38 errno = 0; in do_readdir()
39 entry = s->ops->readdir(&s->ctx, &fidp->fs); in do_readdir()
42 err = -errno; in do_readdir()
59 return -EINTR; in v9fs_co_readdir()
76 V9fsState *s = pdu->s; in do_readdir_many()
78 int len, err = 0; in do_readdir_many()
79 int32_t size = 0; in do_readdir_many()
92 * With a good 9p client we should not get into concurrency here, in do_readdir_many()
98 v9fs_readdir_lock(&fidp->fs.dir); in do_readdir_many()
101 if (offset == 0) { in do_readdir_many()
102 s->ops->rewinddir(&s->ctx, &fidp->fs); in do_readdir_many()
104 s->ops->seekdir(&s->ctx, &fidp->fs, offset); in do_readdir_many()
108 saved_dir_pos = s->ops->telldir(&s->ctx, &fidp->fs); in do_readdir_many()
109 if (saved_dir_pos < 0) { in do_readdir_many()
117 err = -EINTR; in do_readdir_many()
131 * 9p controller (main thread / top half) anyway in do_readdir_many()
134 v9fs_string_sprintf(&name, "%s", dent->d_name); in do_readdir_many()
146 e = e->next = g_new0(V9fsDirEnt, 1); in do_readdir_many()
148 e->dent = qemu_dirent_dup(dent); in do_readdir_many()
152 err = s->ops->name_to_path( in do_readdir_many()
153 &s->ctx, &fidp->path, dent->d_name, &path in do_readdir_many()
155 if (err < 0) { in do_readdir_many()
156 err = -errno; in do_readdir_many()
160 err = s->ops->lstat(&s->ctx, &path, &stbuf); in do_readdir_many()
161 if (err < 0) { in do_readdir_many()
162 err = -errno; in do_readdir_many()
166 e->st = g_new0(struct stat, 1); in do_readdir_many()
167 memcpy(e->st, &stbuf, sizeof(struct stat)); in do_readdir_many()
175 s->ops->seekdir(&s->ctx, &fidp->fs, saved_dir_pos); in do_readdir_many()
178 v9fs_readdir_unlock(&fidp->fs.dir); in do_readdir_many()
180 if (err < 0) { in do_readdir_many()
187 * v9fs_co_readdir_many() - Reads multiple directory entries in one rush.
189 * @pdu: the causing 9p (T_readdir) client request
222 int err = 0; in v9fs_co_readdir_many()
225 return -EINTR; in v9fs_co_readdir_many()
236 V9fsState *s = pdu->s; in v9fs_co_telldir()
239 return -EINTR; in v9fs_co_telldir()
243 err = s->ops->telldir(&s->ctx, &fidp->fs); in v9fs_co_telldir()
244 if (err < 0) { in v9fs_co_telldir()
245 err = -errno; in v9fs_co_telldir()
254 V9fsState *s = pdu->s; in v9fs_co_seekdir()
260 s->ops->seekdir(&s->ctx, &fidp->fs, offset); in v9fs_co_seekdir()
266 V9fsState *s = pdu->s; in v9fs_co_rewinddir()
272 s->ops->rewinddir(&s->ctx, &fidp->fs); in v9fs_co_rewinddir()
283 V9fsState *s = pdu->s; in v9fs_co_mkdir()
286 return -EINTR; in v9fs_co_mkdir()
295 err = s->ops->mkdir(&s->ctx, &fidp->path, name->data, &cred); in v9fs_co_mkdir()
296 if (err < 0) { in v9fs_co_mkdir()
297 err = -errno; in v9fs_co_mkdir()
300 err = v9fs_name_to_path(s, &fidp->path, name->data, &path); in v9fs_co_mkdir()
302 err = s->ops->lstat(&s->ctx, &path, stbuf); in v9fs_co_mkdir()
303 if (err < 0) { in v9fs_co_mkdir()
304 err = -errno; in v9fs_co_mkdir()
317 V9fsState *s = pdu->s; in v9fs_co_opendir()
320 return -EINTR; in v9fs_co_opendir()
325 err = s->ops->opendir(&s->ctx, &fidp->path, &fidp->fs); in v9fs_co_opendir()
326 if (err < 0) { in v9fs_co_opendir()
327 err = -errno; in v9fs_co_opendir()
329 err = 0; in v9fs_co_opendir()
345 V9fsState *s = pdu->s; in v9fs_co_closedir()
348 return -EINTR; in v9fs_co_closedir()
352 err = s->ops->closedir(&s->ctx, fs); in v9fs_co_closedir()
353 if (err < 0) { in v9fs_co_closedir()
354 err = -errno; in v9fs_co_closedir()
360 error_report("9pfs: WARNING: v9fs_co_closedir() failed with EBADF"); in v9fs_co_closedir()
362 total_open_fd--; in v9fs_co_closedir()