|
|
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.