Mercurial > nomad
changeset 890:aa5470a5ef8a
objstore: move objstore_{read,write} to obj_rw.c
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon, 19 Dec 2022 19:39:43 -0500 |
parents | 45a236e09b43 |
children | 77a35abc6a24 |
files | src/objstore/obj_ops.c src/objstore/obj_rw.c |
diffstat | 2 files changed, 104 insertions(+), 104 deletions(-) [+] |
line wrap: on
line diff
--- a/src/objstore/obj_ops.c Mon Dec 19 19:38:40 2022 -0500 +++ b/src/objstore/obj_ops.c Mon Dec 19 19:39:43 2022 -0500 @@ -166,110 +166,6 @@ return ret; } -ssize_t objstore_read(struct objstore_open_obj_info *open, void *buf, - size_t len, uint64_t offset) -{ - struct obj *obj; - ssize_t ret; - - if (!open || !buf) - return -EINVAL; - - if (len > (SIZE_MAX / 2)) - return -EOVERFLOW; - - obj = open->obj; - - /* nothing to do */ - if (!len) - return 0; - - MXLOCK(&obj->lock); - if (NATTR_ISDIR(open->ver->attrs.mode)) - /* TODO: do we need to check for other types? */ - ret = -EISDIR; - else - ret = obj_read(open->ver, buf, len, offset); - MXUNLOCK(&obj->lock); - - return ret; -} - -ssize_t objstore_write(struct objstore_open_obj_info *open, const void *buf, - size_t len, uint64_t offset) -{ - struct objver *newver; - struct obj *obj; - struct txn *txn; - ssize_t ret; - - if (!open || !buf) - return -EINVAL; - - if (len > (SIZE_MAX / 2)) - return -EOVERFLOW; - - obj = open->obj; - - if (open->qualified) - return -EROFS; - - /* nothing to do */ - if (!len) - return 0; - - MXLOCK(&obj->lock); - - if (NATTR_ISDIR(open->ver->attrs.mode)) { - /* TODO: do we need to check for other types? */ - ret = -EISDIR; - goto err; - } - - /* - * fire off the txn - */ - txn = txn_begin(obj->clone); - if (IS_ERR(txn)) { - ret = PTR_ERR(txn); - goto err; - } - - newver = obj_cow(txn, open); - if (IS_ERR(newver)) { - ret = PTR_ERR(newver); - goto err_txn; - } - - /* extend the file if necessary */ - if ((offset + len) > newver->attrs.size) { - struct nattr attrs = { - .size = offset + len, - }; - - obj_setattr(txn, newver, &attrs, OBJ_ATTR_SIZE); - } - - ret = obj_write(txn, newver, buf, len, offset); - -err_txn: - if (ret < 0) { - txn_abort(txn); - } else { - int ret2; - - ret2 = txn_commit(txn); - if (ret2) - ret = ret2; - } - newver = NULL; /* prevent accidental use */ - -err: - MXUNLOCK(&obj->lock); - - return ret; -} - /* * Directory operations *
--- a/src/objstore/obj_rw.c Mon Dec 19 19:38:40 2022 -0500 +++ b/src/objstore/obj_rw.c Mon Dec 19 19:39:43 2022 -0500 @@ -173,3 +173,107 @@ */ return written ? written : ret; } + +ssize_t objstore_read(struct objstore_open_obj_info *open, void *buf, + size_t len, uint64_t offset) +{ + struct obj *obj; + ssize_t ret; + + if (!open || !buf) + return -EINVAL; + + if (len > (SIZE_MAX / 2)) + return -EOVERFLOW; + + obj = open->obj; + + /* nothing to do */ + if (!len) + return 0; + + MXLOCK(&obj->lock); + if (NATTR_ISDIR(open->ver->attrs.mode)) + /* TODO: do we need to check for other types? */ + ret = -EISDIR; + else + ret = obj_read(open->ver, buf, len, offset); + MXUNLOCK(&obj->lock); + + return ret; +} + +ssize_t objstore_write(struct objstore_open_obj_info *open, const void *buf, + size_t len, uint64_t offset) +{ + struct objver *newver; + struct obj *obj; + struct txn *txn; + ssize_t ret; + + if (!open || !buf) + return -EINVAL; + + if (len > (SIZE_MAX / 2)) + return -EOVERFLOW; + + obj = open->obj; + + if (open->qualified) + return -EROFS; + + /* nothing to do */ + if (!len) + return 0; + + MXLOCK(&obj->lock); + + if (NATTR_ISDIR(open->ver->attrs.mode)) { + /* TODO: do we need to check for other types? */ + ret = -EISDIR; + goto err; + } + + /* + * fire off the txn + */ + txn = txn_begin(obj->clone); + if (IS_ERR(txn)) { + ret = PTR_ERR(txn); + goto err; + } + + newver = obj_cow(txn, open); + if (IS_ERR(newver)) { + ret = PTR_ERR(newver); + goto err_txn; + } + + /* extend the file if necessary */ + if ((offset + len) > newver->attrs.size) { + struct nattr attrs = { + .size = offset + len, + }; + + obj_setattr(txn, newver, &attrs, OBJ_ATTR_SIZE); + } + + ret = obj_write(txn, newver, buf, len, offset); + +err_txn: + if (ret < 0) { + txn_abort(txn); + } else { + int ret2; + + ret2 = txn_commit(txn); + if (ret2) + ret = ret2; + } + newver = NULL; /* prevent accidental use */ + +err: + MXUNLOCK(&obj->lock); + + return ret; +}