summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2007-10-26 09:32:16 +0200
committerJens Axboe <jens.axboe@oracle.com>2007-10-29 09:18:03 +0100
commit73fd546aa75e9db02526bf304d4f736c4ec82b4b (patch)
treead6f7889a799c6fd1e0ace77b55856cb5ad78230
parent2a397e82c7db18019e408f953dd58dc1963a328c (diff)
SG: clear termination bit in sg_chain()
Since we are using the last entry in the list, clear any possible termination bit that may have already been set. Pointed out by Rusty. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--include/linux/scatterlist.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
index 45712317138..b2ec8421b89 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -179,7 +179,11 @@ static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
#ifndef ARCH_HAS_SG_CHAIN
BUG();
#endif
- prv[prv_nents - 1].page_link = (unsigned long) sgl | 0x01;
+ /*
+ * Set lowest bit to indicate a link pointer, and make sure to clear
+ * the termination bit if it happens to be set.
+ */
+ prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02;
}
/**