Statistics
| Branch: | Revision:

root / hw / 9pfs / virtio-9p-proxy.c @ 17bff52b

History | View | Annotate | Download (9.5 kB)

1 4c793dda M. Mohan Kumar
/*
2 4c793dda M. Mohan Kumar
 * Virtio 9p Proxy callback
3 4c793dda M. Mohan Kumar
 *
4 4c793dda M. Mohan Kumar
 * Copyright IBM, Corp. 2011
5 4c793dda M. Mohan Kumar
 *
6 4c793dda M. Mohan Kumar
 * Authors:
7 4c793dda M. Mohan Kumar
 * M. Mohan Kumar <mohan@in.ibm.com>
8 4c793dda M. Mohan Kumar
 *
9 4c793dda M. Mohan Kumar
 * This work is licensed under the terms of the GNU GPL, version 2.  See
10 4c793dda M. Mohan Kumar
 * the COPYING file in the top-level directory.
11 4c793dda M. Mohan Kumar
 */
12 4c793dda M. Mohan Kumar
#include <sys/socket.h>
13 4c793dda M. Mohan Kumar
#include <sys/un.h>
14 4c793dda M. Mohan Kumar
#include "hw/virtio.h"
15 4c793dda M. Mohan Kumar
#include "virtio-9p.h"
16 4c793dda M. Mohan Kumar
#include "fsdev/qemu-fsdev.h"
17 4c793dda M. Mohan Kumar
#include "virtio-9p-proxy.h"
18 4c793dda M. Mohan Kumar
19 4c793dda M. Mohan Kumar
typedef struct V9fsProxy {
20 4c793dda M. Mohan Kumar
    int sockfd;
21 4c793dda M. Mohan Kumar
    QemuMutex mutex;
22 4c793dda M. Mohan Kumar
    struct iovec iovec;
23 4c793dda M. Mohan Kumar
} V9fsProxy;
24 4c793dda M. Mohan Kumar
25 4c793dda M. Mohan Kumar
static int proxy_lstat(FsContext *fs_ctx, V9fsPath *fs_path, struct stat *stbuf)
26 4c793dda M. Mohan Kumar
{
27 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
28 4c793dda M. Mohan Kumar
    return -1;
29 4c793dda M. Mohan Kumar
}
30 4c793dda M. Mohan Kumar
31 4c793dda M. Mohan Kumar
static ssize_t proxy_readlink(FsContext *fs_ctx, V9fsPath *fs_path,
32 4c793dda M. Mohan Kumar
                              char *buf, size_t bufsz)
33 4c793dda M. Mohan Kumar
{
34 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
35 4c793dda M. Mohan Kumar
    return -1;
36 4c793dda M. Mohan Kumar
}
37 4c793dda M. Mohan Kumar
38 4c793dda M. Mohan Kumar
static int proxy_close(FsContext *ctx, V9fsFidOpenState *fs)
39 4c793dda M. Mohan Kumar
{
40 4c793dda M. Mohan Kumar
    return close(fs->fd);
41 4c793dda M. Mohan Kumar
}
42 4c793dda M. Mohan Kumar
43 4c793dda M. Mohan Kumar
static int proxy_closedir(FsContext *ctx, V9fsFidOpenState *fs)
44 4c793dda M. Mohan Kumar
{
45 4c793dda M. Mohan Kumar
    return closedir(fs->dir);
46 4c793dda M. Mohan Kumar
}
47 4c793dda M. Mohan Kumar
48 4c793dda M. Mohan Kumar
static int proxy_open(FsContext *ctx, V9fsPath *fs_path,
49 4c793dda M. Mohan Kumar
                      int flags, V9fsFidOpenState *fs)
50 4c793dda M. Mohan Kumar
{
51 4c793dda M. Mohan Kumar
    fs->fd = -1;
52 4c793dda M. Mohan Kumar
    return fs->fd;
53 4c793dda M. Mohan Kumar
}
54 4c793dda M. Mohan Kumar
55 4c793dda M. Mohan Kumar
static int proxy_opendir(FsContext *ctx,
56 4c793dda M. Mohan Kumar
                         V9fsPath *fs_path, V9fsFidOpenState *fs)
