Lines Matching defs:bio

210 	struct bio bio;
1205 static void bio_copy_block(struct dm_writecache *wc, struct bio *bio, void *data)
1210 int rw = bio_data_dir(bio);
1214 struct bio_vec bv = bio_iter_iovec(bio, bio->bi_iter);
1223 flush_dcache_page(bio_page(bio));
1226 bio->bi_status = BLK_STS_IOERR;
1229 flush_dcache_page(bio_page(bio));
1237 bio_advance(bio, size);
1246 struct bio *bio;
1249 bio = bio_list_pop(&wc->flush_list);
1250 if (!bio) {
1263 if (bio_op(bio) == REQ_OP_DISCARD) {
1264 writecache_discard(wc, bio->bi_iter.bi_sector,
1265 bio_end_sector(bio));
1267 bio_set_dev(bio, wc->dev->bdev);
1268 submit_bio_noacct(bio);
1273 bio->bi_status = BLK_STS_IOERR;
1274 bio_endio(bio);
1281 static void writecache_offload_bio(struct dm_writecache *wc, struct bio *bio)
1285 bio_list_add(&wc->flush_list, bio);
1288 static int writecache_map(struct dm_target *ti, struct bio *bio)
1293 bio->bi_private = NULL;
1297 if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
1308 if (dm_bio_get_target_bio_nr(bio))
1310 writecache_offload_bio(wc, bio);
1315 bio->bi_iter.bi_sector = dm_target_offset(ti, bio->bi_iter.bi_sector);
1317 if (unlikely((((unsigned)bio->bi_iter.bi_sector | bio_sectors(bio)) &
1320 (unsigned long long)bio->bi_iter.bi_sector,
1321 bio->bi_iter.bi_size, wc->block_size);
1325 if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) {
1329 writecache_discard(wc, bio->bi_iter.bi_sector, bio_end_sector(bio));
1332 writecache_offload_bio(wc, bio);
1337 if (bio_data_dir(bio) == READ) {
1339 e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING);
1340 if (e && read_original_sector(wc, e) == bio->bi_iter.bi_sector) {
1342 bio_copy_block(wc, bio, memory_data(wc, e));
1343 if (bio->bi_iter.bi_size)
1347 dm_accept_partial_bio(bio, wc->block_size >> SECTOR_SHIFT);
1348 bio_set_dev(bio, wc->ssd_dev->bdev);
1349 bio->bi_iter.bi_sector = cache_sector(wc, e);
1357 read_original_sector(wc, e) - bio->bi_iter.bi_sector;
1358 if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT) {
1359 dm_accept_partial_bio(bio, next_boundary);
1370 e = writecache_find_entry(wc, bio->bi_iter.bi_sector, 0);
1390 e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING);
1392 sector_t next_boundary = read_original_sector(wc, e) - bio->bi_iter.bi_sector;
1394 if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT) {
1395 dm_accept_partial_bio(bio, next_boundary);
1403 write_original_sector_seq_count(wc, e, bio->bi_iter.bi_sector, wc->seq_count);
1408 bio_copy_block(wc, bio, memory_data(wc, e));
1414 while (bio_size < bio->bi_iter.bi_size) {
1419 write_original_sector_seq_count(wc, f, bio->bi_iter.bi_sector +
1444 bio_set_dev(bio, wc->ssd_dev->bdev);
1445 bio->bi_iter.bi_sector = start_cache_sec;
1446 dm_accept_partial_bio(bio, bio_size >> SECTOR_SHIFT);
1456 } while (bio->bi_iter.bi_size);
1458 if (unlikely(bio->bi_opf & REQ_FUA ||
1467 bio_set_dev(bio, wc->dev->bdev);
1473 bio->bi_private = (void *)1;
1474 atomic_inc(&wc->bio_in_progress[bio_data_dir(bio)]);
1480 bio_endio(bio);
1489 bio_io_error(bio);
1493 static int writecache_end_io(struct dm_target *ti, struct bio *bio, blk_status_t *status)
1497 if (bio->bi_private != NULL) {
1498 int dir = bio_data_dir(bio);
1529 static void writecache_writeback_endio(struct bio *bio)
1531 struct writeback_struct *wb = container_of(bio, struct writeback_struct, bio);
1567 if (unlikely(wb->bio.bi_status != BLK_STS_OK))
1568 writecache_error(wc, blk_status_to_errno(wb->bio.bi_status),
1569 "write error %d", wb->bio.bi_status);
1591 bio_put(&wb->bio);
1679 if (unlikely(bio_end_sector(&wb->bio) >= wc->data_device_sectors))
1682 return bio_add_page(&wb->bio, persistent_memory_page(address),
1707 struct bio *bio;
1718 bio = bio_alloc_bioset(GFP_NOIO, max_pages, &wc->bio_set);
1719 wb = container_of(bio, struct writeback_struct, bio);
1721 bio->bi_end_io = writecache_writeback_endio;
1722 bio_set_dev(bio, wc->dev->bdev);
1723 bio->bi_iter.bi_sector = read_original_sector(wc, e);
1749 bio_set_op_attrs(bio, REQ_OP_WRITE, WC_MODE_FUA(wc) * REQ_FUA);
1751 bio->bi_status = BLK_STS_IOERR;
1752 bio_endio(bio);
1753 } else if (unlikely(!bio_sectors(bio))) {
1754 bio->bi_status = BLK_STS_OK;
1755 bio_endio(bio);
1757 submit_bio(bio);
2180 offsetof(struct writeback_struct, bio),
2183 ti->error = "Could not allocate bio set";