 -				rc = -EIO;
 -				break;
 -			}
--			goto out;
+-			PFL_GOTOERR(out, rc);
 -		}
 -
  		rc = msl_bmap_lease_tryext(b, NULL, 1);
  		if (rc) {
  			bmap_op_done(b);
- 			goto retry_bmap;
- 		}
-+
- 		/*
+@@ -2497,199 +2264,84 @@
  		 * Re-relativize the offset if this request spans more
  		 * than 1 bmap.
  		 */

 	struct msl_fsrqinfo *q = NULL;
 	struct fidc_membh *f;
 	struct bmpc_ioreq *r;
@@ -2408,7 +2179,7 @@
 	e = ((off + size) - 1) / SLASH_BMAP_SIZE;
 	nr = e - s + 1;
 	if (nr > MAX_BMAPS_REQ) {

 
 		BMPCE_ULOCK(e);
 
@@ -1729,6 +1629,12 @@
 		pscrpc_set_remove_req(r->biorq_rqset, rq);
 		goto error;
 	}
