@@ -58,3 +58,34 @@ int v9fs_co_readlink(V9fsState *s, V9fsString *path, V9fsString *buf,
buf->data = vs.buf->data;
return vs.err;
}
+
+typedef struct V9fsThStatfsState {
+ int err;
+ V9fsState *s;
+ V9fsString *path;
+ struct statfs *stbuf;
+ V9fsRequest request;
+} V9fsThStatfsState;
+
+static void v9fs_th_do_statfs(V9fsRequest *request)
+{
+ V9fsThStatfsState *vsp = container_of(request, V9fsThStatfsState,
+ request);
+ vsp->err = vsp->s->ops->statfs(&vsp->s->ctx, vsp->path->data, vsp->stbuf);
+ if (vsp->err < 0) {
+ vsp->err = -errno;
+ }
+}
+
+int v9fs_co_statfs(V9fsState *s, V9fsString *path, struct statfs *stbuf)
+{
+ V9fsThStatfsState vs;
+ vs.s = s;
+ vs.path = path;
+ vs.stbuf = stbuf;
+ vs.request.func = v9fs_th_do_statfs;
+ vs.request.coroutine = qemu_coroutine_self();
+ v9fs_qemu_submit_request(&vs.request);
+ qemu_coroutine_yield();
+ return vs.err;
+}
@@ -55,4 +55,5 @@ extern int v9fs_co_readdir(V9fsState *, V9fsFidState *,
extern off_t v9fs_co_telldir(V9fsState *, V9fsFidState *);
extern void v9fs_co_seekdir(V9fsState *, V9fsFidState *, off_t);
extern void v9fs_co_rewinddir(V9fsState *, V9fsFidState *);
+extern int v9fs_co_statfs(V9fsState *, V9fsString *, struct statfs *);
#endif