|
|
1.1 root 1:
2: /*
3: * Virtio 9p backend
4: *
5: * Copyright IBM, Corp. 2011
6: *
7: * Authors:
8: * Aneesh Kumar K.V <[email protected]>
9: *
10: * This work is licensed under the terms of the GNU GPL, version 2. See
11: * the COPYING file in the top-level directory.
12: *
13: */
14:
15: #include "fsdev/qemu-fsdev.h"
16: #include "qemu-thread.h"
17: #include "qemu-coroutine.h"
18: #include "virtio-9p-coth.h"
19:
20: int v9fs_co_llistxattr(V9fsPDU *pdu, V9fsPath *path, void *value, size_t size)
21: {
22: int err;
23: V9fsState *s = pdu->s;
24:
25: if (v9fs_request_cancelled(pdu)) {
26: return -EINTR;
27: }
28: v9fs_path_read_lock(s);
29: v9fs_co_run_in_worker(
30: {
31: err = s->ops->llistxattr(&s->ctx, path, value, size);
32: if (err < 0) {
33: err = -errno;
34: }
35: });
36: v9fs_path_unlock(s);
37: return err;
38: }
39:
40: int v9fs_co_lgetxattr(V9fsPDU *pdu, V9fsPath *path,
41: V9fsString *xattr_name,
42: void *value, size_t size)
43: {
44: int err;
45: V9fsState *s = pdu->s;
46:
47: if (v9fs_request_cancelled(pdu)) {
48: return -EINTR;
49: }
50: v9fs_path_read_lock(s);
51: v9fs_co_run_in_worker(
52: {
53: err = s->ops->lgetxattr(&s->ctx, path,
54: xattr_name->data,
55: value, size);
56: if (err < 0) {
57: err = -errno;
58: }
59: });
60: v9fs_path_unlock(s);
61: return err;
62: }
63:
64: int v9fs_co_lsetxattr(V9fsPDU *pdu, V9fsPath *path,
65: V9fsString *xattr_name, void *value,
66: size_t size, int flags)
67: {
68: int err;
69: V9fsState *s = pdu->s;
70:
71: if (v9fs_request_cancelled(pdu)) {
72: return -EINTR;
73: }
74: v9fs_path_read_lock(s);
75: v9fs_co_run_in_worker(
76: {
77: err = s->ops->lsetxattr(&s->ctx, path,
78: xattr_name->data, value,
79: size, flags);
80: if (err < 0) {
81: err = -errno;
82: }
83: });
84: v9fs_path_unlock(s);
85: return err;
86: }
87:
88: int v9fs_co_lremovexattr(V9fsPDU *pdu, V9fsPath *path,
89: V9fsString *xattr_name)
90: {
91: int err;
92: V9fsState *s = pdu->s;
93:
94: if (v9fs_request_cancelled(pdu)) {
95: return -EINTR;
96: }
97: v9fs_path_read_lock(s);
98: v9fs_co_run_in_worker(
99: {
100: err = s->ops->lremovexattr(&s->ctx, path, xattr_name->data);
101: if (err < 0) {
102: err = -errno;
103: }
104: });
105: v9fs_path_unlock(s);
106: return err;
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.