submit_bio_noacct(bio);
}
-static sector_t get_bio_sector(struct bio *bio)
-{
- return bio->bi_iter.bi_sector;
-}
-
/**
* process_vio_io() - Submits a vio's bio to the underlying block device. May block if the device
* is busy. This callback should be used by vios which did not attempt to merge.
assert_in_bio_zone(vio);
mutex_lock(&bio_queue_data->lock);
- vdo_int_map_remove(bio_queue_data->map, get_bio_sector(vio->bios_merged.head));
- vdo_int_map_remove(bio_queue_data->map, get_bio_sector(vio->bios_merged.tail));
+ vdo_int_map_remove(bio_queue_data->map,
+ vio->bios_merged.head->bi_iter.bi_sector);
+ vdo_int_map_remove(bio_queue_data->map,
+ vio->bios_merged.tail->bi_iter.bi_sector);
bio = vio->bios_merged.head;
bio_list_init(&vio->bios_merged);
mutex_unlock(&bio_queue_data->lock);
bool back_merge)
{
struct bio *bio = vio->bio;
- sector_t merge_sector = get_bio_sector(bio);
+ sector_t merge_sector = bio->bi_iter.bi_sector;
struct vio *vio_merge;
if (back_merge)
return NULL;
if (back_merge) {
- return (get_bio_sector(vio_merge->bios_merged.tail) == merge_sector ?
+ return (vio_merge->bios_merged.tail->bi_iter.bi_sector == merge_sector ?
vio_merge : NULL);
}
- return (get_bio_sector(vio_merge->bios_merged.head) == merge_sector ?
+ return (vio_merge->bios_merged.head->bi_iter.bi_sector == merge_sector ?
vio_merge : NULL);
}
static int map_merged_vio(struct int_map *bio_map, struct vio *vio)
{
int result;
+ sector_t bio_sector;
- result = vdo_int_map_put(bio_map, get_bio_sector(vio->bios_merged.head), vio,
- true, NULL);
+ bio_sector = vio->bios_merged.head->bi_iter.bi_sector;
+ result = vdo_int_map_put(bio_map, bio_sector, vio, true, NULL);
if (result != VDO_SUCCESS)
return result;
- return vdo_int_map_put(bio_map, get_bio_sector(vio->bios_merged.tail), vio, true,
- NULL);
+ bio_sector = vio->bios_merged.tail->bi_iter.bi_sector;
+ return vdo_int_map_put(bio_map, bio_sector, vio, true, NULL);
}
static int merge_to_prev_tail(struct int_map *bio_map, struct vio *vio,
struct vio *prev_vio)
{
- vdo_int_map_remove(bio_map, get_bio_sector(prev_vio->bios_merged.tail));
+ vdo_int_map_remove(bio_map, prev_vio->bios_merged.tail->bi_iter.bi_sector);
bio_list_merge(&prev_vio->bios_merged, &vio->bios_merged);
return map_merged_vio(bio_map, prev_vio);
}
* that's compatible with using funnel queues in work queues. This avoids removing an
* existing completion.
*/
- vdo_int_map_remove(bio_map, get_bio_sector(next_vio->bios_merged.head));
+ vdo_int_map_remove(bio_map, next_vio->bios_merged.head->bi_iter.bi_sector);
bio_list_merge_head(&next_vio->bios_merged, &vio->bios_merged);
return map_merged_vio(bio_map, next_vio);
}
/* no merge. just add to bio_queue */
merged = false;
result = vdo_int_map_put(bio_queue_data->map,
- get_bio_sector(bio),
+ bio->bi_iter.bi_sector,
vio, true, NULL);
} else if (next_vio == NULL) {
/* Only prev. merge to prev's tail */
/* Only next. merge to next's head */
result = merge_to_next_head(bio_queue_data->map, vio, next_vio);
}
-
mutex_unlock(&bio_queue_data->lock);
/* We don't care about failure of int_map_put in this case. */