Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion include/ubbd_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define UBBD_BACKEND_H

#include <ubbd_compat.h>
#include <libaio.h>

#ifdef CONFIG_SSH_BACKEND
#include <libssh/sftp.h>
Expand Down Expand Up @@ -31,6 +32,8 @@ struct ubbd_backend_io {
enum ubbd_backend_io_type io_type;
uint64_t offset;
uint32_t len;
int queue_id;
bool sync;
uint32_t iov_cnt;
struct iovec iov[0];
};
Expand Down Expand Up @@ -60,6 +63,8 @@ struct ubbd_backend_ops {
int (*flush) (struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io);
int (*discard) (struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io);
int (*write_zeros) (struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io);
struct ubbd_backend_io* (*create_backend_io)(struct ubbd_backend *ubbd_b, uint32_t iov_cnt);
void (*free_backend_io)(struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io);
};

enum ubbd_backend_status {
Expand Down Expand Up @@ -150,5 +155,8 @@ uint64_t ubbd_backend_size(struct ubbd_backend *ubbd_b);

int ubbd_backend_read(struct ubbd_backend *ubbd_b, uint64_t off, uint64_t size, char *buf);
int ubbd_backend_write(struct ubbd_backend *ubbd_b, uint64_t off, uint64_t size, char *buf);
struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend_io *io, uint32_t off, uint32_t size);
struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io, uint32_t off, uint32_t size);

struct ubbd_backend_io *ubbd_backend_create_backend_io(struct ubbd_backend *ubbd_b, uint32_t iov_cnt);
void ubbd_backend_free_backend_io(struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io);
#endif /* UBBD_BACKEND_H */
1 change: 1 addition & 0 deletions include/ubbd_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ struct ubbd_dev_features {
bool discard;
bool write_zeros;
bool read_only;
bool queue_restart;
};


Expand Down
1 change: 1 addition & 0 deletions include/ubbd_queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ struct ubbd_backend;
struct ubbd_queue {
struct ubbd_backend *ubbd_b;
struct ubbd_uio_info uio_info;
bool no_close_uio;
cpu_set_t cpuset;
int status;
uint32_t se_to_handle;
Expand Down
5 changes: 5 additions & 0 deletions include/ubbd_uio.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,9 @@ struct ubbd_se *ubbd_cmd_head(struct ubbd_uio_info *uio_info);
struct ubbd_se *ubbd_cmd_to_handle(struct ubbd_queue *ubbd_q);
void *ubbd_uio_get_info(struct ubbd_uio_info *uio_info);

static inline bool ubbd_uio_opened(struct ubbd_uio_info *uio_info)
{
return (uio_info->map != NULL);
}

#endif /* UBBD_UIO_H */
2 changes: 1 addition & 1 deletion install_dep.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ source /etc/os-release
case "$ID" in
debian|ubuntu|devuan|elementary|softiron)
echo "ubuntu"
env DEBIAN_FRONTEND=noninteractive apt install -y librbd-dev libc-dev libnl-3-dev libnl-genl-3-dev libcmocka-dev lcov cmake pkg-config libcurl4-openssl-dev libxml2-dev libssl-dev libssh-dev debhelper dpkg-dev libasan5
env DEBIAN_FRONTEND=noninteractive apt install -y librbd-dev libc-dev libnl-3-dev libnl-genl-3-dev libcmocka-dev lcov cmake pkg-config libcurl4-openssl-dev libxml2-dev libssl-dev libssh-dev debhelper dpkg-dev libasan5 libaio-dev
;;
rocky|centos|fedora|rhel|ol|virtuozzo)
echo "centos"
Expand Down
2 changes: 1 addition & 1 deletion lib/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
include ../mk/config.mk
LINKLIBS := -lcurl -lcrypto -lxml2 -lnl-3 -lnl-genl-3 -lpthread -lm -lz
LINKLIBS := -lcurl -lcrypto -lxml2 -lnl-3 -lnl-genl-3 -lpthread -lm -lz -laio

