Lines Matching refs:cb

100 		struct compressed_bio *cb)  in compression_decompress_bio()  argument
103 case BTRFS_COMPRESS_ZLIB: return zlib_decompress_bio(ws, cb); in compression_decompress_bio()
104 case BTRFS_COMPRESS_LZO: return lzo_decompress_bio(ws, cb); in compression_decompress_bio()
105 case BTRFS_COMPRESS_ZSTD: return zstd_decompress_bio(ws, cb); in compression_decompress_bio()
137 static int btrfs_decompress_bio(struct compressed_bio *cb);
157 struct compressed_bio *cb = bio->bi_private; in check_compressed_csum() local
158 u8 *cb_sum = cb->sums; in check_compressed_csum()
165 for (i = 0; i < cb->nr_pages; i++) { in check_compressed_csum()
168 page = cb->compressed_pages[i]; in check_compressed_csum()
171 if (i == cb->nr_pages - 1) in check_compressed_csum()
172 bytes_left = cb->compressed_len - i * PAGE_SIZE; in check_compressed_csum()
184 csum, cb_sum, cb->mirror_num); in check_compressed_csum()
204 static bool dec_and_test_compressed_bio(struct compressed_bio *cb, struct bio *bio) in dec_and_test_compressed_bio() argument
206 struct btrfs_fs_info *fs_info = btrfs_sb(cb->inode->i_sb); in dec_and_test_compressed_bio()
221 cb->errors = 1; in dec_and_test_compressed_bio()
223 ASSERT(bi_size && bi_size <= cb->compressed_len); in dec_and_test_compressed_bio()
225 &cb->pending_sectors); in dec_and_test_compressed_bio()
231 wake_up_var(cb); in dec_and_test_compressed_bio()
236 static void finish_compressed_bio_read(struct compressed_bio *cb, struct bio *bio) in finish_compressed_bio_read() argument
242 for (index = 0; index < cb->nr_pages; index++) { in finish_compressed_bio_read()
243 page = cb->compressed_pages[index]; in finish_compressed_bio_read()
249 if (cb->errors) { in finish_compressed_bio_read()
250 bio_io_error(cb->orig_bio); in finish_compressed_bio_read()
262 bio_for_each_segment_all(bvec, cb->orig_bio, iter_all) { in finish_compressed_bio_read()
266 btrfs_page_set_checked(btrfs_sb(cb->inode->i_sb), in finish_compressed_bio_read()
271 bio_endio(cb->orig_bio); in finish_compressed_bio_read()
275 kfree(cb->compressed_pages); in finish_compressed_bio_read()
276 kfree(cb); in finish_compressed_bio_read()
291 struct compressed_bio *cb = bio->bi_private; in end_compressed_bio_read() local
296 if (!dec_and_test_compressed_bio(cb, bio)) in end_compressed_bio_read()
303 btrfs_bio(cb->orig_bio)->mirror_num = mirror; in end_compressed_bio_read()
304 cb->mirror_num = mirror; in end_compressed_bio_read()
310 if (cb->errors == 1) in end_compressed_bio_read()
313 inode = cb->inode; in end_compressed_bio_read()
322 ret = btrfs_decompress_bio(cb); in end_compressed_bio_read()
326 cb->errors = 1; in end_compressed_bio_read()
327 finish_compressed_bio_read(cb, bio); in end_compressed_bio_read()
337 const struct compressed_bio *cb) in end_compressed_writeback() argument
340 unsigned long index = cb->start >> PAGE_SHIFT; in end_compressed_writeback()
341 unsigned long end_index = (cb->start + cb->len - 1) >> PAGE_SHIFT; in end_compressed_writeback()
347 if (cb->errors) in end_compressed_writeback()
360 if (cb->errors) in end_compressed_writeback()
363 cb->start, cb->len); in end_compressed_writeback()
372 static void finish_compressed_bio_write(struct compressed_bio *cb) in finish_compressed_bio_write() argument
374 struct inode *inode = cb->inode; in finish_compressed_bio_write()
382 cb->start, cb->start + cb->len - 1, in finish_compressed_bio_write()
383 !cb->errors); in finish_compressed_bio_write()
385 end_compressed_writeback(inode, cb); in finish_compressed_bio_write()
392 for (index = 0; index < cb->nr_pages; index++) { in finish_compressed_bio_write()
393 struct page *page = cb->compressed_pages[index]; in finish_compressed_bio_write()
400 kfree(cb->compressed_pages); in finish_compressed_bio_write()
401 kfree(cb); in finish_compressed_bio_write()
413 struct compressed_bio *cb = bio->bi_private; in end_compressed_bio_write() local
415 if (!dec_and_test_compressed_bio(cb, bio)) in end_compressed_bio_write()
418 btrfs_record_physical_zoned(cb->inode, cb->start, bio); in end_compressed_bio_write()
420 finish_compressed_bio_write(cb); in end_compressed_bio_write()
426 struct compressed_bio *cb, in submit_compressed_bio() argument
456 static struct bio *alloc_compressed_bio(struct compressed_bio *cb, u64 disk_bytenr, in alloc_compressed_bio() argument
460 struct btrfs_fs_info *fs_info = btrfs_sb(cb->inode->i_sb); in alloc_compressed_bio()
470 bio->bi_private = cb; in alloc_compressed_bio()
512 struct compressed_bio *cb; in btrfs_submit_compressed_write() local
522 cb = kmalloc(compressed_bio_size(fs_info, compressed_len), GFP_NOFS); in btrfs_submit_compressed_write()
523 if (!cb) in btrfs_submit_compressed_write()
525 refcount_set(&cb->pending_sectors, compressed_len >> fs_info->sectorsize_bits); in btrfs_submit_compressed_write()
526 cb->errors = 0; in btrfs_submit_compressed_write()
527 cb->inode = &inode->vfs_inode; in btrfs_submit_compressed_write()
528 cb->start = start; in btrfs_submit_compressed_write()
529 cb->len = len; in btrfs_submit_compressed_write()
530 cb->mirror_num = 0; in btrfs_submit_compressed_write()
531 cb->compressed_pages = compressed_pages; in btrfs_submit_compressed_write()
532 cb->compressed_len = compressed_len; in btrfs_submit_compressed_write()
533 cb->orig_bio = NULL; in btrfs_submit_compressed_write()
534 cb->nr_pages = nr_pages; in btrfs_submit_compressed_write()
546 bio = alloc_compressed_bio(cb, cur_disk_bytenr, in btrfs_submit_compressed_write()
598 ret = submit_compressed_bio(fs_info, cb, bio, 0); in btrfs_submit_compressed_write()
619 wait_var_event(cb, refcount_read(&cb->pending_sectors) == in btrfs_submit_compressed_write()
626 ASSERT(refcount_read(&cb->pending_sectors)); in btrfs_submit_compressed_write()
628 finish_compressed_bio_write(cb); in btrfs_submit_compressed_write()
652 struct compressed_bio *cb) in add_ra_bio_pages() argument
656 u64 cur = bio_end_offset(cb->orig_bio); in add_ra_bio_pages()
741 (em->block_start >> 9) != cb->orig_bio->bi_iter.bi_sector) { in add_ra_bio_pages()
762 ret = bio_add_page(cb->orig_bio, page, add_size, offset_in_page(cur)); in add_ra_bio_pages()
798 struct compressed_bio *cb; in btrfs_submit_compressed_read() local
828 cb = kmalloc(compressed_bio_size(fs_info, compressed_len), GFP_NOFS); in btrfs_submit_compressed_read()
829 if (!cb) in btrfs_submit_compressed_read()
832 refcount_set(&cb->pending_sectors, compressed_len >> fs_info->sectorsize_bits); in btrfs_submit_compressed_read()
833 cb->errors = 0; in btrfs_submit_compressed_read()
834 cb->inode = inode; in btrfs_submit_compressed_read()
835 cb->mirror_num = mirror_num; in btrfs_submit_compressed_read()
836 sums = cb->sums; in btrfs_submit_compressed_read()
838 cb->start = em->orig_start; in btrfs_submit_compressed_read()
845 cb->len = bio->bi_iter.bi_size; in btrfs_submit_compressed_read()
846 cb->compressed_len = compressed_len; in btrfs_submit_compressed_read()
847 cb->compress_type = extent_compress_type(bio_flags); in btrfs_submit_compressed_read()
848 cb->orig_bio = bio; in btrfs_submit_compressed_read()
851 cb->compressed_pages = kcalloc(nr_pages, sizeof(struct page *), in btrfs_submit_compressed_read()
853 if (!cb->compressed_pages) in btrfs_submit_compressed_read()
857 cb->compressed_pages[pg_index] = alloc_page(GFP_NOFS); in btrfs_submit_compressed_read()
858 if (!cb->compressed_pages[pg_index]) { in btrfs_submit_compressed_read()
865 cb->nr_pages = nr_pages; in btrfs_submit_compressed_read()
867 add_ra_bio_pages(inode, em_start + em_len, cb); in btrfs_submit_compressed_read()
870 cb->len = bio->bi_iter.bi_size; in btrfs_submit_compressed_read()
877 struct page *page = cb->compressed_pages[index]; in btrfs_submit_compressed_read()
882 comp_bio = alloc_compressed_bio(cb, cur_disk_byte, in btrfs_submit_compressed_read()
934 ret = submit_compressed_bio(fs_info, cb, comp_bio, mirror_num); in btrfs_submit_compressed_read()
944 __free_page(cb->compressed_pages[faili]); in btrfs_submit_compressed_read()
948 kfree(cb->compressed_pages); in btrfs_submit_compressed_read()
950 kfree(cb); in btrfs_submit_compressed_read()
963 wait_var_event(cb, refcount_read(&cb->pending_sectors) == in btrfs_submit_compressed_read()
970 ASSERT(refcount_read(&cb->pending_sectors)); in btrfs_submit_compressed_read()
972 finish_compressed_bio_read(cb, NULL); in btrfs_submit_compressed_read()
1355 static int btrfs_decompress_bio(struct compressed_bio *cb) in btrfs_decompress_bio() argument
1359 int type = cb->compress_type; in btrfs_decompress_bio()
1362 ret = compression_decompress_bio(type, workspace, cb); in btrfs_decompress_bio()
1434 struct compressed_bio *cb, u32 decompressed) in btrfs_decompress_buf2page() argument
1436 struct bio *orig_bio = cb->orig_bio; in btrfs_decompress_buf2page()
1454 bvec_offset = page_offset(bvec.bv_page) + bvec.bv_offset - cb->start; in btrfs_decompress_buf2page()