57 4c793dda M. Mohan Kumar
{
58 4c793dda M. Mohan Kumar
    fs->dir = NULL;
59 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
60 4c793dda M. Mohan Kumar
    return -1;
61 4c793dda M. Mohan Kumar
}
62 4c793dda M. Mohan Kumar
63 4c793dda M. Mohan Kumar
static void proxy_rewinddir(FsContext *ctx, V9fsFidOpenState *fs)
64 4c793dda M. Mohan Kumar
{
65 4c793dda M. Mohan Kumar
    return rewinddir(fs->dir);
66 4c793dda M. Mohan Kumar
}
67 4c793dda M. Mohan Kumar
68 4c793dda M. Mohan Kumar
static off_t proxy_telldir(FsContext *ctx, V9fsFidOpenState *fs)
69 4c793dda M. Mohan Kumar
{
70 4c793dda M. Mohan Kumar
    return telldir(fs->dir);
71 4c793dda M. Mohan Kumar
}
72 4c793dda M. Mohan Kumar
73 4c793dda M. Mohan Kumar
static int proxy_readdir_r(FsContext *ctx, V9fsFidOpenState *fs,
74 4c793dda M. Mohan Kumar
                           struct dirent *entry,
75 4c793dda M. Mohan Kumar
                           struct dirent **result)
76 4c793dda M. Mohan Kumar
{
77 4c793dda M. Mohan Kumar
    return readdir_r(fs->dir, entry, result);
78 4c793dda M. Mohan Kumar
}
79 4c793dda M. Mohan Kumar
80 4c793dda M. Mohan Kumar
static void proxy_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off)
81 4c793dda M. Mohan Kumar
{
82 4c793dda M. Mohan Kumar
    return seekdir(fs->dir, off);
83 4c793dda M. Mohan Kumar
}
84 4c793dda M. Mohan Kumar
85 4c793dda M. Mohan Kumar
static ssize_t proxy_preadv(FsContext *ctx, V9fsFidOpenState *fs,
86 4c793dda M. Mohan Kumar
                            const struct iovec *iov,
87 4c793dda M. Mohan Kumar
                            int iovcnt, off_t offset)
88 4c793dda M. Mohan Kumar
{
89 4c793dda M. Mohan Kumar
#ifdef CONFIG_PREADV
90 4c793dda M. Mohan Kumar
    return preadv(fs->fd, iov, iovcnt, offset);
91 4c793dda M. Mohan Kumar
#else
92 4c793dda M. Mohan Kumar
    int err = lseek(fs->fd, offset, SEEK_SET);
93 4c793dda M. Mohan Kumar
    if (err == -1) {
94 4c793dda M. Mohan Kumar
        return err;
95 4c793dda M. Mohan Kumar
    } else {
96 4c793dda M. Mohan Kumar
        return readv(fs->fd, iov, iovcnt);
97 4c793dda M. Mohan Kumar
    }
98 4c793dda M. Mohan Kumar
#endif
99 4c793dda M. Mohan Kumar
}
100 4c793dda M. Mohan Kumar
101 4c793dda M. Mohan Kumar
static ssize_t proxy_pwritev(FsContext *ctx, V9fsFidOpenState *fs,
102 4c793dda M. Mohan Kumar
                             const struct iovec *iov,
103 4c793dda M. Mohan Kumar
                             int iovcnt, off_t offset)
