Initial commit
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
148
modules/cas_cache/volume/vol_blk_utils.h
Normal file
148
modules/cas_cache/volume/vol_blk_utils.h
Normal file
@@ -0,0 +1,148 @@
|
||||
/*
|
||||
* Copyright(c) 2012-2019 Intel Corporation
|
||||
* SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
*/
|
||||
|
||||
#ifndef __VOL_BLK_UTILS_H__
|
||||
#define __VOL_BLK_UTILS_H__
|
||||
|
||||
#include "obj_blk.h"
|
||||
#include "context.h"
|
||||
|
||||
static inline bool cas_blk_is_flush_io(unsigned long flags)
|
||||
{
|
||||
if ((flags & OCF_WRITE_FLUSH) == OCF_WRITE_FLUSH)
|
||||
return true;
|
||||
|
||||
if ((flags & OCF_WRITE_FLUSH_FUA) == OCF_WRITE_FLUSH_FUA)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
struct blkio {
|
||||
int error;
|
||||
atomic_t rq_remaning;
|
||||
atomic_t ref_counter;
|
||||
int32_t dirty;
|
||||
int32_t dir;
|
||||
|
||||
struct blk_data *data; /* IO data buffer */
|
||||
|
||||
/* BIO vector iterator for sending IO */
|
||||
struct bio_vec_iter iter;
|
||||
};
|
||||
|
||||
static inline struct blkio *cas_io_to_blkio(struct ocf_io *io)
|
||||
{
|
||||
return ocf_io_get_priv(io);
|
||||
}
|
||||
|
||||
int cas_blk_io_set_data(struct ocf_io *io, ctx_data_t *data,
|
||||
uint32_t offset);
|
||||
ctx_data_t *cas_blk_io_get_data(struct ocf_io *io);
|
||||
|
||||
int cas_blk_identify_type_by_bdev(struct block_device *bdev,
|
||||
uint8_t *type, struct atomic_dev_params *atomic_params);
|
||||
|
||||
int cas_blk_open_volume_by_bdev(ocf_volume_t *vol,
|
||||
struct block_device *bdev);
|
||||
void cas_blk_close_volume(ocf_volume_t vol);
|
||||
|
||||
int cas_blk_identify_type(const char *path, uint8_t *type);
|
||||
|
||||
int cas_blk_identify_type_atomic(const char *path, uint8_t *type,
|
||||
struct atomic_dev_params *atomic_params);
|
||||
|
||||
static inline void cas_io_iter_init(struct bio_vec_iter *iter,
|
||||
struct bio_vec *vec, uint32_t vec_size)
|
||||
{
|
||||
iter->vec = iter->ivec = vec;
|
||||
iter->vec_size = vec_size;
|
||||
iter->idx = 0;
|
||||
iter->offset = vec->bv_offset;
|
||||
iter->len = vec->bv_len;
|
||||
}
|
||||
|
||||
static inline void cas_io_iter_set(struct bio_vec_iter *iter,
|
||||
struct bio_vec *vec, uint32_t vec_size,
|
||||
uint32_t idx, uint32_t offset, uint32_t len)
|
||||
{
|
||||
iter->vec = vec;
|
||||
iter->vec_size = vec_size;
|
||||
iter->idx = idx;
|
||||
iter->offset = offset;
|
||||
iter->len = len;
|
||||
|
||||
if (iter->idx < vec_size) {
|
||||
iter->ivec = &vec[iter->idx];
|
||||
} else {
|
||||
iter->ivec = NULL;
|
||||
WARN(1, "Setting offset out of BIO vector");
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cas_io_iter_copy_set(struct bio_vec_iter *dst,
|
||||
struct bio_vec_iter *src)
|
||||
{
|
||||
dst->vec = src->vec;
|
||||
dst->vec_size = src->vec_size;
|
||||
dst->idx = src->idx;
|
||||
dst->offset = src->offset;
|
||||
dst->len = src->len;
|
||||
dst->ivec = src->ivec;
|
||||
}
|
||||
|
||||
static inline bool cas_io_iter_is_next(struct bio_vec_iter *iter)
|
||||
{
|
||||
return iter->idx < iter->vec_size ? true : false;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
static inline uint32_t cas_io_iter_size_done(struct bio_vec_iter *iter)
|
||||
{
|
||||
return iter->idx;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
static inline uint32_t cas_io_iter_size_left(struct bio_vec_iter *iter)
|
||||
{
|
||||
if (iter->idx < iter->vec_size)
|
||||
return iter->vec_size - iter->idx;
|
||||
return 0;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
static inline uint32_t cas_io_iter_current_offset(struct bio_vec_iter *iter)
|
||||
{
|
||||
return iter->idx < iter->vec_size ? iter->offset : 0;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
static inline uint32_t cas_io_iter_current_length(struct bio_vec_iter *iter)
|
||||
{
|
||||
return iter->idx < iter->vec_size ? iter->len : 0;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
static inline struct page *cas_io_iter_current_page(struct bio_vec_iter *iter)
|
||||
{
|
||||
return iter->idx < iter->vec_size ? iter->ivec->bv_page : NULL;
|
||||
/* TODO UNITTEST */
|
||||
}
|
||||
|
||||
uint32_t cas_io_iter_cpy(struct bio_vec_iter *dst, struct bio_vec_iter *src,
|
||||
uint32_t bytes);
|
||||
|
||||
uint32_t cas_io_iter_cpy_from_data(struct bio_vec_iter *dst,
|
||||
const void *src, uint32_t bytes);
|
||||
|
||||
uint32_t cas_io_iter_cpy_to_data(void *dst, struct bio_vec_iter *src,
|
||||
uint32_t bytes);
|
||||
|
||||
uint32_t cas_io_iter_move(struct bio_vec_iter *iter,
|
||||
uint32_t bytes);
|
||||
|
||||
uint32_t cas_io_iter_zero(struct bio_vec_iter *iter, uint32_t bytes);
|
||||
|
||||
#endif /* __VOL_BLK_UTILS_H__ */
|
Reference in New Issue
Block a user