RGWObjState *state = NULL;
int ret = 0;
+ int i;
- do {
+#define MAX_ECANCELED_RETRY 100
+ for (i = 0; i < MAX_ECANCELED_RETRY; i++) {
if (ret == -ECANCELED) {
obj_ctx.invalidate(olh_obj);
}
ldout(cct, 20) << "update_olh() target_obj=" << target_obj << " returned " << ret << dendl;
continue;
}
- } while (ret == -ECANCELED);
+ if (ret != -ECANCELED) {
+ break;
+ }
+ }
+
+ if (i == MAX_ECANCELED_RETRY) {
+ ldout(cct, 0) << "ERROR: exceeded max ECANCELED retries, aborting (EIO)" << dendl;
+ return -EIO;
+ }
if (ret < 0) {
return ret;
RGWObjState *state = NULL;
int ret = 0;
+ int i;
- do {
+ for (i = 0; i < MAX_ECANCELED_RETRY; i++) {
if (ret == -ECANCELED) {
obj_ctx.invalidate(olh_obj);
}
ldout(cct, 20) << "update_olh() target_obj=" << target_obj << " returned " << ret << dendl;
continue;
}
- } while (ret == -ECANCELED);
+ if (ret != -ECANCELED) {
+ break;
+ }
+ }
+
+ if (i == MAX_ECANCELED_RETRY) {
+ ldout(cct, 0) << "ERROR: exceeded max ECANCELED retries, aborting (EIO)" << dendl;
+ return -EIO;
+ }
if (ret < 0) {
return ret;