104 4c793dda M. Mohan Kumar
{
105 4c793dda M. Mohan Kumar
    ssize_t ret;
106 4c793dda M. Mohan Kumar
107 4c793dda M. Mohan Kumar
#ifdef CONFIG_PREADV
108 4c793dda M. Mohan Kumar
    ret = pwritev(fs->fd, iov, iovcnt, offset);
109 4c793dda M. Mohan Kumar
#else
110 4c793dda M. Mohan Kumar
    int err = lseek(fs->fd, offset, SEEK_SET);
111 4c793dda M. Mohan Kumar
    if (err == -1) {
112 4c793dda M. Mohan Kumar
        return err;
113 4c793dda M. Mohan Kumar
    } else {
114 4c793dda M. Mohan Kumar
        ret = writev(fs->fd, iov, iovcnt);
115 4c793dda M. Mohan Kumar
    }
116 4c793dda M. Mohan Kumar
#endif
117 4c793dda M. Mohan Kumar
#ifdef CONFIG_SYNC_FILE_RANGE
118 4c793dda M. Mohan Kumar
    if (ret > 0 && ctx->export_flags & V9FS_IMMEDIATE_WRITEOUT) {
119 4c793dda M. Mohan Kumar
        /*
120 4c793dda M. Mohan Kumar
         * Initiate a writeback. This is not a data integrity sync.
121 4c793dda M. Mohan Kumar
         * We want to ensure that we don't leave dirty pages in the cache
122 4c793dda M. Mohan Kumar
         * after write when writeout=immediate is sepcified.
123 4c793dda M. Mohan Kumar
         */
124 4c793dda M. Mohan Kumar
        sync_file_range(fs->fd, offset, ret,
125 4c793dda M. Mohan Kumar
                        SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE);
126 4c793dda M. Mohan Kumar
    }
127 4c793dda M. Mohan Kumar
#endif
128 4c793dda M. Mohan Kumar
    return ret;
129 4c793dda M. Mohan Kumar
}
130 4c793dda M. Mohan Kumar
131 4c793dda M. Mohan Kumar
static int proxy_chmod(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp)
132 4c793dda M. Mohan Kumar
{
133 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
134 4c793dda M. Mohan Kumar
    return -1;
135 4c793dda M. Mohan Kumar
}
136 4c793dda M. Mohan Kumar
137 4c793dda M. Mohan Kumar
static int proxy_mknod(FsContext *fs_ctx, V9fsPath *dir_path,
138 4c793dda M. Mohan Kumar
                       const char *name, FsCred *credp)
139 4c793dda M. Mohan Kumar
{
140 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
141 4c793dda M. Mohan Kumar
    return -1;
142 4c793dda M. Mohan Kumar
}
143 4c793dda M. Mohan Kumar
144 4c793dda M. Mohan Kumar
static int proxy_mkdir(FsContext *fs_ctx, V9fsPath *dir_path,
145 4c793dda M. Mohan Kumar
                       const char *name, FsCred *credp)
146 4c793dda M. Mohan Kumar
{
147 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
148 4c793dda M. Mohan Kumar
    return -1;
149 4c793dda M. Mohan Kumar
}
150 4c793dda M. Mohan Kumar
151 4c793dda M. Mohan Kumar
static int proxy_fstat(FsContext *fs_ctx, int fid_type,
152 4c793dda M. Mohan Kumar
                       V9fsFidOpenState *fs, struct stat *stbuf)
153 4c793dda M. Mohan Kumar
{
154 4c793dda M. Mohan Kumar
    int fd;
155 4c793dda M. Mohan Kumar
156 4c793dda M. Mohan Kumar
    if (fid_type == P9_FID_DIR) {
157 4c793dda M. Mohan Kumar
        fd = dirfd(fs->dir);
158 4c793dda M. Mohan Kumar
    } else {
159 4c793dda M. Mohan Kumar
        fd = fs->fd;
160 4c793dda M. Mohan Kumar
    }
161 4c793dda M. Mohan Kumar
    return fstat(fd, stbuf);
162 4c793dda M. Mohan Kumar
}
163 4c793dda M. Mohan Kumar
164 4c793dda M. Mohan Kumar
static int proxy_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name,
165 4c793dda M. Mohan Kumar
                       int flags, FsCred *credp, V9fsFidOpenState *fs)
