Lines Matching refs:be

25 ext_tree_prev(struct pnfs_block_extent *be)  in ext_tree_prev()  argument
27 struct rb_node *node = rb_prev(&be->be_node); in ext_tree_prev()
32 ext_tree_next(struct pnfs_block_extent *be) in ext_tree_next() argument
34 struct rb_node *node = rb_next(&be->be_node); in ext_tree_next()
39 ext_f_end(struct pnfs_block_extent *be) in ext_f_end() argument
41 return be->be_f_offset + be->be_length; in ext_f_end()
48 struct pnfs_block_extent *be = NULL; in __ext_tree_search() local
51 be = ext_node(node); in __ext_tree_search()
52 if (start < be->be_f_offset) in __ext_tree_search()
54 else if (start >= ext_f_end(be)) in __ext_tree_search()
57 return be; in __ext_tree_search()
60 if (be) { in __ext_tree_search()
61 if (start < be->be_f_offset) in __ext_tree_search()
62 return be; in __ext_tree_search()
64 if (start >= ext_f_end(be)) in __ext_tree_search()
65 return ext_tree_next(be); in __ext_tree_search()
94 ext_try_to_merge_left(struct rb_root *root, struct pnfs_block_extent *be) in ext_try_to_merge_left() argument
96 struct pnfs_block_extent *left = ext_tree_prev(be); in ext_try_to_merge_left()
98 if (left && ext_can_merge(left, be)) { in ext_try_to_merge_left()
99 left->be_length += be->be_length; in ext_try_to_merge_left()
100 rb_erase(&be->be_node, root); in ext_try_to_merge_left()
101 nfs4_put_deviceid_node(be->be_device); in ext_try_to_merge_left()
102 kfree(be); in ext_try_to_merge_left()
106 return be; in ext_try_to_merge_left()
110 ext_try_to_merge_right(struct rb_root *root, struct pnfs_block_extent *be) in ext_try_to_merge_right() argument
112 struct pnfs_block_extent *right = ext_tree_next(be); in ext_try_to_merge_right()
114 if (right && ext_can_merge(be, right)) { in ext_try_to_merge_right()
115 be->be_length += right->be_length; in ext_try_to_merge_right()
121 return be; in ext_try_to_merge_right()
129 struct pnfs_block_extent *be; in __ext_tree_insert() local
133 be = ext_node(parent); in __ext_tree_insert()
135 if (new->be_f_offset < be->be_f_offset) { in __ext_tree_insert()
136 if (merge_ok && ext_can_merge(new, be)) { in __ext_tree_insert()
137 be->be_f_offset = new->be_f_offset; in __ext_tree_insert()
138 if (be->be_state != PNFS_BLOCK_NONE_DATA) in __ext_tree_insert()
139 be->be_v_offset = new->be_v_offset; in __ext_tree_insert()
140 be->be_length += new->be_length; in __ext_tree_insert()
141 be = ext_try_to_merge_left(root, be); in __ext_tree_insert()
145 } else if (new->be_f_offset >= ext_f_end(be)) { in __ext_tree_insert()
146 if (merge_ok && ext_can_merge(be, new)) { in __ext_tree_insert()
147 be->be_length += new->be_length; in __ext_tree_insert()
148 be = ext_try_to_merge_right(root, be); in __ext_tree_insert()
168 struct pnfs_block_extent *be; in __ext_tree_remove() local
173 be = __ext_tree_search(root, start); in __ext_tree_remove()
174 if (!be) in __ext_tree_remove()
176 if (be->be_f_offset >= end) in __ext_tree_remove()
179 orig_v_offset = be->be_v_offset; in __ext_tree_remove()
180 orig_len = be->be_length; in __ext_tree_remove()
182 if (start > be->be_f_offset) in __ext_tree_remove()
183 len1 = start - be->be_f_offset; in __ext_tree_remove()
184 if (ext_f_end(be) > end) in __ext_tree_remove()
185 len2 = ext_f_end(be) - end; in __ext_tree_remove()
195 be->be_length = len1; in __ext_tree_remove()
198 if (be->be_state != PNFS_BLOCK_NONE_DATA) { in __ext_tree_remove()
203 new->be_state = be->be_state; in __ext_tree_remove()
204 new->be_tag = be->be_tag; in __ext_tree_remove()
205 new->be_device = nfs4_get_deviceid(be->be_device); in __ext_tree_remove()
209 be->be_f_offset = end; in __ext_tree_remove()
210 if (be->be_state != PNFS_BLOCK_NONE_DATA) { in __ext_tree_remove()
211 be->be_v_offset = in __ext_tree_remove()
214 be->be_length = len2; in __ext_tree_remove()
218 be->be_length = len1; in __ext_tree_remove()
219 be = ext_tree_next(be); in __ext_tree_remove()
222 while (be && ext_f_end(be) <= end) { in __ext_tree_remove()
223 struct pnfs_block_extent *next = ext_tree_next(be); in __ext_tree_remove()
225 rb_erase(&be->be_node, root); in __ext_tree_remove()
226 nfs4_put_deviceid_node(be->be_device); in __ext_tree_remove()
227 kfree(be); in __ext_tree_remove()
228 be = next; in __ext_tree_remove()
231 if (be && be->be_f_offset < end) { in __ext_tree_remove()
232 len1 = ext_f_end(be) - end; in __ext_tree_remove()
233 be->be_f_offset = end; in __ext_tree_remove()
234 if (be->be_state != PNFS_BLOCK_NONE_DATA) in __ext_tree_remove()
235 be->be_v_offset += be->be_length - len1; in __ext_tree_remove()
236 be->be_length = len1; in __ext_tree_remove()
246 struct pnfs_block_extent *be; in ext_tree_insert() local
266 be = __ext_tree_search(root, new->be_f_offset); in ext_tree_insert()
267 if (!be || be->be_f_offset >= ext_f_end(new)) { in ext_tree_insert()
269 } else if (new->be_f_offset >= be->be_f_offset) { in ext_tree_insert()
270 if (ext_f_end(new) <= ext_f_end(be)) { in ext_tree_insert()
274 sector_t new_len = ext_f_end(new) - ext_f_end(be); in ext_tree_insert()
282 } else if (ext_f_end(new) <= ext_f_end(be)) { in ext_tree_insert()
283 new->be_length = be->be_f_offset - new->be_f_offset; in ext_tree_insert()
287 sector_t new_len = ext_f_end(new) - ext_f_end(be); in ext_tree_insert()
296 split->be_length = be->be_f_offset - split->be_f_offset; in ext_tree_insert()
315 struct pnfs_block_extent *be; in __ext_tree_lookup() local
319 be = ext_node(node); in __ext_tree_lookup()
320 if (isect < be->be_f_offset) in __ext_tree_lookup()
322 else if (isect >= ext_f_end(be)) in __ext_tree_lookup()
325 *ret = *be; in __ext_tree_lookup()
367 ext_tree_split(struct rb_root *root, struct pnfs_block_extent *be, in ext_tree_split() argument
371 sector_t orig_len = be->be_length; in ext_tree_split()
377 be->be_length = split - be->be_f_offset; in ext_tree_split()
380 if (be->be_state != PNFS_BLOCK_NONE_DATA) in ext_tree_split()
381 new->be_v_offset = be->be_v_offset + be->be_length; in ext_tree_split()
382 new->be_length = orig_len - be->be_length; in ext_tree_split()
383 new->be_state = be->be_state; in ext_tree_split()
384 new->be_tag = be->be_tag; in ext_tree_split()
385 new->be_device = nfs4_get_deviceid(be->be_device); in ext_tree_split()
397 struct pnfs_block_extent *be; in ext_tree_mark_written() local
411 for (be = __ext_tree_search(root, start); be; be = ext_tree_next(be)) { in ext_tree_mark_written()
412 if (be->be_f_offset >= end) in ext_tree_mark_written()
415 if (be->be_state != PNFS_BLOCK_INVALID_DATA || be->be_tag) in ext_tree_mark_written()
418 if (be->be_f_offset < start) { in ext_tree_mark_written()
419 struct pnfs_block_extent *left = ext_tree_prev(be); in ext_tree_mark_written()
421 if (left && ext_can_merge(left, be)) { in ext_tree_mark_written()
422 sector_t diff = start - be->be_f_offset; in ext_tree_mark_written()
426 be->be_f_offset += diff; in ext_tree_mark_written()
427 be->be_v_offset += diff; in ext_tree_mark_written()
428 be->be_length -= diff; in ext_tree_mark_written()
430 err = ext_tree_split(root, be, start); in ext_tree_mark_written()
436 if (ext_f_end(be) > end) { in ext_tree_mark_written()
437 struct pnfs_block_extent *right = ext_tree_next(be); in ext_tree_mark_written()
439 if (right && ext_can_merge(be, right)) { in ext_tree_mark_written()
440 sector_t diff = end - be->be_f_offset; in ext_tree_mark_written()
442 be->be_length -= diff; in ext_tree_mark_written()
448 err = ext_tree_split(root, be, end); in ext_tree_mark_written()
454 if (be->be_f_offset >= start && ext_f_end(be) <= end) { in ext_tree_mark_written()
455 be->be_tag = EXTENT_WRITTEN; in ext_tree_mark_written()
456 be = ext_try_to_merge_left(root, be); in ext_tree_mark_written()
457 be = ext_try_to_merge_right(root, be); in ext_tree_mark_written()
488 struct pnfs_block_extent *be; in ext_tree_encode_commit() local
492 for (be = ext_tree_first(&bl->bl_ext_rw); be; be = ext_tree_next(be)) { in ext_tree_encode_commit()
493 if (be->be_state != PNFS_BLOCK_INVALID_DATA || in ext_tree_encode_commit()
494 be->be_tag != EXTENT_WRITTEN) in ext_tree_encode_commit()
504 p = xdr_encode_opaque_fixed(p, be->be_device->deviceid.data, in ext_tree_encode_commit()
506 p = xdr_encode_hyper(p, be->be_f_offset << SECTOR_SHIFT); in ext_tree_encode_commit()
507 p = xdr_encode_hyper(p, be->be_length << SECTOR_SHIFT); in ext_tree_encode_commit()
511 be->be_tag = EXTENT_COMMITTING; in ext_tree_encode_commit()
577 struct pnfs_block_extent *be; in ext_tree_mark_committed() local
584 for (be = ext_tree_first(root); be; be = ext_tree_next(be)) { in ext_tree_mark_committed()
585 if (be->be_state != PNFS_BLOCK_INVALID_DATA || in ext_tree_mark_committed()
586 be->be_tag != EXTENT_COMMITTING) in ext_tree_mark_committed()
595 be->be_tag = EXTENT_WRITTEN; in ext_tree_mark_committed()
597 be->be_state = PNFS_BLOCK_READWRITE_DATA; in ext_tree_mark_committed()
598 be->be_tag = 0; in ext_tree_mark_committed()
601 be = ext_try_to_merge_left(root, be); in ext_tree_mark_committed()
602 be = ext_try_to_merge_right(root, be); in ext_tree_mark_committed()