Re-acquire ibc_lock in kiblnd_post_tx_locked(). Add extra reference to conn before calling kiblnd_post_tx_locked() to avoid scenario when conn disappears inside kiblnd_post_tx_locked().
i=liang
if (done)
kiblnd_tx_done(peer->ibp_ni, tx);
+
+ cfs_spin_lock(&conn->ibc_lock);
+
return -EIO;
}
kiblnd_queue_tx_locked(tx, conn);
}
+ kiblnd_conn_addref(conn); /* 1 ref for me.... (see b21911) */
+
for (;;) {
int credit;
}
cfs_spin_unlock(&conn->ibc_lock);
+
+ kiblnd_conn_decref(conn); /* ...until here */
}
void