summaryrefslogtreecommitdiff
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
commit65b2b6eedb1fe0d72bdf5883ff43b69aeb42fa12 (patch)
tree4c5d82b5e0250db588d459e6e37b458d93d09f00
parent22e6191ca891ad8f54e18f74a0ec19c617f7b433 (diff)
downloadlinux-crypto-65b2b6eedb1fe0d72bdf5883ff43b69aeb42fa12.tar.gz
linux-crypto-65b2b6eedb1fe0d72bdf5883ff43b69aeb42fa12.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>
-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 85eaf7b1..e8362c1e 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);