summaryrefslogtreecommitdiffstats
path: root/crypto/async_tx
diff options
context:
space:
mode:
authorYuri Tikhonov <yur@emcraft.com>2008-09-05 08:15:47 -0700
committerDan Williams <dan.j.williams@intel.com>2008-09-05 08:15:47 -0700
commitde24125dd0a452bfd4502fc448e3534c5d2e87aa (patch)
tree30b86411bdbbe6ebea4598bd82856a399f66bd88 /crypto/async_tx
parentb380b0d4f7dffcc235c0facefa537d4655619101 (diff)
downloadlinux-de24125dd0a452bfd4502fc448e3534c5d2e87aa.tar.gz
linux-de24125dd0a452bfd4502fc448e3534c5d2e87aa.tar.bz2
linux-de24125dd0a452bfd4502fc448e3534c5d2e87aa.zip
async_tx: fix the bug in async_tx_run_dependencies
Should clear the next pointer of the TX if we are sure that the next TX (say NXT) will be submitted to the channel too. Overwise, we break the chain of descriptors, because we lose the information about the next descriptor to run. So next time, when invoke async_tx_run_dependencies() with TX, it's TX->next will be NULL, and NXT will be never submitted. Cc: <stable@kernel.org> [2.6.26] Signed-off-by: Yuri Tikhonov <yur@emcraft.com> Signed-off-by: Ilya Yanok <yanok@emcraft.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'crypto/async_tx')
-rw-r--r--crypto/async_tx/async_tx.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/crypto/async_tx/async_tx.c b/crypto/async_tx/async_tx.c
index 85eaf7b1c531..e8362c1efa30 100644
--- a/crypto/async_tx/async_tx.c
+++ b/crypto/async_tx/async_tx.c
@@ -137,7 +137,8 @@ async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
spin_lock_bh(&next->lock);
next->parent = NULL;
_next = next->next;
- next->next = NULL;
+ if (_next && _next->chan == chan)
+ next->next = NULL;
spin_unlock_bh(&next->lock);
next->tx_submit(next);