*参照元 [#w6d009de] #backlinks *説明 [#zd79ac10] -パス: [[linux-4.4.1/include/linux/scatterlist.h]] -連続したページのかたまりの先頭ページを取得する。 --ただし、scatterlist の連結に使っている場合は、この関数に渡してはならない。 --ただし、scatterlist の連結に使っている要素は、この関数に渡してはならない。 **引数 [#s645ad44] -struct scatterlist *sg --連続したページのかたまり --[[linux-4.4.1/scatterlist]] **返り値 [#xff15ca3] -struct page * --先頭ページ --[[linux-4.4.1/page]] **参考 [#radd51f8] *実装 [#w407491e] static inline struct page *sg_page(struct scatterlist *sg) { #ifdef CONFIG_DEBUG_SG -デバッグが有効 --[[linux-4.4.1/CONFIG_DEBUG_SG]] BUG_ON(sg->sg_magic != SG_MAGIC); BUG_ON(sg_is_chain(sg)); -連結用のエントリの場合、バグ扱いにする。 --連結用のエントリの場合 page_link には、ページ(struct page *)では無く、次の scatterlist のポインタ(struct scatterlist *)が入っているため。 --[[linux-4.4.1/BUG_ON()]] --[[linux-4.4.1/sg_is_chain()]] #endif return (struct page *)((sg)->page_link & ~0x3); } -page_link の下位 2ビットはフラグとして使っていて、ポインタとしては無効な値が入っているので、消す必要がある。 *コメント [#ea349e3f]