166 4c793dda M. Mohan Kumar
{
167 4c793dda M. Mohan Kumar
    fs->fd = -1;
168 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
169 4c793dda M. Mohan Kumar
    return -1;
170 4c793dda M. Mohan Kumar
}
171 4c793dda M. Mohan Kumar
172 4c793dda M. Mohan Kumar
173 4c793dda M. Mohan Kumar
static int proxy_symlink(FsContext *fs_ctx, const char *oldpath,
174 4c793dda M. Mohan Kumar
                         V9fsPath *dir_path, const char *name, FsCred *credp)
175 4c793dda M. Mohan Kumar
{
176 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
177 4c793dda M. Mohan Kumar
    return -1;
178 4c793dda M. Mohan Kumar
}
179 4c793dda M. Mohan Kumar
180 4c793dda M. Mohan Kumar
static int proxy_link(FsContext *ctx, V9fsPath *oldpath,
181 4c793dda M. Mohan Kumar
                      V9fsPath *dirpath, const char *name)
182 4c793dda M. Mohan Kumar
{
183 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
184 4c793dda M. Mohan Kumar
    return -1;
185 4c793dda M. Mohan Kumar
}
186 4c793dda M. Mohan Kumar
187 4c793dda M. Mohan Kumar
static int proxy_truncate(FsContext *ctx, V9fsPath *fs_path, off_t size)
188 4c793dda M. Mohan Kumar
{
189 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
190 4c793dda M. Mohan Kumar
    return -1;
191 4c793dda M. Mohan Kumar
}
192 4c793dda M. Mohan Kumar
193 4c793dda M. Mohan Kumar
static int proxy_rename(FsContext *ctx, const char *oldpath,
194 4c793dda M. Mohan Kumar
                        const char *newpath)
195 4c793dda M. Mohan Kumar
{
196 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
197 4c793dda M. Mohan Kumar
    return -1;
198 4c793dda M. Mohan Kumar
}
199 4c793dda M. Mohan Kumar
200 4c793dda M. Mohan Kumar
static int proxy_chown(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp)
201 4c793dda M. Mohan Kumar
{
202 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
203 4c793dda M. Mohan Kumar
    return -1;
204 4c793dda M. Mohan Kumar
}
205 4c793dda M. Mohan Kumar
206 4c793dda M. Mohan Kumar
static int proxy_utimensat(FsContext *s, V9fsPath *fs_path,
207 4c793dda M. Mohan Kumar
                           const struct timespec *buf)
208 4c793dda M. Mohan Kumar
{
209 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
210 4c793dda M. Mohan Kumar
    return -1;
211 4c793dda M. Mohan Kumar
}
212 4c793dda M. Mohan Kumar
213 4c793dda M. Mohan Kumar
static int proxy_remove(FsContext *ctx, const char *path)
214 4c793dda M. Mohan Kumar
{
215 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
216 4c793dda M. Mohan Kumar
    return -1;
217 4c793dda M. Mohan Kumar
}
218 4c793dda M. Mohan Kumar
219 4c793dda M. Mohan Kumar
static int proxy_fsync(FsContext *ctx, int fid_type,
220 4c793dda M. Mohan Kumar
                       V9fsFidOpenState *fs, int datasync)
221 4c793dda M. Mohan Kumar
{
222 4c793dda M. Mohan Kumar
    int fd;
223 4c793dda M. Mohan Kumar
224 4c793dda M. Mohan Kumar
    if (fid_type == P9_FID_DIR) {
225 4c793dda M. Mohan Kumar
        fd = dirfd(fs->dir);
226 4c793dda M. Mohan Kumar
    } else {
227 4c793dda M. Mohan Kumar
        fd = fs->fd;
228 4c793dda M. Mohan Kumar
    }
229 4c793dda M. Mohan Kumar
230 4c793dda M. Mohan Kumar
    if (datasync) {
231 4c793dda M. Mohan Kumar
        return qemu_fdatasync(fd);
232 4c793dda M. Mohan Kumar
    } else {
233 4c793dda M. Mohan Kumar
        return fsync(fd);
234 4c793dda M. Mohan Kumar
    }
235 4c793dda M. Mohan Kumar
}
236 4c793dda M. Mohan Kumar
237 4c793dda M. Mohan Kumar
static int proxy_statfs(FsContext *s, V9fsPath *fs_path, struct statfs *stbuf)
238 4c793dda M. Mohan Kumar
{
239 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
240 4c793dda M. Mohan Kumar
    return -1;
241 4c793dda M. Mohan Kumar
}
242 4c793dda M. Mohan Kumar
243 4c793dda M. Mohan Kumar
static ssize_t proxy_lgetxattr(FsContext *ctx, V9fsPath *fs_path,
244 4c793dda M. Mohan Kumar
                               const char *name, void *value, size_t size)
