* Use is subject to license terms.
*/
/*
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
* Use is subject to license terms.
*/
/*
*/
while (len > 0) {
rc = -dmu_buf_hold_array_by_bonus(obj->oo_db, off, len, TRUE,
- osd_zerocopy_tag, &numbufs,
- &dbp);
- LASSERT(rc == 0);
+ osd_zerocopy_tag, &numbufs,
+ &dbp);
+ if (unlikely(rc))
+ GOTO(err, rc);
for (i = 0; i < numbufs; i++) {
int bufoff, tocpy, thispage;
}
RETURN(npages);
+
+err:
+ LASSERT(rc < 0);
+ osd_bufs_put(env, &obj->oo_dt, lnb - npages, npages);
+ RETURN(rc);
}
static int osd_bufs_get_write(const struct lu_env *env, struct osd_object *obj,
.dbo_declare_write_commit = osd_declare_write_commit,
.dbo_write_commit = osd_write_commit,
.dbo_read_prep = osd_read_prep,
- .do_declare_punch = osd_declare_punch,
- .do_punch = osd_punch,
+ .dbo_declare_punch = osd_declare_punch,
+ .dbo_punch = osd_punch,
};