From: Liang Zhen Date: Thu, 24 Apr 2014 12:19:53 +0000 (+0800) Subject: LU-4952 osd: wrong paramters for dmu_tx_hold_write X-Git-Tag: 2.5.59~50 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F79%2F10079%2F2;p=fs%2Flustre-release.git LU-4952 osd: wrong paramters for dmu_tx_hold_write osd_declare_write_commit may pass wrong parameters to dmu_tx_hold_write when there are multiple IO fragments. Signed-off-by: Liang Zhen Change-Id: Ic7bd5ce1f42e7777c1a07eb4b9d19f8477da66a0 Reviewed-on: http://review.whamcloud.com/10079 Tested-by: Jenkins Reviewed-by: Alex Zhuravlev Reviewed-by: Johann Lombardi Tested-by: Maloo Reviewed-by: Isaac Huang --- diff --git a/lustre/osd-zfs/osd_io.c b/lustre/osd-zfs/osd_io.c index b315807..98e359e 100644 --- a/lustre/osd-zfs/osd_io.c +++ b/lustre/osd-zfs/osd_io.c @@ -585,20 +585,21 @@ static int osd_declare_write_commit(const struct lu_env *env, continue; } - dmu_tx_hold_write(oh->ot_tx, obj->oo_db->db_object, offset,size); - + dmu_tx_hold_write(oh->ot_tx, obj->oo_db->db_object, + offset, size); /* estimating space that will be consumed by a write is rather * complicated with ZFS. As a consequence, we don't account for * indirect blocks and quota overrun will be adjusted once the * operation is committed, if required. */ space += osd_count_not_mapped(obj, offset, size); - offset = lnb->lnb_file_offset; - size = lnb->len; + offset = lnb[i].lnb_file_offset; + size = lnb[i].len; } if (size) { - dmu_tx_hold_write(oh->ot_tx, obj->oo_db->db_object, offset,size); + dmu_tx_hold_write(oh->ot_tx, obj->oo_db->db_object, + offset, size); space += osd_count_not_mapped(obj, offset, size); }