245 4c793dda M. Mohan Kumar
{
246 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
247 4c793dda M. Mohan Kumar
    return -1;
248 4c793dda M. Mohan Kumar
}
249 4c793dda M. Mohan Kumar
250 4c793dda M. Mohan Kumar
static ssize_t proxy_llistxattr(FsContext *ctx, V9fsPath *fs_path,
251 4c793dda M. Mohan Kumar
                                void *value, size_t size)
252 4c793dda M. Mohan Kumar
{
253 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
254 4c793dda M. Mohan Kumar
    return -1;
255 4c793dda M. Mohan Kumar
}
256 4c793dda M. Mohan Kumar
257 4c793dda M. Mohan Kumar
static int proxy_lsetxattr(FsContext *ctx, V9fsPath *fs_path, const char *name,
258 4c793dda M. Mohan Kumar
                           void *value, size_t size, int flags)
259 4c793dda M. Mohan Kumar
{
260 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
261 4c793dda M. Mohan Kumar
    return -1;
262 4c793dda M. Mohan Kumar
}
263 4c793dda M. Mohan Kumar
264 4c793dda M. Mohan Kumar
static int proxy_lremovexattr(FsContext *ctx, V9fsPath *fs_path,
265 4c793dda M. Mohan Kumar
                              const char *name)
266 4c793dda M. Mohan Kumar
{
267 4c793dda M. Mohan Kumar
    errno = EOPNOTSUPP;
268 4c793dda M. Mohan Kumar
    return -1;
269 4c793dda M. Mohan Kumar
}
270 4c793dda M. Mohan Kumar
271 4c793dda M. Mohan Kumar
static int proxy_name_to_path(FsContext *ctx, V9fsPath *dir_path,
272 4c793dda M. Mohan Kumar
                              const char *name, V9fsPath *target)
273 4c793dda M. Mohan Kumar
{
274 4c793dda M. Mohan Kumar
    if (dir_path) {
275 4c793dda M. Mohan Kumar
        v9fs_string_sprintf((V9fsString *)target, "%s/%s",
276 4c793dda M. Mohan Kumar
                            dir_path->data, name);
277 4c793dda M. Mohan Kumar
    } else {
278 4c793dda M. Mohan Kumar
        v9fs_string_sprintf((V9fsString *)target, "%s", name);
279 4c793dda M. Mohan Kumar
    }
280 4c793dda M. Mohan Kumar
    /* Bump the size for including terminating NULL */
281 4c793dda M. Mohan Kumar
    target->size++;
282 4c793dda M. Mohan Kumar
    return 0;
283 4c793dda M. Mohan Kumar
}
284 4c793dda M. Mohan Kumar
285 4c793dda M. Mohan Kumar
static int proxy_renameat(FsContext *ctx, V9fsPath *olddir,
286 4c793dda M. Mohan Kumar
                          const char *old_name, V9fsPath *newdir,
287 4c793dda M. Mohan Kumar
                          const char *new_name)
