Lines Matching defs:bvec

3  * bvec iterator
25 * The following holds for a bvec if n * PAGE_SIZE < bv_offset + bv_len:
38 * bvec_set_page - initialize a bvec based off a struct page
39 * @bv: bvec to initialize
40 * @page: page the bvec should point to
41 * @len: length of the bvec
53 * bvec_set_folio - initialize a bvec based off a struct folio
54 * @bv: bvec to initialize
55 * @folio: folio the bvec should point to
56 * @len: length of the bvec
66 * bvec_set_virt - initialize a bvec based on a virtual address
67 * @bv: bvec to initialize
68 * @vaddr: virtual address to set the bvec to
69 * @len: length of the bvec
85 current bvec */
98 #define __bvec_iter_bvec(bvec, iter) (&(bvec)[(iter).bi_idx])
101 #define mp_bvec_iter_page(bvec, iter) \
102 (__bvec_iter_bvec((bvec), (iter))->bv_page)
104 #define mp_bvec_iter_len(bvec, iter) \
106 __bvec_iter_bvec((bvec), (iter))->bv_len - (iter).bi_bvec_done)
108 #define mp_bvec_iter_offset(bvec, iter) \
109 (__bvec_iter_bvec((bvec), (iter))->bv_offset + (iter).bi_bvec_done)
111 #define mp_bvec_iter_page_idx(bvec, iter) \
112 (mp_bvec_iter_offset((bvec), (iter)) / PAGE_SIZE)
114 #define mp_bvec_iter_bvec(bvec, iter) \
116 .bv_page = mp_bvec_iter_page((bvec), (iter)), \
117 .bv_len = mp_bvec_iter_len((bvec), (iter)), \
118 .bv_offset = mp_bvec_iter_offset((bvec), (iter)), \
121 /* For building single-page bvec in flight */
122 #define bvec_iter_offset(bvec, iter) \
123 (mp_bvec_iter_offset((bvec), (iter)) % PAGE_SIZE)
125 #define bvec_iter_len(bvec, iter) \
126 min_t(unsigned, mp_bvec_iter_len((bvec), (iter)), \
127 PAGE_SIZE - bvec_iter_offset((bvec), (iter)))
129 #define bvec_iter_page(bvec, iter) \
130 (mp_bvec_iter_page((bvec), (iter)) + \
131 mp_bvec_iter_page_idx((bvec), (iter)))
133 #define bvec_iter_bvec(bvec, iter) \
135 .bv_page = bvec_iter_page((bvec), (iter)), \
136 .bv_len = bvec_iter_len((bvec), (iter)), \
137 .bv_offset = bvec_iter_offset((bvec), (iter)), \
146 "Attempted to advance past end of bvec iter\n")) {
166 * across multiple bvec entries, i.e. bytes <= bv[i->bi_idx].bv_len
204 static inline void bvec_advance(const struct bio_vec *bvec,
213 bv->bv_page = bvec->bv_page + (bvec->bv_offset >> PAGE_SHIFT);
214 bv->bv_offset = bvec->bv_offset & ~PAGE_MASK;
217 bvec->bv_len - iter_all->done);
220 if (iter_all->done == bvec->bv_len) {
227 * bvec_kmap_local - map a bvec into the kernel virtual address space
228 * @bvec: bvec to map
233 static inline void *bvec_kmap_local(struct bio_vec *bvec)
235 return kmap_local_page(bvec->bv_page) + bvec->bv_offset;
239 * memcpy_from_bvec - copy data from a bvec
240 * @bvec: bvec to copy from
244 static inline void memcpy_from_bvec(char *to, struct bio_vec *bvec)
246 memcpy_from_page(to, bvec->bv_page, bvec->bv_offset, bvec->bv_len);
250 * memcpy_to_bvec - copy data to a bvec
251 * @bvec: bvec to copy to
255 static inline void memcpy_to_bvec(struct bio_vec *bvec, const char *from)
257 memcpy_to_page(bvec->bv_page, bvec->bv_offset, from, bvec->bv_len);
261 * memzero_bvec - zero all data in a bvec
262 * @bvec: bvec to zero
266 static inline void memzero_bvec(struct bio_vec *bvec)
268 memzero_page(bvec->bv_page, bvec->bv_offset, bvec->bv_len);
272 * bvec_virt - return the virtual address for a bvec
273 * @bvec: bvec to return the virtual address for
275 * Note: the caller must ensure that @bvec->bv_page is not a highmem page.
277 static inline void *bvec_virt(struct bio_vec *bvec)
279 WARN_ON_ONCE(PageHighMem(bvec->bv_page));
280 return page_address(bvec->bv_page) + bvec->bv_offset;