X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flov%2Flov_io.c;fp=lustre%2Flov%2Flov_io.c;h=ae0964b165053924a9709d5787953a6b8abb2bb6;hp=9ffd102f06b56e90a2e78806d9d2f0e26844a368;hb=d31647c017a390c9553a38d82c02fe7001a33a05;hpb=587e5aa8342980f761930235714add1cca80686b diff --git a/lustre/lov/lov_io.c b/lustre/lov/lov_io.c index 9ffd102..ae0964b 100644 --- a/lustre/lov/lov_io.c +++ b/lustre/lov/lov_io.c @@ -1284,12 +1284,16 @@ static int lov_io_submit(const struct lu_env *env, struct lov_io *lio = cl2lov_io(env, ios); struct lov_io_sub *sub; struct cl_page_list *plist = &lov_env_info(env)->lti_plist; - struct cl_page *page; + struct cl_page *page = cl_page_list_first(qin); struct cl_page *tmp; + bool dio = false; int index; int rc = 0; ENTRY; + if (page->cp_type == CPT_TRANSIENT) + dio = true; + cl_page_list_init(plist); while (qin->pl_nr > 0) { struct cl_2queue *cl2q = &lov_env_info(env)->lti_cl2q; @@ -1312,12 +1316,17 @@ static int lov_io_submit(const struct lu_env *env, cl_page_list_move(&cl2q->c2_qin, qin, page); index = page->cp_lov_index; - cl_page_list_for_each_safe(page, tmp, qin) { - /* this page is not on this stripe */ - if (index != page->cp_lov_index) - continue; - - cl_page_list_move(&cl2q->c2_qin, qin, page); + /* DIO is already split by stripe */ + if (!dio) { + cl_page_list_for_each_safe(page, tmp, qin) { + /* this page is not on this stripe */ + if (index != page->cp_lov_index) + continue; + + cl_page_list_move(&cl2q->c2_qin, qin, page); + } + } else { + cl_page_list_splice(qin, &cl2q->c2_qin); } sub = lov_sub_get(env, lio, index);