[PATCH v9 04/26] Add a function to kmap one page of a multipage bio_vec
Matthew Wilcox
willy at infradead.org
Mon Aug 10 12:36:11 PDT 2026
On Mon, Aug 10, 2026 at 03:47:21PM +0100, David Howells wrote:
> Add a function to kmap one page of a multipage bio_vec by offset (which is
> added to the offset in the bio_vec internally). The caller is responsible
> for calculating how much of the page is then available.
I think this should be kmap_local_bvec(). Living in bvec.h makes sense,
but keeping it in the kmap_local_ namespace is better than putting it in
the bvec_ namespace.
The bvec should be const-qualified. We're not very good at
being const-clean, but let's try harder ;-)
I think it's better to steal the same terminology for the kernel-doc
used in highmem.h, just for consistency:
/**
* kmap_local_bvec - Map a page in this bvec for temporary usage
* @bvec: The bvec containing the page.
* @offset: The first byte within the bvec to map.
*
* This will not map the entire bvec, only the page containing @offset
* from the start of @bvec. Unmap the address with kunmap_local().
* See kmap_local_page() for nesting rules.
*
* Context: Interrupt or process context.
* Return: A pointer to a temporary mapping.
*/
> +/**
> + * bvec_kmap_partial - Map part of a bvec into the kernel virtual address space
> + * @bvec: bvec to map
> + * @offset: Offset into bvec
> + *
> + * Map the page containing the byte at @offset into the kernel virtual address
> + * space. The caller is responsible for making sure this doesn't overrun.
> + *
> + * Call kunmap_local on the returned address to unmap.
> + */
> +static inline void *bvec_kmap_partial(struct bio_vec *bvec, size_t offset)
> +{
> + offset += bvec->bv_offset;
> +
> + return kmap_local_page(bvec->bv_page + (offset >> PAGE_SHIFT)) +
> + (offset & ~PAGE_MASK);
> +}
> +
> #endif /* __LINUX_BVEC_H */
>
>
More information about the linux-afs
mailing list