summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
01bc529)
dmu_read() was called from osd_read_prep() copying from
ARC bufs into the same ARC bufs. seem to be the remainings
of per-zerocopy age.
Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Change-Id: I0f3657c360d8541d7c3c6e8e32eac78bc5702b42
Reviewed-on: http://review.whamcloud.com/9760
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
Reviewed-by: Isaac Huang <he.huang@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
struct niobuf_local *lnb, int npages)
{
struct osd_object *obj = osd_dt_obj(dt);
struct niobuf_local *lnb, int npages)
{
struct osd_object *obj = osd_dt_obj(dt);
- struct lu_buf buf;
- loff_t offset;
- int i;
LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_db);
LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_db);
+ read_lock(&obj->oo_attr_lock);
+ size = obj->oo_attr.la_size;
+ read_unlock(&obj->oo_attr_lock);
+
for (i = 0; i < npages; i++) {
for (i = 0; i < npages; i++) {
- buf.lb_buf = kmap(lnb[i].lnb_page);
- buf.lb_len = lnb[i].lnb_len;
- offset = lnb[i].lnb_file_offset;
+ if (unlikely(lnb[i].lnb_rc < 0))
+ continue;
- CDEBUG(D_OTHER, "read %u bytes at %u\n",
- (unsigned) lnb[i].lnb_len,
- (unsigned) lnb[i].lnb_file_offset);
- lnb[i].lnb_rc = osd_read(env, dt, &buf, &offset, NULL);
- kunmap(lnb[i].lnb_page);
+ lnb[i].lnb_rc = lnb[i].lnb_len;
+
+ if (lnb[i].lnb_file_offset + lnb[i].lnb_len > size) {
+ lnb[i].lnb_rc = size - lnb[i].lnb_file_offset;
- if (lnb[i].lnb_rc < buf.lb_len) {
/* all subsequent rc should be 0 */
while (++i < npages)
lnb[i].lnb_rc = 0;
/* all subsequent rc should be 0 */
while (++i < npages)
lnb[i].lnb_rc = 0;