+/**
+ * Prepare buffers for read.
+ *
+ * The function maps the range described by \a off and \a len to \a lnb array.
+ * dmu_buf_hold_array_by_bonus() finds/creates appropriate ARC buffers, then
+ * we fill \a lnb array with the pages storing ARC buffers. Notice the current
+ * implementationt passes TRUE to dmu_buf_hold_array_by_bonus() to fill ARC
+ * buffers with actual data, I/O is done in the conext of osd_bufs_get_read().
+ * A better implementation would just return the buffers (potentially unfilled)
+ * and subsequent osd_read_prep() would do I/O for many ranges concurrently.
+ *
+ * \param[in] env environment
+ * \param[in] obj object
+ * \param[in] off offset in bytes
+ * \param[in] len the number of bytes to access
+ * \param[out] lnb array of local niobufs pointing to the buffers with data
+ *
+ * \retval 0 for success
+ * \retval negative error number of failure
+ */