From 0e0c3ec84c73bc5fcda16ed743f9d3dc0a582c03 Mon Sep 17 00:00:00 2001 From: Xavier Hernandez Date: Tue, 21 Jul 2015 18:05:06 +0200 Subject: cluster/ec: Minimize usage of EIO error >Change-Id: I82e245615419c2006a2d1b5e94ff0908d2f5e891 >BUG: 1245276 >Signed-off-by: Xavier Hernandez >Reviewed-on: http://review.gluster.org/11741 >Tested-by: Gluster Build System >Reviewed-by: Pranith Kumar Karampuri >Tested-by: NetBSD Build System Change-Id: Ifd3d63f88a686a2963c5ba2e62110249f84f338d BUG: 1250864 Signed-off-by: Xavier Hernandez Reviewed-on: http://review.gluster.org/11852 Reviewed-by: Pranith Kumar Karampuri Tested-by: NetBSD Build System Tested-by: Gluster Build System --- xlators/cluster/ec/src/ec-heal.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'xlators/cluster/ec/src/ec-heal.c') diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index a7c97a54ce7..f025cab9dfb 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -1069,9 +1069,8 @@ ec_create_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name, config.redundancy = ec->redundancy; config.chunk_size = EC_METHOD_CHUNK_SIZE; - if (ec_dict_set_config(xdata, EC_XATTR_CONFIG, - &config) < 0) { - ret = -EIO; + ret = ec_dict_set_config(xdata, EC_XATTR_CONFIG, &config); + if (ret != 0) { goto out; } default: @@ -1725,7 +1724,7 @@ ec_manager_heal_block (ec_fop_data_t *fop, int32_t state) case -EC_STATE_REPORT: if (fop->cbks.heal) { fop->cbks.heal (fop->req_frame, fop, fop->xl, -1, - EIO, 0, 0, 0, NULL); + fop->error, 0, 0, 0, NULL); } return EC_STATE_END; @@ -1745,7 +1744,7 @@ ec_heal_block (call_frame_t *frame, xlator_t *this, uintptr_t target, { ec_cbk_t callback = { .heal = func }; ec_fop_data_t *fop = NULL; - int32_t error = EIO; + int32_t error = ENOMEM; gf_msg_trace("ec", 0, "EC(HEAL) %p", frame); @@ -1765,7 +1764,7 @@ out: if (fop != NULL) { ec_manager(fop, error); } else { - func(frame, NULL, this, -1, EIO, 0, 0, 0, NULL); + func(frame, NULL, this, -1, error, 0, 0, 0, NULL); } } @@ -2350,7 +2349,7 @@ void ec_heal_fail (ec_t *ec, ec_fop_data_t *fop) { if (fop->cbks.heal) { - fop->cbks.heal (fop->req_frame, NULL, ec->xl, -1, EIO, 0, 0, + fop->cbks.heal (fop->req_frame, NULL, ec->xl, -1, fop->error, 0, 0, 0, NULL); } if (fop) @@ -2365,6 +2364,7 @@ ec_launch_heal (ec_t *ec, ec_fop_data_t *fop) ret = synctask_new (ec->xl->ctx->env, ec_synctask_heal_wrap, ec_heal_done, NULL, fop); if (ret < 0) { + ec_fop_set_error(fop, ENOMEM); ec_heal_fail (ec, fop); } } @@ -2418,8 +2418,9 @@ ec_heal_throttle (xlator_t *this, ec_fop_data_t *fop) if (fop) ec_launch_heal (ec, fop); } else { - gf_msg_debug (this->name, 0, "Max number of heals are pending, " - "background self-heal rejected"); + gf_msg_debug (this->name, 0, "Max number of heals are " + "pending, background self-heal rejected"); + ec_fop_set_error(fop, EBUSY); ec_heal_fail (ec, fop); } } @@ -2431,6 +2432,7 @@ ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target, { ec_cbk_t callback = { .heal = func }; ec_fop_data_t *fop = NULL; + int32_t err = EINVAL; gf_msg_trace ("ec", 0, "EC(HEAL) %p", frame); @@ -2445,6 +2447,9 @@ ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target, fop = ec_fop_data_allocate (frame, this, EC_FOP_HEAL, EC_FLAG_UPDATE_LOC_INODE, target, minimum, NULL, NULL, callback, data); + + err = ENOMEM; + if (fop == NULL) goto fail; @@ -2459,10 +2464,12 @@ ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target, fop->xdata = dict_ref(xdata); ec_heal_throttle (this, fop); + return; + fail: if (fop) ec_fop_data_release (fop); if (func) - func (frame, NULL, this, -1, EIO, 0, 0, 0, NULL); + func (frame, NULL, this, -1, err, 0, 0, 0, NULL); } -- cgit