root / hw / 9pfs / coxattr.c @ 1de7afc9
History | View | Annotate | Download (2.5 kB)
1 |
|
---|---|
2 |
/*
|
3 |
* Virtio 9p backend
|
4 |
*
|
5 |
* Copyright IBM, Corp. 2011
|
6 |
*
|
7 |
* Authors:
|
8 |
* Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
|
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 "block/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 |
} |