Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* Applied the last patch in Bug 2306, which changes the portals router/NAL
[fs/lustre-release.git]
/
lustre
/
portals
/
knals
/
qswnal
/
qswnal.c
diff --git
a/lustre/portals/knals/qswnal/qswnal.c
b/lustre/portals/knals/qswnal/qswnal.c
index
127bbce
..
3b3b5d4
100644
(file)
--- a/
lustre/portals/knals/qswnal/qswnal.c
+++ b/
lustre/portals/knals/qswnal/qswnal.c
@@
-213,7
+213,6
@@
kqswnal_finalise (void)
/* fall through */
case KQN_INIT_DATA:
/* fall through */
case KQN_INIT_DATA:
- LASSERT(list_empty(&kqswnal_data.kqn_activetxds));
break;
case KQN_INIT_NOTHING:
break;
case KQN_INIT_NOTHING:
@@
-248,6
+247,9
@@
kqswnal_finalise (void)
if (kqswnal_data.kqn_eptx != NULL)
ep_free_xmtr (kqswnal_data.kqn_eptx);
if (kqswnal_data.kqn_eptx != NULL)
ep_free_xmtr (kqswnal_data.kqn_eptx);
+
+ /* freeing the xmtr completes all txs pdq */
+ LASSERT(list_empty(&kqswnal_data.kqn_activetxds));
#else
if (kqswnal_data.kqn_eprx_small != NULL)
ep_remove_large_rcvr (kqswnal_data.kqn_eprx_small);
#else
if (kqswnal_data.kqn_eprx_small != NULL)
ep_remove_large_rcvr (kqswnal_data.kqn_eprx_small);
@@
-255,6
+257,13
@@
kqswnal_finalise (void)
if (kqswnal_data.kqn_eprx_large != NULL)
ep_remove_large_rcvr (kqswnal_data.kqn_eprx_large);
if (kqswnal_data.kqn_eprx_large != NULL)
ep_remove_large_rcvr (kqswnal_data.kqn_eprx_large);
+ /* wait for transmits to complete */
+ while (!list_empty(&kqswnal_data.kqn_activetxds)) {
+ CWARN("waiting for active transmits to complete\n");
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ schedule_timeout(HZ);
+ }
+
if (kqswnal_data.kqn_eptx != NULL)
ep_free_large_xmtr (kqswnal_data.kqn_eptx);
#endif
if (kqswnal_data.kqn_eptx != NULL)
ep_free_large_xmtr (kqswnal_data.kqn_eptx);
#endif
@@
-339,10
+348,10
@@
kqswnal_finalise (void)
for (i = 0; i < KQSW_NRXMSGS_SMALL + KQSW_NRXMSGS_LARGE; i++) {
kqswnal_rx_t *krx = &kqswnal_data.kqn_rxds[i];
for (i = 0; i < KQSW_NRXMSGS_SMALL + KQSW_NRXMSGS_LARGE; i++) {
kqswnal_rx_t *krx = &kqswnal_data.kqn_rxds[i];
- /* If krx_
pages[0] got allocated, it got mapped.
+ /* If krx_
kiov[0].kiov_page got allocated, it got mapped.
* NB subsequent pages get merged */
* NB subsequent pages get merged */
- if (krx->krx_
pages[0]
!= NULL)
+ if (krx->krx_
kiov[0].kiov_page
!= NULL)
ep_dvma_unload(kqswnal_data.kqn_ep,
kqswnal_data.kqn_ep_rx_nmh,
&krx->krx_elanbuffer);
ep_dvma_unload(kqswnal_data.kqn_ep,
kqswnal_data.kqn_ep_rx_nmh,
&krx->krx_elanbuffer);
@@
-407,8
+416,8
@@
kqswnal_finalise (void)
kqswnal_rx_t *krx = &kqswnal_data.kqn_rxds[i];
for (j = 0; j < krx->krx_npages; j++)
kqswnal_rx_t *krx = &kqswnal_data.kqn_rxds[i];
for (j = 0; j < krx->krx_npages; j++)
- if (krx->krx_
pages[j]
!= NULL)
- __free_page (krx->krx_
pages[j]
);
+ if (krx->krx_
kiov[j].kiov_page
!= NULL)
+ __free_page (krx->krx_
kiov[j].kiov_page
);
}
PORTAL_FREE(kqswnal_data.kqn_rxds,
}
PORTAL_FREE(kqswnal_data.kqn_rxds,
@@
-700,18
+709,19
@@
kqswnal_initialise (void)
LASSERT (krx->krx_npages > 0);
for (j = 0; j < krx->krx_npages; j++)
{
LASSERT (krx->krx_npages > 0);
for (j = 0; j < krx->krx_npages; j++)
{
-
krx->krx_pages[j]
= alloc_page(GFP_KERNEL);
- if (krx->krx_pages[j] == NULL)
- {
+
struct page *page
= alloc_page(GFP_KERNEL);
+
+
if (page == NULL)
{
kqswnal_finalise ();
return (-ENOMEM);
}
kqswnal_finalise ();
return (-ENOMEM);
}
- LASSERT(page_address(krx->krx_pages[j]) != NULL);
+ krx->krx_kiov[j].kiov_page = page;
+ LASSERT(page_address(page) != NULL);
#if MULTIRAIL_EKC
ep_dvma_load(kqswnal_data.kqn_ep, NULL,
#if MULTIRAIL_EKC
ep_dvma_load(kqswnal_data.kqn_ep, NULL,
- page_address(
krx->krx_pages[j]
),
+ page_address(
page
),
PAGE_SIZE, kqswnal_data.kqn_ep_rx_nmh,
elan_page_idx, &all_rails, &elanbuffer);
PAGE_SIZE, kqswnal_data.kqn_ep_rx_nmh,
elan_page_idx, &all_rails, &elanbuffer);
@@
-727,7
+737,7
@@
kqswnal_initialise (void)
#else
elan3_dvma_kaddr_load(kqswnal_data.kqn_ep->DmaState,
kqswnal_data.kqn_eprxdmahandle,
#else
elan3_dvma_kaddr_load(kqswnal_data.kqn_ep->DmaState,
kqswnal_data.kqn_eprxdmahandle,
- page_address(
krx->krx_pages[j]
),
+ page_address(
page
),
PAGE_SIZE, elan_page_idx,
&elanbuffer);
if (j == 0)
PAGE_SIZE, elan_page_idx,
&elanbuffer);
if (j == 0)