Statistics
| Branch: | Revision:

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
}