288 4c793dda M. Mohan Kumar
{
289 4c793dda M. Mohan Kumar
    int ret;
290 4c793dda M. Mohan Kumar
    V9fsString old_full_name, new_full_name;
291 4c793dda M. Mohan Kumar
292 4c793dda M. Mohan Kumar
    v9fs_string_init(&old_full_name);
293 4c793dda M. Mohan Kumar
    v9fs_string_init(&new_full_name);
294 4c793dda M. Mohan Kumar
295 4c793dda M. Mohan Kumar
    v9fs_string_sprintf(&old_full_name, "%s/%s", olddir->data, old_name);
296 4c793dda M. Mohan Kumar
    v9fs_string_sprintf(&new_full_name, "%s/%s", newdir->data, new_name);
297 4c793dda M. Mohan Kumar
298 4c793dda M. Mohan Kumar
    ret = proxy_rename(ctx, old_full_name.data, new_full_name.data);
299 4c793dda M. Mohan Kumar
    v9fs_string_free(&old_full_name);
300 4c793dda M. Mohan Kumar
    v9fs_string_free(&new_full_name);
301 4c793dda M. Mohan Kumar
    return ret;
302 4c793dda M. Mohan Kumar
}
303 4c793dda M. Mohan Kumar
304 4c793dda M. Mohan Kumar
static int proxy_unlinkat(FsContext *ctx, V9fsPath *dir,
305 4c793dda M. Mohan Kumar
                          const char *name, int flags)
