From: pjkirner Date: Fri, 23 Sep 2005 02:38:05 +0000 (+0000) Subject: * Fixed problem where struct iovec != ptl_md_iovec_t, causing >1 page PtlMDAttach... X-Git-Tag: v1_7_100~1^25~6^2~147 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=eb3986f88c89ed4a43f1749a3cfe5a186b80a5e1;p=fs%2Flustre-release.git * Fixed problem where struct iovec != ptl_md_iovec_t, causing >1 page PtlMDAttach() to fail with error 26. --- diff --git a/lnet/klnds/ptllnd/ptllnd.h b/lnet/klnds/ptllnd/ptllnd.h index 9aefb67..1b0b120 100755 --- a/lnet/klnds/ptllnd/ptllnd.h +++ b/lnet/klnds/ptllnd/ptllnd.h @@ -630,13 +630,14 @@ kptllnd_msg_unpack( typedef union { - struct iovec iov[PTL_MD_MAX_IOV]; #ifdef _USING_LUSTRE_PORTALS_ + struct iovec iov[PTL_MD_MAX_IOV]; ptl_kiov_t kiov[PTL_MD_MAX_IOV]; +#else /* _USING_CRAY_PORTALS_ */ + ptl_md_iovec_t iov[PTL_MD_MAX_IOV]; #endif }tempiov_t; - void kptllnd_setup_md( kptl_data_t *kptllnd_data, diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c index b547e0d..27109f1 100644 --- a/lnet/klnds/ptllnd/ptllnd_cb.c +++ b/lnet/klnds/ptllnd/ptllnd_cb.c @@ -148,6 +148,10 @@ kptllnd_setup_md( #error "Conflicting compilation directives" #endif + PJK_UT_MSG("payload_offset %d\n",payload_offset); + PJK_UT_MSG("payload_niov %d\n",payload_niov); + PJK_UT_MSG("payload_nob %d\n",payload_nob); + while (payload_offset >= payload_kiov->kiov_len) { payload_offset -= payload_kiov->kiov_len; payload_kiov++; @@ -161,13 +165,20 @@ kptllnd_setup_md( LASSERT (payload_niov > 0); LASSERT (niov < sizeof(tempiov->iov)/sizeof(tempiov->iov[0])); + PJK_UT_MSG("kiov_page [%d]=%p (phys)\n",niov,(void*)page_to_phys(payload_kiov->kiov_page)); + PJK_UT_MSG("kiov_offset[%d]=%d (phys)\n",niov,payload_kiov->kiov_offset); + PJK_UT_MSG("kiov_len [%d]=%d (phys)\n",niov,payload_kiov->kiov_len); + tempiov->iov[niov].iov_base = (void *)( - page_to_phys(payload_kiov->kiov_page) + payload_offset); - tempiov->iov[niov].iov_len = min((int)(payload_kiov->kiov_len - payload_offset), - (int)payload_nob); + page_to_phys(payload_kiov->kiov_page) + + payload_kiov->kiov_offset + + payload_offset); + tempiov->iov[niov].iov_len = min( + (int)(payload_kiov->kiov_len - payload_offset), + (int)payload_nob); PJK_UT_MSG("iov_base[%d]=%p\n",niov,tempiov->iov[niov].iov_base); - PJK_UT_MSG("iov_len[%d] =%d\n",niov,tempiov->iov[niov].iov_len); + PJK_UT_MSG("iov_len [%d]=%d\n",niov,tempiov->iov[niov].iov_len); payload_offset = 0; payload_nob -= tempiov->iov[niov].iov_len; @@ -187,6 +198,9 @@ kptllnd_setup_md( * length, rather it is # iovs */ md->length = niov; + + PJK_UT_MSG("md->options=%x\n",md->options); + PJK_UT_MSG("md->length=%d\n",md->length); } int