diff options
Diffstat (limited to 'xlators/cluster/ec/src')
-rw-r--r-- | xlators/cluster/ec/src/ec-combine.c | 7 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-common.c | 49 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-common.h | 7 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-dir-read.c | 5 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-generic.c | 11 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-heal.c | 4 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-inode-read.c | 19 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-inode-write.c | 36 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-method.c | 8 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-method.h | 4 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec.c | 2 |
11 files changed, 81 insertions, 71 deletions
diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c index 2e5111b38f8..454c2c72c95 100644 --- a/xlators/cluster/ec/src/ec-combine.c +++ b/xlators/cluster/ec/src/ec-combine.c @@ -174,8 +174,11 @@ ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, } if (failed) { gf_msg(fop->xl->name, GF_LOG_WARNING, 0, EC_MSG_IATT_COMBINE_FAIL, - "Failed to combine iatt (inode: %lu-%lu, links: %u-%u, " - "uid: %u-%u, gid: %u-%u, rdev: %lu-%lu, size: %lu-%lu, " + "Failed to combine iatt (inode: %" PRIu64 "-%" PRIu64 + ", " + "links: %u-%u, uid: %u-%u, gid: %u-%u, " + "rdev: %" PRIu64 "-%" PRIu64 ", size: %" PRIu64 "-%" PRIu64 + ", " "mode: %o-%o)", dst[i].ia_ino, src[i].ia_ino, dst[i].ia_nlink, src[i].ia_nlink, dst[i].ia_uid, src[i].ia_uid, dst[i].ia_gid, diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index 0eee0a3363f..737f7fda882 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -132,22 +132,23 @@ out: loc_wipe(&loc); } -off_t -ec_range_end_get(off_t fl_start, size_t fl_size) -{ - off_t fl_end = 0; - switch (fl_size) { - case 0: - return fl_start; - case LLONG_MAX: /*Infinity*/ - return LLONG_MAX; - default: - fl_end = fl_start + fl_size - 1; - if (fl_end < 0) /*over-flow*/ - return LLONG_MAX; - else - return fl_end; +static off_t +ec_range_end_get(off_t fl_start, uint64_t fl_size) +{ + if (fl_size > 0) { + if (fl_size >= EC_RANGE_FULL) { + /* Infinity */ + fl_start = LLONG_MAX; + } else { + fl_start += fl_size - 1; + if (fl_start < 0) { + /* Overflow */ + fl_start = LLONG_MAX; + } + } } + + return fl_start; } static gf_boolean_t @@ -648,7 +649,7 @@ ec_child_select(ec_fop_data_t *fop) if ((fop->mask & ~ec->xl_up) != 0) { gf_msg(fop->xl->name, GF_LOG_WARNING, 0, EC_MSG_OP_EXEC_UNAVAIL, "Executing operation with " - "some subvolumes unavailable. (%lX). %s ", + "some subvolumes unavailable. (%" PRIXPTR "). %s ", fop->mask & ~ec->xl_up, ec_msg_str(fop)); fop->mask &= ec->xl_up; } @@ -870,7 +871,7 @@ ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc) lock = mem_get0(ec->lock_pool); if (lock != NULL) { - lock->good_mask = -1ULL; + lock->good_mask = UINTPTR_MAX; INIT_LIST_HEAD(&lock->owners); INIT_LIST_HEAD(&lock->waiting); INIT_LIST_HEAD(&lock->frozen); @@ -903,9 +904,9 @@ ec_lock_compare(ec_lock_t *lock1, ec_lock_t *lock2) return gf_uuid_compare(lock1->loc.gfid, lock2->loc.gfid); } -void +static void ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, loc_t *base, - off_t fl_start, size_t fl_size) + off_t fl_start, uint64_t fl_size) { ec_lock_link_t *link; @@ -945,9 +946,9 @@ ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, loc_t *base, lock->refs_pending++; } -void +static void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, - loc_t *base, off_t fl_start, size_t fl_size) + loc_t *base, off_t fl_start, uint64_t fl_size) { ec_lock_t *lock = NULL; ec_inode_t *ctx; @@ -1019,7 +1020,7 @@ unlock: void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, - off_t fl_start, size_t fl_size) + off_t fl_start, uint64_t fl_size) { ec_lock_prepare_inode_internal(fop, loc, flags, NULL, fl_start, fl_size); } @@ -1048,14 +1049,14 @@ ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, base = NULL; } - ec_lock_prepare_inode_internal(fop, &tmp, flags, base, 0, LLONG_MAX); + ec_lock_prepare_inode_internal(fop, &tmp, flags, base, 0, EC_RANGE_FULL); loc_wipe(&tmp); } void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, off_t fl_start, - size_t fl_size) + uint64_t fl_size) { loc_t loc; int32_t err; diff --git a/xlators/cluster/ec/src/ec-common.h b/xlators/cluster/ec/src/ec-common.h index bea0c045a47..bf41c0086f8 100644 --- a/xlators/cluster/ec/src/ec-common.h +++ b/xlators/cluster/ec/src/ec-common.h @@ -95,6 +95,9 @@ enum _ec_xattrop_flags { #define EC_STATE_HEAL_POST_INODELK_UNLOCK 217 #define EC_STATE_HEAL_DISPATCH 218 +/* Value to cover the full range of a file */ +#define EC_RANGE_FULL ((uint64_t)LLONG_MAX + 1) + gf_boolean_t ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk); void @@ -120,13 +123,13 @@ ec_cbk_set_error(ec_cbk_data_t *cbk, int32_t error, gf_boolean_t ro); void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, - off_t fl_start, size_t fl_size); + off_t fl_start, uint64_t fl_size); void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, uint32_t flags); void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, off_t fl_start, - size_t fl_size); + uint64_t fl_size); void ec_lock(ec_fop_data_t *fop); void diff --git a/xlators/cluster/ec/src/ec-dir-read.c b/xlators/cluster/ec/src/ec-dir-read.c index 8db92b9d92d..ec4cefb1e78 100644 --- a/xlators/cluster/ec/src/ec-dir-read.c +++ b/xlators/cluster/ec/src/ec-dir-read.c @@ -142,7 +142,7 @@ ec_manager_opendir(ec_fop_data_t *fop, int32_t state) case EC_STATE_LOCK: ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -427,7 +427,8 @@ ec_manager_readdir(ec_fop_data_t *fop, int32_t state) } fop->mask &= 1ULL << idx; } else { - ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, + EC_RANGE_FULL); ec_lock(fop); } diff --git a/xlators/cluster/ec/src/ec-generic.c b/xlators/cluster/ec/src/ec-generic.c index d12481bdc18..89e72540916 100644 --- a/xlators/cluster/ec/src/ec-generic.c +++ b/xlators/cluster/ec/src/ec-generic.c @@ -83,7 +83,7 @@ ec_manager_flush(ec_fop_data_t *fop, int32_t state) switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, 0, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, 0, 0, EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -289,7 +289,7 @@ ec_manager_fsync(ec_fop_data_t *fop, int32_t state) switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -484,7 +484,7 @@ ec_manager_fsyncdir(ec_fop_data_t *fop, int32_t state) switch (state) { case EC_STATE_INIT: case EC_STATE_LOCK: - ec_lock_prepare_fd(fop, fop->fd, 0, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, 0, 0, EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -1182,9 +1182,10 @@ ec_manager_xattrop(ec_fop_data_t *fop, int32_t state) case EC_STATE_LOCK: if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_UPDATE_META, 0, - LLONG_MAX); + EC_RANGE_FULL); } else { - ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META, 0, + EC_RANGE_FULL); } ec_lock(fop); diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index 229c0683d91..9eb5b856932 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -332,7 +332,7 @@ ec_fheal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, ec_fd_t *ctx = ec_fd_get(fd, this); if (ctx != NULL) { - gf_msg_trace("ec", 0, "FHEAL ctx: flags=%X, open=%lX", ctx->flags, + gf_msg_trace("ec", 0, "FHEAL ctx: flags=%X, open=%" PRIXPTR, ctx->flags, ctx->open); ec_heal(frame, this, target, minimum, func, data, &ctx->loc, partial, xdata); @@ -2484,7 +2484,7 @@ ec_heal_do(xlator_t *this, void *data, loc_t *loc, int32_t partial) if (ret == 0) { gf_msg_debug(this->name, 0, "%s: name heal " - "successful on %lX", + "successful on %" PRIXPTR, loc->path, ec_char_array_to_mask(participants, ec->nodes)); } else { diff --git a/xlators/cluster/ec/src/ec-inode-read.c b/xlators/cluster/ec/src/ec-inode-read.c index 7a8b174bbed..c02d5401439 100644 --- a/xlators/cluster/ec/src/ec-inode-read.c +++ b/xlators/cluster/ec/src/ec-inode-read.c @@ -74,7 +74,7 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state) case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -301,10 +301,10 @@ ec_manager_getxattr(ec_fop_data_t *fop, int32_t state) SLEN(GF_XATTR_CLRLK_CMD)) != 0)) { if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); } else { ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); } ec_lock(fop); } @@ -1008,7 +1008,7 @@ ec_manager_readlink(ec_fop_data_t *fop, int32_t state) case EC_STATE_INIT: case EC_STATE_LOCK: ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -1131,7 +1131,7 @@ ec_readv_rebuild(ec_t *ec, ec_fop_data_t *fop, ec_cbk_data_t *cbk) ec_cbk_data_t *ans = NULL; struct iobref *iobref = NULL; void *ptr; - size_t fsize = 0, size = 0, max = 0; + uint64_t fsize = 0, size = 0, max = 0; int32_t pos, err = -ENOMEM; if (cbk->op_ret < 0) { @@ -1536,7 +1536,7 @@ int32_t ec_manager_seek(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk; - size_t size; + uint64_t size; switch (state) { case EC_STATE_INIT: @@ -1548,7 +1548,7 @@ ec_manager_seek(ec_fop_data_t *fop, int32_t state) case EC_STATE_LOCK: ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, fop->offset, - LLONG_MAX); + EC_RANGE_FULL); ec_lock(fop); return EC_STATE_DISPATCH; @@ -1764,9 +1764,10 @@ ec_manager_stat(ec_fop_data_t *fop, int32_t state) case EC_STATE_LOCK: if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); } else { - ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, LLONG_MAX); + ec_lock_prepare_fd(fop, fop->fd, EC_QUERY_INFO, 0, + EC_RANGE_FULL); } ec_lock(fop); diff --git a/xlators/cluster/ec/src/ec-inode-write.c b/xlators/cluster/ec/src/ec-inode-write.c index ffdac632683..b915a992a00 100644 --- a/xlators/cluster/ec/src/ec-inode-write.c +++ b/xlators/cluster/ec/src/ec-inode-write.c @@ -68,8 +68,8 @@ out: return 0; } -int32_t -ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, size_t size) +static int32_t +ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, uint64_t size) { struct iobref *iobref = NULL; struct iobuf *iobuf = NULL; @@ -219,10 +219,10 @@ ec_manager_xattr(ec_fop_data_t *fop, int32_t state) if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_UPDATE_META | EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); } else { ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META | EC_QUERY_INFO, - 0, LLONG_MAX); + 0, EC_RANGE_FULL); } ec_lock(fop); @@ -455,10 +455,10 @@ ec_manager_setattr(ec_fop_data_t *fop, int32_t state) if (fop->fd == NULL) { ec_lock_prepare_inode(fop, &fop->loc[0], EC_UPDATE_META | EC_QUERY_INFO, 0, - LLONG_MAX); + EC_RANGE_FULL); } else { ec_lock_prepare_fd(fop, fop->fd, EC_UPDATE_META | EC_QUERY_INFO, - 0, LLONG_MAX); + 0, EC_RANGE_FULL); } ec_lock(fop); @@ -1101,8 +1101,8 @@ ec_update_discard_write(ec_fop_data_t *fop, uintptr_t mask) ec_t *ec = fop->xl->private; off_t off_head = 0; off_t off_tail = 0; - size_t size_head = 0; - size_t size_tail = 0; + uint64_t size_head = 0; + uint64_t size_tail = 0; int error = 0; off_head = fop->offset * ec->fragments - fop->int32; @@ -1172,7 +1172,7 @@ ec_manager_discard(ec_fop_data_t *fop, int32_t state) { ec_cbk_data_t *cbk = NULL; off_t fl_start = 0; - size_t fl_size = 0; + uint64_t fl_size = 0; switch (state) { case EC_STATE_INIT: @@ -1341,7 +1341,7 @@ int32_t ec_update_truncate_write(ec_fop_data_t *fop, uintptr_t mask) { ec_t *ec = fop->xl->private; - size_t size = fop->offset * ec->fragments - fop->user_size; + uint64_t size = fop->offset * ec->fragments - fop->user_size; return ec_update_write(fop, mask, fop->user_size, size); } @@ -1420,12 +1420,12 @@ ec_manager_truncate(ec_fop_data_t *fop, int32_t state) ec_lock_prepare_inode( fop, &fop->loc[0], EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, - fop->offset, LLONG_MAX); + fop->offset, EC_RANGE_FULL); } else { ec_lock_prepare_fd( fop, fop->fd, EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO, - fop->offset, LLONG_MAX); + fop->offset, EC_RANGE_FULL); } ec_lock(fop); @@ -1739,7 +1739,7 @@ ec_writev_merge_tail(call_frame_t *frame, void *cookie, xlator_t *this, { ec_t *ec = this->private; ec_fop_data_t *fop = frame->local; - size_t size, base, tmp; + uint64_t size, base, tmp; if (op_ret >= 0) { tmp = 0; @@ -1772,7 +1772,7 @@ ec_writev_merge_head(call_frame_t *frame, void *cookie, xlator_t *this, { ec_t *ec = this->private; ec_fop_data_t *fop = frame->local; - size_t size, base; + uint64_t size, base; if (op_ret >= 0) { size = fop->head; @@ -1884,7 +1884,7 @@ out: static void ec_merge_stripe_head_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) { - size_t head, size; + uint32_t head, size; head = fop->head; memcpy(fop->vector[0].iov_base, stripe->data, head); @@ -1900,7 +1900,7 @@ ec_merge_stripe_head_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) static void ec_merge_stripe_tail_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe) { - size_t head, tail; + uint32_t head, tail; off_t offset; offset = fop->user_size + fop->head; @@ -2117,7 +2117,7 @@ ec_manager_writev(ec_fop_data_t *fop, int32_t state) ec_fd_t *ctx = NULL; ec_t *ec = fop->xl->private; off_t fl_start = 0; - size_t fl_size = LLONG_MAX; + uint64_t fl_size = LONG_MAX; switch (state) { case EC_STATE_INIT: @@ -2163,7 +2163,7 @@ ec_manager_writev(ec_fop_data_t *fop, int32_t state) cbk = ec_fop_prepare_answer(fop, _gf_false); if (cbk != NULL) { ec_t *ec = fop->xl->private; - size_t size; + uint64_t size; ec_iatt_rebuild(fop->xl->private, cbk->iatt, 2, cbk->count); diff --git a/xlators/cluster/ec/src/ec-method.c b/xlators/cluster/ec/src/ec-method.c index 3aff6b096bd..55faed0b193 100644 --- a/xlators/cluster/ec/src/ec-method.c +++ b/xlators/cluster/ec/src/ec-method.c @@ -391,10 +391,10 @@ ec_method_update(xlator_t *xl, ec_matrix_list_t *list, const char *gen) } void -ec_method_encode(ec_matrix_list_t *list, size_t size, void *in, void **out) +ec_method_encode(ec_matrix_list_t *list, uint64_t size, void *in, void **out) { ec_matrix_t *matrix; - size_t pos; + uint64_t pos; uint32_t i; matrix = list->encode; @@ -408,11 +408,11 @@ ec_method_encode(ec_matrix_list_t *list, size_t size, void *in, void **out) } int32_t -ec_method_decode(ec_matrix_list_t *list, size_t size, uintptr_t mask, +ec_method_decode(ec_matrix_list_t *list, uint64_t size, uintptr_t mask, uint32_t *rows, void **in, void *out) { ec_matrix_t *matrix; - size_t pos; + uint64_t pos; uint32_t i; matrix = ec_method_matrix_get(list, mask, rows); diff --git a/xlators/cluster/ec/src/ec-method.h b/xlators/cluster/ec/src/ec-method.h index 3d6393bed06..ca33f4ffdce 100644 --- a/xlators/cluster/ec/src/ec-method.h +++ b/xlators/cluster/ec/src/ec-method.h @@ -41,10 +41,10 @@ int32_t ec_method_update(xlator_t *xl, ec_matrix_list_t *list, const char *gen); void -ec_method_encode(ec_matrix_list_t *list, size_t size, void *in, void **out); +ec_method_encode(ec_matrix_list_t *list, uint64_t size, void *in, void **out); int32_t -ec_method_decode(ec_matrix_list_t *list, size_t size, uintptr_t mask, +ec_method_decode(ec_matrix_list_t *list, uint64_t size, uintptr_t mask, uint32_t *rows, void **in, void *out); #endif /* __EC_METHOD_H__ */ diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c index 0350325d6fb..00c374e7ca3 100644 --- a/xlators/cluster/ec/src/ec.c +++ b/xlators/cluster/ec/src/ec.c @@ -74,7 +74,7 @@ ec_parse_options(xlator_t *this) gf_msg_debug("ec", 0, "Initialized with: nodes=%u, fragments=%u, " - "stripe_size=%u, node_mask=%lX", + "stripe_size=%u, node_mask=%" PRIxFAST32, ec->nodes, ec->fragments, ec->stripe_size, ec->node_mask); error = 0; |