]> err.no Git - linux-2.6/commitdiff
async_tx: fix the bug in async_tx_run_dependencies
authorYuri Tikhonov <yur@emcraft.com>
Fri, 5 Sep 2008 15:15:47 +0000 (08:15 -0700)
committerDan Williams <dan.j.williams@intel.com>
Fri, 5 Sep 2008 15:15:47 +0000 (08:15 -0700)
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>
crypto/async_tx/async_tx.c

index 85eaf7b1c53153ef07bdc33efa3a9d9c6cdff839..e8362c1efa309f8e0242a255235650d953aeca51 100644 (file)
@@ -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);