root / hw / 9pfs / coxattr.c @ 1de7afc9
History | View | Annotate | Download (2.5 kB)
1 | 1ceffa54 | Aneesh Kumar K.V | |
---|---|---|---|
2 | 1ceffa54 | Aneesh Kumar K.V | /*
|
3 | 1ceffa54 | Aneesh Kumar K.V | * Virtio 9p backend
|
4 | 1ceffa54 | Aneesh Kumar K.V | *
|
5 | 1ceffa54 | Aneesh Kumar K.V | * Copyright IBM, Corp. 2011
|
6 | 1ceffa54 | Aneesh Kumar K.V | *
|
7 | 1ceffa54 | Aneesh Kumar K.V | * Authors:
|
8 | 1ceffa54 | Aneesh Kumar K.V | * Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
|
9 | 1ceffa54 | Aneesh Kumar K.V | *
|
10 | 1ceffa54 | Aneesh Kumar K.V | * This work is licensed under the terms of the GNU GPL, version 2. See
|
11 | 1ceffa54 | Aneesh Kumar K.V | * the COPYING file in the top-level directory.
|
12 | 1ceffa54 | Aneesh Kumar K.V | *
|
13 | 1ceffa54 | Aneesh Kumar K.V | */
|
14 | 1ceffa54 | Aneesh Kumar K.V | |
15 | 1ceffa54 | Aneesh Kumar K.V | #include "fsdev/qemu-fsdev.h" |
16 | 1de7afc9 | Paolo Bonzini | #include "qemu/thread.h" |
17 | 737e150e | Paolo Bonzini | #include "block/coroutine.h" |
18 | 1ceffa54 | Aneesh Kumar K.V | #include "virtio-9p-coth.h" |
19 | 1ceffa54 | Aneesh Kumar K.V | |
20 | bccacf6c | Aneesh Kumar K.V | int v9fs_co_llistxattr(V9fsPDU *pdu, V9fsPath *path, void *value, size_t size) |
21 | 1ceffa54 | Aneesh Kumar K.V | { |
22 | 1ceffa54 | Aneesh Kumar K.V | int err;
|
23 | bccacf6c | Aneesh Kumar K.V | V9fsState *s = pdu->s; |
24 | 1ceffa54 | Aneesh Kumar K.V | |
25 | bccacf6c | Aneesh Kumar K.V | if (v9fs_request_cancelled(pdu)) {
|
26 | bccacf6c | Aneesh Kumar K.V | return -EINTR;
|
27 | bccacf6c | Aneesh Kumar K.V | } |
28 | 532decb7 | Aneesh Kumar K.V | v9fs_path_read_lock(s); |
29 | 1ceffa54 | Aneesh Kumar K.V | v9fs_co_run_in_worker( |
30 | 1ceffa54 | Aneesh Kumar K.V | { |
31 | 2289be19 | Aneesh Kumar K.V | err = s->ops->llistxattr(&s->ctx, path, value, size); |
32 | 1ceffa54 | Aneesh Kumar K.V | if (err < 0) { |
33 | 1ceffa54 | Aneesh Kumar K.V | err = -errno; |
34 | 1ceffa54 | Aneesh Kumar K.V | } |
35 | 1ceffa54 | Aneesh Kumar K.V | }); |
36 | 532decb7 | Aneesh Kumar K.V | v9fs_path_unlock(s); |
37 | 1ceffa54 | Aneesh Kumar K.V | return err;
|
38 | 1ceffa54 | Aneesh Kumar K.V | } |
39 | 1ceffa54 | Aneesh Kumar K.V | |
40 | bccacf6c | Aneesh Kumar K.V | int v9fs_co_lgetxattr(V9fsPDU *pdu, V9fsPath *path,
|
41 | 1ceffa54 | Aneesh Kumar K.V | V9fsString *xattr_name, |
42 | 1ceffa54 | Aneesh Kumar K.V | void *value, size_t size)
|
43 | 1ceffa54 | Aneesh Kumar K.V | { |
44 | 1ceffa54 | Aneesh Kumar K.V | int err;
|
45 | bccacf6c | Aneesh Kumar K.V | V9fsState *s = pdu->s; |
46 | 1ceffa54 | Aneesh Kumar K.V | |
47 | bccacf6c | Aneesh Kumar K.V | if (v9fs_request_cancelled(pdu)) {
|
48 | bccacf6c | Aneesh Kumar K.V | return -EINTR;
|
49 | bccacf6c | Aneesh Kumar K.V | } |
50 | 532decb7 | Aneesh Kumar K.V | v9fs_path_read_lock(s); |
51 | 1ceffa54 | Aneesh Kumar K.V | v9fs_co_run_in_worker( |
52 | 1ceffa54 | Aneesh Kumar K.V | { |
53 | 2289be19 | Aneesh Kumar K.V | err = s->ops->lgetxattr(&s->ctx, path, |
54 | 1ceffa54 | Aneesh Kumar K.V | xattr_name->data, |
55 | 1ceffa54 | Aneesh Kumar K.V | value, size); |
56 | 1ceffa54 | Aneesh Kumar K.V | if (err < 0) { |
57 | 1ceffa54 | Aneesh Kumar K.V | err = -errno; |
58 | 1ceffa54 | Aneesh Kumar K.V | } |
59 | 1ceffa54 | Aneesh Kumar K.V | }); |
60 | 532decb7 | Aneesh Kumar K.V | v9fs_path_unlock(s); |
61 | 1ceffa54 | Aneesh Kumar K.V | return err;
|
62 | 1ceffa54 | Aneesh Kumar K.V | } |
63 | bed4352c | Aneesh Kumar K.V | |
64 | bccacf6c | Aneesh Kumar K.V | int v9fs_co_lsetxattr(V9fsPDU *pdu, V9fsPath *path,
|
65 | bed4352c | Aneesh Kumar K.V | V9fsString *xattr_name, void *value,
|
66 | bed4352c | Aneesh Kumar K.V | size_t size, int flags)
|
67 | bed4352c | Aneesh Kumar K.V | { |
68 | bed4352c | Aneesh Kumar K.V | int err;
|
69 | bccacf6c | Aneesh Kumar K.V | V9fsState *s = pdu->s; |
70 | bed4352c | Aneesh Kumar K.V | |
71 | bccacf6c | Aneesh Kumar K.V | if (v9fs_request_cancelled(pdu)) {
|
72 | bccacf6c | Aneesh Kumar K.V | return -EINTR;
|
73 | bccacf6c | Aneesh Kumar K.V | } |
74 | 532decb7 | Aneesh Kumar K.V | v9fs_path_read_lock(s); |
75 | bed4352c | Aneesh Kumar K.V | v9fs_co_run_in_worker( |
76 | bed4352c | Aneesh Kumar K.V | { |
77 | 2289be19 | Aneesh Kumar K.V | err = s->ops->lsetxattr(&s->ctx, path, |
78 | bed4352c | Aneesh Kumar K.V | xattr_name->data, value, |
79 | bed4352c | Aneesh Kumar K.V | size, flags); |
80 | bed4352c | Aneesh Kumar K.V | if (err < 0) { |
81 | bed4352c | Aneesh Kumar K.V | err = -errno; |
82 | bed4352c | Aneesh Kumar K.V | } |
83 | bed4352c | Aneesh Kumar K.V | }); |
84 | 532decb7 | Aneesh Kumar K.V | v9fs_path_unlock(s); |
85 | bed4352c | Aneesh Kumar K.V | return err;
|
86 | bed4352c | Aneesh Kumar K.V | } |
87 | bed4352c | Aneesh Kumar K.V | |
88 | bccacf6c | Aneesh Kumar K.V | int v9fs_co_lremovexattr(V9fsPDU *pdu, V9fsPath *path,
|
89 | bed4352c | Aneesh Kumar K.V | V9fsString *xattr_name) |
90 | bed4352c | Aneesh Kumar K.V | { |
91 | bed4352c | Aneesh Kumar K.V | int err;
|
92 | bccacf6c | Aneesh Kumar K.V | V9fsState *s = pdu->s; |
93 | bed4352c | Aneesh Kumar K.V | |
94 | bccacf6c | Aneesh Kumar K.V | if (v9fs_request_cancelled(pdu)) {
|
95 | bccacf6c | Aneesh Kumar K.V | return -EINTR;
|
96 | bccacf6c | Aneesh Kumar K.V | } |
97 | 532decb7 | Aneesh Kumar K.V | v9fs_path_read_lock(s); |
98 | bed4352c | Aneesh Kumar K.V | v9fs_co_run_in_worker( |
99 | bed4352c | Aneesh Kumar K.V | { |
100 | 2289be19 | Aneesh Kumar K.V | err = s->ops->lremovexattr(&s->ctx, path, xattr_name->data); |
101 | bed4352c | Aneesh Kumar K.V | if (err < 0) { |
102 | bed4352c | Aneesh Kumar K.V | err = -errno; |
103 | bed4352c | Aneesh Kumar K.V | } |
104 | bed4352c | Aneesh Kumar K.V | }); |
105 | 532decb7 | Aneesh Kumar K.V | v9fs_path_unlock(s); |
106 | bed4352c | Aneesh Kumar K.V | return err;
|
107 | bed4352c | Aneesh Kumar K.V | } |