306 4c793dda M. Mohan Kumar
{
307 4c793dda M. Mohan Kumar
    int ret;
308 4c793dda M. Mohan Kumar
    V9fsString fullname;
309 4c793dda M. Mohan Kumar
    v9fs_string_init(&fullname);
310 4c793dda M. Mohan Kumar
311 4c793dda M. Mohan Kumar
    v9fs_string_sprintf(&fullname, "%s/%s", dir->data, name);
312 4c793dda M. Mohan Kumar
    ret = proxy_remove(ctx, fullname.data);
313 4c793dda M. Mohan Kumar
    v9fs_string_free(&fullname);
314 4c793dda M. Mohan Kumar
315 4c793dda M. Mohan Kumar
    return ret;
316 4c793dda M. Mohan Kumar
}
317 4c793dda M. Mohan Kumar
318 4c793dda M. Mohan Kumar
static int proxy_parse_opts(QemuOpts *opts, struct FsDriverEntry *fs)
319 4c793dda M. Mohan Kumar
{
320 4c793dda M. Mohan Kumar
    const char *sock_fd = qemu_opt_get(opts, "sock_fd");
321 4c793dda M. Mohan Kumar
322 4c793dda M. Mohan Kumar
    if (sock_fd) {
323 4c793dda M. Mohan Kumar
        fprintf(stderr, "sock_fd option not specified\n");
324 4c793dda M. Mohan Kumar
        return -1;
325 4c793dda M. Mohan Kumar
    }
326 4c793dda M. Mohan Kumar
    fs->path = g_strdup(sock_fd);
327 4c793dda M. Mohan Kumar
    return 0;
328 4c793dda M. Mohan Kumar
}
329 4c793dda M. Mohan Kumar
330 4c793dda M. Mohan Kumar
static int proxy_init(FsContext *ctx)
331 4c793dda M. Mohan Kumar
{
332 4c793dda M. Mohan Kumar
    V9fsProxy *proxy = g_malloc(sizeof(V9fsProxy));
333 4c793dda M. Mohan Kumar
    int sock_id;
334 4c793dda M. Mohan Kumar
335 4c793dda M. Mohan Kumar
    sock_id = atoi(ctx->fs_root);
336 4c793dda M. Mohan Kumar
    if (sock_id < 0) {
337 4c793dda M. Mohan Kumar
        fprintf(stderr, "socket descriptor not initialized\n");
338 4c793dda M. Mohan Kumar
        return -1;
339 4c793dda M. Mohan Kumar
    }
340 4c793dda M. Mohan Kumar
    g_free(ctx->fs_root);
341 4c793dda M. Mohan Kumar
342 4c793dda M. Mohan Kumar
    proxy->iovec.iov_base = g_malloc(PROXY_MAX_IO_SZ + PROXY_HDR_SZ);
343 4c793dda M. Mohan Kumar
    proxy->iovec.iov_len = PROXY_MAX_IO_SZ + PROXY_HDR_SZ;
344 4c793dda M. Mohan Kumar
    ctx->private = proxy;
345 4c793dda M. Mohan Kumar
    proxy->sockfd = sock_id;
346 4c793dda M. Mohan Kumar
    qemu_mutex_init(&proxy->mutex);
347 4c793dda M. Mohan Kumar
348 4c793dda M. Mohan Kumar
    ctx->export_flags |= V9FS_PATHNAME_FSCONTEXT;
349 4c793dda M. Mohan Kumar
    return 0;
350 4c793dda M. Mohan Kumar
}
351 4c793dda M. Mohan Kumar
352 4c793dda M. Mohan Kumar
FileOperations proxy_ops = {
353 4c793dda M. Mohan Kumar
    .parse_opts   = proxy_parse_opts,
354 4c793dda M. Mohan Kumar
    .init         = proxy_init,
355 4c793dda M. Mohan Kumar
    .lstat        = proxy_lstat,
356 4c793dda M. Mohan Kumar
    .readlink     = proxy_readlink,
357 4c793dda M. Mohan Kumar
    .close        = proxy_close,
358 4c793dda M. Mohan Kumar
    .closedir     = proxy_closedir,
359 4c793dda M. Mohan Kumar
    .open         = proxy_open,
360 4c793dda M. Mohan Kumar
    .opendir      = proxy_opendir,
361 4c793dda M. Mohan Kumar
    .rewinddir    = proxy_rewinddir,
362 4c793dda M. Mohan Kumar
    .telldir      = proxy_telldir,
363 4c793dda M. Mohan Kumar
    .readdir_r    = proxy_readdir_r,
364 4c793dda M. Mohan Kumar
    .seekdir      = proxy_seekdir,
365 4c793dda M. Mohan Kumar
    .preadv       = proxy_preadv,
366 4c793dda M. Mohan Kumar
    .pwritev      = proxy_pwritev,
367 4c793dda M. Mohan Kumar
    .chmod        = proxy_chmod,
368 4c793dda M. Mohan Kumar
    .mknod        = proxy_mknod,
369 4c793dda M. Mohan Kumar
    .mkdir        = proxy_mkdir,
370 4c793dda M. Mohan Kumar
    .fstat        = proxy_fstat,
371 4c793dda M. Mohan Kumar
    .open2        = proxy_open2,
372 4c793dda M. Mohan Kumar
    .symlink      = proxy_symlink,
373 4c793dda M. Mohan Kumar
    .link         = proxy_link,
374 4c793dda M. Mohan Kumar
    .truncate     = proxy_truncate,
375 4c793dda M. Mohan Kumar
    .rename       = proxy_rename,
376 4c793dda M. Mohan Kumar
    .chown        = proxy_chown,
377 4c793dda M. Mohan Kumar
    .utimensat    = proxy_utimensat,
378 4c793dda M. Mohan Kumar
    .remove       = proxy_remove,
379 4c793dda M. Mohan Kumar
    .fsync        = proxy_fsync,
380 4c793dda M. Mohan Kumar
    .statfs       = proxy_statfs,
381 4c793dda M. Mohan Kumar
    .lgetxattr    = proxy_lgetxattr,
382 4c793dda M. Mohan Kumar
    .llistxattr   = proxy_llistxattr,
383 4c793dda M. Mohan Kumar
    .lsetxattr    = proxy_lsetxattr,
384 4c793dda M. Mohan Kumar
    .lremovexattr = proxy_lremovexattr,
385 4c793dda M. Mohan Kumar
    .name_to_path = proxy_name_to_path,
386 4c793dda M. Mohan Kumar
    .renameat     = proxy_renameat,
387 4c793dda M. Mohan Kumar
    .unlinkat     = proxy_unlinkat,
388 4c793dda M. Mohan Kumar
};