*/
wait_event(iobuf->dr_wait,
atomic_read(&iobuf->dr_numreqs) == 0);
- osd_fini_iobuf(osd, iobuf);
+
if (!rc)
rc = iobuf->dr_error;
+ osd_fini_iobuf(osd, iobuf);
+
if (unlikely(remove_agents != 0))
osd_process_scheduled_agent_removals(env, osd);
lprocfs_oh_tally_log2_pcpu(&h->bs_hist[BRW_R_IO_TIME+rw],
ktime_to_ms(iobuf->dr_elapsed));
}
+
+ iobuf->dr_error = 0;
}
* parallel and wait for IO completion once transaction is stopped
* see osd_trans_stop() for more details -bzzz
*/
- if (iobuf->dr_rw == 0 || fault_inject) {
+ if (iobuf->dr_rw == 0 || fault_inject)
wait_event(iobuf->dr_wait,
atomic_read(&iobuf->dr_numreqs) == 0);
- osd_fini_iobuf(osd, iobuf);
- }
if (rc == 0)
rc = iobuf->dr_error;
else
osd_bio_fini(bio);
+ if (iobuf->dr_rw == 0 || fault_inject)
+ osd_fini_iobuf(osd, iobuf);
+
/* Write only now */
if (rc == 0 && iobuf->dr_rw)
osd_mark_page_io_done(iobuf, inode,