mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 05:02:12 +00:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IPoIB/cm: Fix DMA direction typo IB/iser: Don't defer connection failure notification to workqueue
This commit is contained in:
commit
5a92d635be
@ -131,7 +131,7 @@ static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev, int id, int
|
||||
skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE);
|
||||
|
||||
mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page,
|
||||
0, PAGE_SIZE, DMA_TO_DEVICE);
|
||||
0, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1])))
|
||||
goto partial_error;
|
||||
}
|
||||
|
@ -245,7 +245,6 @@ struct iser_conn {
|
||||
wait_queue_head_t wait; /* waitq for conn/disconn */
|
||||
atomic_t post_recv_buf_count; /* posted rx count */
|
||||
atomic_t post_send_buf_count; /* posted tx count */
|
||||
struct work_struct comperror_work; /* conn term sleepable ctx*/
|
||||
char name[ISER_OBJECT_NAME_SIZE];
|
||||
struct iser_page_vec *page_vec; /* represents SG to fmr maps*
|
||||
* maps serialized as tx is*/
|
||||
|
@ -48,7 +48,6 @@
|
||||
|
||||
static void iser_cq_tasklet_fn(unsigned long data);
|
||||
static void iser_cq_callback(struct ib_cq *cq, void *cq_context);
|
||||
static void iser_comp_error_worker(struct work_struct *work);
|
||||
|
||||
static void iser_cq_event_callback(struct ib_event *cause, void *context)
|
||||
{
|
||||
@ -480,7 +479,6 @@ int iser_conn_init(struct iser_conn **ibconn)
|
||||
init_waitqueue_head(&ib_conn->wait);
|
||||
atomic_set(&ib_conn->post_recv_buf_count, 0);
|
||||
atomic_set(&ib_conn->post_send_buf_count, 0);
|
||||
INIT_WORK(&ib_conn->comperror_work, iser_comp_error_worker);
|
||||
INIT_LIST_HEAD(&ib_conn->conn_list);
|
||||
spin_lock_init(&ib_conn->lock);
|
||||
|
||||
@ -753,26 +751,6 @@ int iser_post_send(struct iser_desc *tx_desc)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
static void iser_comp_error_worker(struct work_struct *work)
|
||||
{
|
||||
struct iser_conn *ib_conn =
|
||||
container_of(work, struct iser_conn, comperror_work);
|
||||
|
||||
/* getting here when the state is UP means that the conn is being *
|
||||
* terminated asynchronously from the iSCSI layer's perspective. */
|
||||
if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP,
|
||||
ISER_CONN_TERMINATING))
|
||||
iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn,
|
||||
ISCSI_ERR_CONN_FAILED);
|
||||
|
||||
/* complete the termination process if disconnect event was delivered *
|
||||
* note there are no more non completed posts to the QP */
|
||||
if (ib_conn->disc_evt_flag) {
|
||||
ib_conn->state = ISER_CONN_DOWN;
|
||||
wake_up_interruptible(&ib_conn->wait);
|
||||
}
|
||||
}
|
||||
|
||||
static void iser_handle_comp_error(struct iser_desc *desc)
|
||||
{
|
||||
struct iser_dto *dto = &desc->dto;
|
||||
@ -791,8 +769,22 @@ static void iser_handle_comp_error(struct iser_desc *desc)
|
||||
}
|
||||
|
||||
if (atomic_read(&ib_conn->post_recv_buf_count) == 0 &&
|
||||
atomic_read(&ib_conn->post_send_buf_count) == 0)
|
||||
schedule_work(&ib_conn->comperror_work);
|
||||
atomic_read(&ib_conn->post_send_buf_count) == 0) {
|
||||
/* getting here when the state is UP means that the conn is *
|
||||
* being terminated asynchronously from the iSCSI layer's *
|
||||
* perspective. */
|
||||
if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP,
|
||||
ISER_CONN_TERMINATING))
|
||||
iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn,
|
||||
ISCSI_ERR_CONN_FAILED);
|
||||
|
||||
/* complete the termination process if disconnect event was delivered *
|
||||
* note there are no more non completed posts to the QP */
|
||||
if (ib_conn->disc_evt_flag) {
|
||||
ib_conn->state = ISER_CONN_DOWN;
|
||||
wake_up_interruptible(&ib_conn->wait);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void iser_cq_tasklet_fn(unsigned long data)
|
||||
|
Loading…
Reference in New Issue
Block a user