Lines Matching full:cb
102 struct compressed_bio *cb) in compression_decompress_bio() argument
104 switch (cb->compress_type) { in compression_decompress_bio()
105 case BTRFS_COMPRESS_ZLIB: return zlib_decompress_bio(ws, cb); in compression_decompress_bio()
106 case BTRFS_COMPRESS_LZO: return lzo_decompress_bio(ws, cb); in compression_decompress_bio()
107 case BTRFS_COMPRESS_ZSTD: return zstd_decompress_bio(ws, cb); in compression_decompress_bio()
139 static int btrfs_decompress_bio(struct compressed_bio *cb);
141 static void finish_compressed_bio_read(struct compressed_bio *cb) in finish_compressed_bio_read() argument
146 if (cb->status == BLK_STS_OK) in finish_compressed_bio_read()
147 cb->status = errno_to_blk_status(btrfs_decompress_bio(cb)); in finish_compressed_bio_read()
150 for (index = 0; index < cb->nr_pages; index++) { in finish_compressed_bio_read()
151 page = cb->compressed_pages[index]; in finish_compressed_bio_read()
157 btrfs_bio_end_io(btrfs_bio(cb->orig_bio), cb->status); in finish_compressed_bio_read()
159 /* Finally free the cb struct */ in finish_compressed_bio_read()
160 kfree(cb->compressed_pages); in finish_compressed_bio_read()
161 kfree(cb); in finish_compressed_bio_read()
171 struct compressed_bio *cb = bbio->private; in end_compressed_bio_read() local
172 struct inode *inode = cb->inode; in end_compressed_bio_read()
193 refcount_inc(&cb->pending_ios); in end_compressed_bio_read()
198 refcount_dec(&cb->pending_ios); in end_compressed_bio_read()
205 cb->status = status; in end_compressed_bio_read()
207 if (refcount_dec_and_test(&cb->pending_ios)) in end_compressed_bio_read()
208 finish_compressed_bio_read(cb); in end_compressed_bio_read()
218 const struct compressed_bio *cb) in end_compressed_writeback() argument
221 unsigned long index = cb->start >> PAGE_SHIFT; in end_compressed_writeback()
222 unsigned long end_index = (cb->start + cb->len - 1) >> PAGE_SHIFT; in end_compressed_writeback()
224 const int errno = blk_status_to_errno(cb->status); in end_compressed_writeback()
245 cb->start, cb->len); in end_compressed_writeback()
252 static void finish_compressed_bio_write(struct compressed_bio *cb) in finish_compressed_bio_write() argument
254 struct inode *inode = cb->inode; in finish_compressed_bio_write()
262 cb->start, cb->start + cb->len - 1, in finish_compressed_bio_write()
263 cb->status == BLK_STS_OK); in finish_compressed_bio_write()
265 if (cb->writeback) in finish_compressed_bio_write()
266 end_compressed_writeback(inode, cb); in finish_compressed_bio_write()
273 for (index = 0; index < cb->nr_pages; index++) { in finish_compressed_bio_write()
274 struct page *page = cb->compressed_pages[index]; in finish_compressed_bio_write()
280 /* Finally free the cb struct */ in finish_compressed_bio_write()
281 kfree(cb->compressed_pages); in finish_compressed_bio_write()
282 kfree(cb); in finish_compressed_bio_write()
287 struct compressed_bio *cb = in btrfs_finish_compressed_write_work() local
290 finish_compressed_bio_write(cb); in btrfs_finish_compressed_write_work()
302 struct compressed_bio *cb = bbio->private; in end_compressed_bio_write() local
305 cb->status = bbio->bio.bi_status; in end_compressed_bio_write()
307 if (refcount_dec_and_test(&cb->pending_ios)) { in end_compressed_bio_write()
308 struct btrfs_fs_info *fs_info = btrfs_sb(cb->inode->i_sb); in end_compressed_bio_write()
310 btrfs_record_physical_zoned(cb->inode, cb->start, &bbio->bio); in end_compressed_bio_write()
311 queue_work(fs_info->compressed_write_workers, &cb->write_end_work); in end_compressed_bio_write()
320 * @cb: The compressed_bio structure, which records all the needed
333 static struct bio *alloc_compressed_bio(struct compressed_bio *cb, u64 disk_bytenr, in alloc_compressed_bio() argument
338 struct btrfs_fs_info *fs_info = btrfs_sb(cb->inode->i_sb); in alloc_compressed_bio()
344 bio = btrfs_bio_alloc(BIO_MAX_VECS, opf, endio_func, cb); in alloc_compressed_bio()
363 refcount_inc(&cb->pending_ios); in alloc_compressed_bio()
387 struct compressed_bio *cb; in btrfs_submit_compressed_write() local
397 cb = kmalloc(sizeof(struct compressed_bio), GFP_NOFS); in btrfs_submit_compressed_write()
398 if (!cb) in btrfs_submit_compressed_write()
400 refcount_set(&cb->pending_ios, 1); in btrfs_submit_compressed_write()
401 cb->status = BLK_STS_OK; in btrfs_submit_compressed_write()
402 cb->inode = &inode->vfs_inode; in btrfs_submit_compressed_write()
403 cb->start = start; in btrfs_submit_compressed_write()
404 cb->len = len; in btrfs_submit_compressed_write()
405 cb->compressed_pages = compressed_pages; in btrfs_submit_compressed_write()
406 cb->compressed_len = compressed_len; in btrfs_submit_compressed_write()
407 cb->writeback = writeback; in btrfs_submit_compressed_write()
408 INIT_WORK(&cb->write_end_work, btrfs_finish_compressed_write_work); in btrfs_submit_compressed_write()
409 cb->nr_pages = nr_pages; in btrfs_submit_compressed_write()
424 bio = alloc_compressed_bio(cb, cur_disk_bytenr, in btrfs_submit_compressed_write()
489 if (refcount_dec_and_test(&cb->pending_ios)) in btrfs_submit_compressed_write()
490 finish_compressed_bio_write(cb); in btrfs_submit_compressed_write()
514 struct compressed_bio *cb, in add_ra_bio_pages() argument
519 u64 cur = bio_end_offset(cb->orig_bio); in add_ra_bio_pages()
609 (em->block_start >> 9) != cb->orig_bio->bi_iter.bi_sector) { in add_ra_bio_pages()
629 ret = bio_add_page(cb->orig_bio, page, add_size, offset_in_page(cur)); in add_ra_bio_pages()
665 struct compressed_bio *cb; in btrfs_submit_compressed_read() local
697 cb = kmalloc(sizeof(struct compressed_bio), GFP_NOFS); in btrfs_submit_compressed_read()
698 if (!cb) { in btrfs_submit_compressed_read()
703 refcount_set(&cb->pending_ios, 1); in btrfs_submit_compressed_read()
704 cb->status = BLK_STS_OK; in btrfs_submit_compressed_read()
705 cb->inode = inode; in btrfs_submit_compressed_read()
707 cb->start = em->orig_start; in btrfs_submit_compressed_read()
711 cb->len = bio->bi_iter.bi_size; in btrfs_submit_compressed_read()
712 cb->compressed_len = compressed_len; in btrfs_submit_compressed_read()
713 cb->compress_type = em->compress_type; in btrfs_submit_compressed_read()
714 cb->orig_bio = bio; in btrfs_submit_compressed_read()
719 cb->nr_pages = DIV_ROUND_UP(compressed_len, PAGE_SIZE); in btrfs_submit_compressed_read()
720 cb->compressed_pages = kcalloc(cb->nr_pages, sizeof(struct page *), GFP_NOFS); in btrfs_submit_compressed_read()
721 if (!cb->compressed_pages) { in btrfs_submit_compressed_read()
726 ret2 = btrfs_alloc_page_array(cb->nr_pages, cb->compressed_pages); in btrfs_submit_compressed_read()
732 add_ra_bio_pages(inode, em_start + em_len, cb, &memstall, &pflags); in btrfs_submit_compressed_read()
735 cb->len = bio->bi_iter.bi_size; in btrfs_submit_compressed_read()
742 struct page *page = cb->compressed_pages[index]; in btrfs_submit_compressed_read()
747 comp_bio = alloc_compressed_bio(cb, cur_disk_byte, in btrfs_submit_compressed_read()
751 cb->status = errno_to_blk_status(PTR_ERR(comp_bio)); in btrfs_submit_compressed_read()
815 if (refcount_dec_and_test(&cb->pending_ios)) in btrfs_submit_compressed_read()
816 finish_compressed_bio_read(cb); in btrfs_submit_compressed_read()
820 if (cb->compressed_pages) { in btrfs_submit_compressed_read()
821 for (i = 0; i < cb->nr_pages; i++) { in btrfs_submit_compressed_read()
822 if (cb->compressed_pages[i]) in btrfs_submit_compressed_read()
823 __free_page(cb->compressed_pages[i]); in btrfs_submit_compressed_read()
827 kfree(cb->compressed_pages); in btrfs_submit_compressed_read()
828 kfree(cb); in btrfs_submit_compressed_read()
1214 static int btrfs_decompress_bio(struct compressed_bio *cb) in btrfs_decompress_bio() argument
1218 int type = cb->compress_type; in btrfs_decompress_bio()
1221 ret = compression_decompress_bio(workspace, cb); in btrfs_decompress_bio()
1269 * @cb: The compressed extent descriptor
1276 * |<----------- @cb range ---->|
1280 * Note that, @cb can be a subpage of the full decompressed extent, but
1281 * @cb->start always has the same as the orig_file_offset value of the full
1293 struct compressed_bio *cb, u32 decompressed) in btrfs_decompress_buf2page() argument
1295 struct bio *orig_bio = cb->orig_bio; in btrfs_decompress_buf2page()
1310 * cb->start may underflow, but subtracting that value can still in btrfs_decompress_buf2page()
1313 bvec_offset = page_offset(bvec.bv_page) + bvec.bv_offset - cb->start; in btrfs_decompress_buf2page()