186e42d74SVenkateswararao Jujjuri (JV) 286e42d74SVenkateswararao Jujjuri (JV) /* 386e42d74SVenkateswararao Jujjuri (JV) * Virtio 9p backend 486e42d74SVenkateswararao Jujjuri (JV) * 586e42d74SVenkateswararao Jujjuri (JV) * Copyright IBM, Corp. 2011 686e42d74SVenkateswararao Jujjuri (JV) * 786e42d74SVenkateswararao Jujjuri (JV) * Authors: 886e42d74SVenkateswararao Jujjuri (JV) * Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> 986e42d74SVenkateswararao Jujjuri (JV) * 1086e42d74SVenkateswararao Jujjuri (JV) * This work is licensed under the terms of the GNU GPL, version 2. See 1186e42d74SVenkateswararao Jujjuri (JV) * the COPYING file in the top-level directory. 1286e42d74SVenkateswararao Jujjuri (JV) * 1386e42d74SVenkateswararao Jujjuri (JV) */ 1486e42d74SVenkateswararao Jujjuri (JV) 1586e42d74SVenkateswararao Jujjuri (JV) #include "fsdev/qemu-fsdev.h" 1686e42d74SVenkateswararao Jujjuri (JV) #include "qemu-thread.h" 1786e42d74SVenkateswararao Jujjuri (JV) #include "qemu-coroutine.h" 1886e42d74SVenkateswararao Jujjuri (JV) #include "virtio-9p-coth.h" 1986e42d74SVenkateswararao Jujjuri (JV) 2086e42d74SVenkateswararao Jujjuri (JV) int v9fs_co_readlink(V9fsState *s, V9fsString *path, V9fsString *buf) 2186e42d74SVenkateswararao Jujjuri (JV) { 2286e42d74SVenkateswararao Jujjuri (JV) int err; 2386e42d74SVenkateswararao Jujjuri (JV) ssize_t len; 2486e42d74SVenkateswararao Jujjuri (JV) 2586e42d74SVenkateswararao Jujjuri (JV) buf->data = qemu_malloc(PATH_MAX); 2686e42d74SVenkateswararao Jujjuri (JV) v9fs_co_run_in_worker( 2786e42d74SVenkateswararao Jujjuri (JV) { 2886e42d74SVenkateswararao Jujjuri (JV) len = s->ops->readlink(&s->ctx, path->data, 2986e42d74SVenkateswararao Jujjuri (JV) buf->data, PATH_MAX - 1); 3086e42d74SVenkateswararao Jujjuri (JV) if (len > -1) { 3186e42d74SVenkateswararao Jujjuri (JV) buf->size = len; 3286e42d74SVenkateswararao Jujjuri (JV) buf->data[len] = 0; 3386e42d74SVenkateswararao Jujjuri (JV) err = 0; 3486e42d74SVenkateswararao Jujjuri (JV) } else { 3586e42d74SVenkateswararao Jujjuri (JV) err = -errno; 3686e42d74SVenkateswararao Jujjuri (JV) } 3786e42d74SVenkateswararao Jujjuri (JV) }); 3886e42d74SVenkateswararao Jujjuri (JV) if (err) { 3986e42d74SVenkateswararao Jujjuri (JV) qemu_free(buf->data); 4086e42d74SVenkateswararao Jujjuri (JV) buf->data = NULL; 4186e42d74SVenkateswararao Jujjuri (JV) buf->size = 0; 4286e42d74SVenkateswararao Jujjuri (JV) } 4386e42d74SVenkateswararao Jujjuri (JV) return err; 4486e42d74SVenkateswararao Jujjuri (JV) } 45*94840ff9SAneesh Kumar K.V 46*94840ff9SAneesh Kumar K.V int v9fs_co_statfs(V9fsState *s, V9fsString *path, struct statfs *stbuf) 47*94840ff9SAneesh Kumar K.V { 48*94840ff9SAneesh Kumar K.V int err; 49*94840ff9SAneesh Kumar K.V 50*94840ff9SAneesh Kumar K.V v9fs_co_run_in_worker( 51*94840ff9SAneesh Kumar K.V { 52*94840ff9SAneesh Kumar K.V err = s->ops->statfs(&s->ctx, path->data, stbuf); 53*94840ff9SAneesh Kumar K.V if (err < 0) { 54*94840ff9SAneesh Kumar K.V err = -errno; 55*94840ff9SAneesh Kumar K.V } 56*94840ff9SAneesh Kumar K.V }); 57*94840ff9SAneesh Kumar K.V return err; 58*94840ff9SAneesh Kumar K.V } 59