SOURCES := $(shell find ../lib/ -name '*.c' ! -name "ubbd_log_cmdline.c")
ifneq ("$(CONFIG_RBD_BACKEND)", "y")
Expand Down
18 changes: 18 additions & 0 deletions lib/ubbd_backends/ubbd_backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -352,3 +352,21 @@ uint64_t ubbd_backend_size(struct ubbd_backend *ubbd_b)
{
return ubbd_b->dev_size;
}

struct ubbd_backend_io *ubbd_backend_create_backend_io(struct ubbd_backend *ubbd_b, uint32_t iov_cnt)
{
if (ubbd_b->backend_ops->create_backend_io) {
return ubbd_b->backend_ops->create_backend_io(ubbd_b, iov_cnt);
}

return calloc(1, sizeof(struct ubbd_backend_io) + sizeof(struct iovec) * iov_cnt);
}

void ubbd_backend_free_backend_io(struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io)
{
if (ubbd_b->backend_ops->free_backend_io) {
return ubbd_b->backend_ops->free_backend_io(ubbd_b, io);
}

free(io);
}
13 changes: 8 additions & 5 deletions lib/ubbd_backends/ubbd_backend_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ static struct ubbd_backend_io *backend_prepare_io(struct ubbd_backend *ubbd_b,
struct ubbd_backend_io *io;
struct context *ctx;

io = calloc(1, sizeof(struct ubbd_backend_io) + sizeof(struct iovec));
io = ubbd_backend_create_backend_io(ubbd_b, 1);
if (!io) {
ubbd_err("failed to calloc for backend io\n");
return NULL;
Expand All @@ -68,13 +68,15 @@ static struct ubbd_backend_io *backend_prepare_io(struct ubbd_backend *ubbd_b,
io->io_type = type;
io->offset = off;
io->len = len;
io->queue_id = 0;
io->sync = true;
io->iov_cnt = 1;
io->iov[0].iov_base = buf;
io->iov[0].iov_len = len;

return io;
free_io:
free(io);
ubbd_backend_free_backend_io(ubbd_b, io);

return NULL;
}
Expand Down Expand Up @@ -110,7 +112,7 @@ int backend_rw(struct ubbd_backend *ubbd_b, uint64_t off, uint64_t size, char *b
backend_wait_io_done(data);
ret = data->ret;
free_io:
free(io);
ubbd_backend_free_backend_io(ubbd_b, io);
free_data:
free(data);
return ret;
Expand Down Expand Up @@ -153,7 +155,7 @@ static int find_vec(struct ubbd_backend_io *io, uint32_t off, uint32_t *off_in_v
return -1;
}

struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend_io *io, uint32_t off, uint32_t size)
struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend *ubbd_b, struct ubbd_backend_io *io, uint32_t off, uint32_t size)
{
struct ubbd_backend_io *clone_io;
int start_vec, end_vec, vec_count;
Expand All @@ -178,7 +180,7 @@ struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend_io *io, uint32

vec_count = end_vec - start_vec + 1;

clone_io = calloc(1, sizeof(struct ubbd_backend_io) + (sizeof(struct iovec) * vec_count));
clone_io = ubbd_backend_create_backend_io(ubbd_b, vec_count);
if (!clone_io) {
return NULL;
}
Expand All @@ -187,6 +189,7 @@ struct ubbd_backend_io *ubbd_backend_io_clone(struct ubbd_backend_io *io, uint32
clone_io->offset = io->offset + off;
clone_io->len = size;
clone_io->iov_cnt = vec_count;
clone_io->queue_id = io->queue_id;
memcpy(clone_io->iov, io->iov + start_vec, sizeof(struct iovec) * vec_count);
if (start_vec_off) {
clone_io->iov[0].iov_base += start_vec_off;
Expand Down
Loading