I think both callers would be just as easy to understand by using nth_page() instead of these magic helpers. E.g. for guard_bio_eod: unsigned offset = (bv.bv_offset + bv.bv_len); struct page *page = nth_page(bv.bv_page, offset); zero_user(page, offset & PAGE_MASK, truncated_bytes);