unsigned int fail_pos;
};
+#define RANDOMFAIL_FS(ptr) container_of((ptr), struct randomfail_fs, fs)
+#define RANDOMFAIL_FILE(ptr) container_of((ptr), struct randomfail_fs_file, file)
+#define RANDOMFAIL_ITER(ptr) container_of((ptr), struct randomfail_fs_iter, iter)
+
static struct fs *fs_randomfail_alloc(void)
{
struct randomfail_fs *fs;
fs_randomfail_init(struct fs *_fs, const char *args,
const struct fs_settings *set, const char **error_r)
{
- struct randomfail_fs *fs = (struct randomfail_fs *)_fs;
+ struct randomfail_fs *fs = RANDOMFAIL_FS(_fs);
const char *p, *parent_name, *parent_args, *error;
p = strchr(args, ':');
static void fs_randomfail_free(struct fs *_fs)
{
- struct randomfail_fs *fs = (struct randomfail_fs *)_fs;
+ struct randomfail_fs *fs = RANDOMFAIL_FS(_fs);
fs_deinit(&_fs->parent);
i_free(fs);
fs_randomfail_file_init(struct fs_file *_file, const char *path,
enum fs_open_mode mode, enum fs_open_flags flags)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
file->file.path = i_strdup(path);
file->file.parent = fs_file_init_parent(_file, path, mode | flags);
static void fs_randomfail_file_deinit(struct fs_file *_file)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
fs_file_free(_file);
i_free(file->file.path);
static bool fs_random_fail(struct fs *_fs, struct event *event,
int divider, enum fs_op op)
{
- struct randomfail_fs *fs = (struct randomfail_fs *)_fs;
+ struct randomfail_fs *fs = RANDOMFAIL_FS(_fs);
if (fs->op_probability[op] == 0)
return FALSE;
fs_random_fail_range(struct fs *_fs, struct event *event,
enum fs_op op, uoff_t *offset_r)
{
- struct randomfail_fs *fs = (struct randomfail_fs *)_fs;
+ struct randomfail_fs *fs = RANDOMFAIL_FS(_fs);
if (!fs_random_fail(_fs, event, 1, op))
return FALSE;
enum fs_get_metadata_flags flags,
const ARRAY_TYPE(fs_metadata) **metadata_r)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_METADATA))
static ssize_t fs_randomfail_read(struct fs_file *_file, void *buf, size_t size)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_READ))
static int fs_randomfail_write(struct fs_file *_file, const void *data, size_t size)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_WRITE))
static void fs_randomfail_write_stream(struct fs_file *_file)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
uoff_t offset;
i_assert(_file->output == NULL);
static int fs_randomfail_write_stream_finish(struct fs_file *_file, bool success)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
if (_file->output != NULL) {
if (_file->output == file->super_output)
static int fs_randomfail_exists(struct fs_file *_file)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_EXISTS))
static int fs_randomfail_stat(struct fs_file *_file, struct stat *st_r)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_STAT))
static int fs_randomfail_get_nlinks(struct fs_file *_file, nlink_t *nlinks_r)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_STAT))
static int fs_randomfail_copy(struct fs_file *_src, struct fs_file *_dest)
{
- struct randomfail_fs_file *dest = (struct randomfail_fs_file *)_dest;
+ struct randomfail_fs_file *dest = RANDOMFAIL_FILE(_dest);
int ret;
if (fs_file_random_fail_begin(dest, FS_OP_COPY))
static int fs_randomfail_rename(struct fs_file *_src, struct fs_file *_dest)
{
- struct randomfail_fs_file *dest = (struct randomfail_fs_file *)_dest;
+ struct randomfail_fs_file *dest = RANDOMFAIL_FILE(_dest);
int ret;
if (fs_file_random_fail_begin(dest, FS_OP_RENAME))
static int fs_randomfail_delete(struct fs_file *_file)
{
- struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file;
+ struct randomfail_fs_file *file = RANDOMFAIL_FILE(_file);
int ret;
if (fs_file_random_fail_begin(file, FS_OP_DELETE))
fs_randomfail_iter_init(struct fs_iter *_iter, const char *path,
enum fs_iter_flags flags)
{
- struct randomfail_fs_iter *iter = (struct randomfail_fs_iter *)_iter;
+ struct randomfail_fs_iter *iter = RANDOMFAIL_ITER(_iter);
uoff_t pos;
iter->super = fs_iter_init_parent(_iter, path, flags);
static const char *fs_randomfail_iter_next(struct fs_iter *_iter)
{
- struct randomfail_fs_iter *iter = (struct randomfail_fs_iter *)_iter;
+ struct randomfail_fs_iter *iter = RANDOMFAIL_ITER(_iter);
const char *fname;
if (iter->fail_pos > 0) {
static int fs_randomfail_iter_deinit(struct fs_iter *_iter)
{
- struct randomfail_fs_iter *iter = (struct randomfail_fs_iter *)_iter;
+ struct randomfail_fs_iter *iter = RANDOMFAIL_ITER(_iter);
const char *error;
int ret;