On Mon, Dec 07, 2020 at 02:57:03PM -0800, ira.weiny@xxxxxxxxx wrote: > +static inline void memcpy_page(struct page *dst_page, size_t dst_off, > + struct page *src_page, size_t src_off, > + size_t len) > +{ > + char *dst = kmap_local_page(dst_page); > + char *src = kmap_local_page(src_page); I appreciate you've only moved these, but please add: BUG_ON(dst_off + len > PAGE_SIZE || src_off + len > PAGE_SIZE); > + memcpy(dst + dst_off, src + src_off, len); > + kunmap_local(src); > + kunmap_local(dst); > +} > + > +static inline void memmove_page(struct page *dst_page, size_t dst_off, > + struct page *src_page, size_t src_off, > + size_t len) > +{ > + char *dst = kmap_local_page(dst_page); > + char *src = kmap_local_page(src_page); BUG_ON(dst_off + len > PAGE_SIZE || src_off + len > PAGE_SIZE); > + memmove(dst + dst_off, src + src_off, len); > + kunmap_local(src); > + kunmap_local(dst); > +} > + > +static inline void memcpy_from_page(char *to, struct page *page, size_t offset, size_t len) > +{ > + char *from = kmap_local_page(page); BUG_ON(offset + len > PAGE_SIZE); > + memcpy(to, from + offset, len); > + kunmap_local(from); > +} > + > +static inline void memcpy_to_page(struct page *page, size_t offset, const char *from, size_t len) > +{ > + char *to = kmap_local_page(page); BUG_ON(offset + len > PAGE_SIZE); > + memcpy(to + offset, from, len); > + kunmap_local(to); > +} > + > +static inline void memset_page(struct page *page, size_t offset, int val, size_t len) > +{ > + char *addr = kmap_local_page(page); BUG_ON(offset + len > PAGE_SIZE); > + memset(addr + offset, val, len); > + kunmap_local(addr); > +} > + > #endif /* _LINUX_PAGEMAP_H */