参照元†
- FIXME: これは何?
- ページのかたまり(scatterlist)の配列 2つを連結する。
- struct scatterlist *prv
- unsigned int prv_nents
- prv の長さ、つまり struct scatterlist の配列の要素数
- 連結後の prv の最後の要素 prv[prv_nents - 1] はリストの連結用として使われるため、ページのかたまりを指さなくなる。
- 連結後の prv[prv_nents - 1] の page_link はページ struct page * ではなく、次の scatterlist の先頭(struct scatterlist *)を保持しているので、sg_page() に渡してはいけない。
- struct scatterlist *sgl
- prv に連結する、scatterlist の配列
返り値†
/**
* sg_chain - Chain two sglists together
* @prv: First scatterlist
* @prv_nents: Number of entries in prv
* @sgl: Second scatterlist
*
* Description:
* Links @prv@ and @sgl@ together, to form a longer scatterlist.
*
**/
static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
struct scatterlist *sgl)
{
/*
* offset and length are unused for chain entry. Clear them.
*/
prv[prv_nents - 1].offset = 0;
prv[prv_nents - 1].length = 0;
- 連結後の最後の要素だけは特別扱いされる。
- prv の最後の要素 prv[prv_nents - 1] はリストの連結用として使われるため、ページのかたまりを指さない、このため offset, length は無効となる。
/*
* 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;
}
- 連結後の最後の要素だけは特別扱いされる。
- prv[prv_nents - 1] の page_link はページ struct page * ではなく、次の scatterlist の先頭(struct scatterlist *)を保持する。
コメント†