Lines Matching refs:cb
126 struct compressed_bio *cb) in compression_decompress_bio() argument
128 switch (cb->compress_type) { in compression_decompress_bio()
129 case BTRFS_COMPRESS_ZLIB: return zlib_decompress_bio(ws, cb); in compression_decompress_bio()
130 case BTRFS_COMPRESS_LZO: return lzo_decompress_bio(ws, cb); in compression_decompress_bio()
131 case BTRFS_COMPRESS_ZSTD: return zstd_decompress_bio(ws, cb); in compression_decompress_bio()
163 static void btrfs_free_compressed_pages(struct compressed_bio *cb) in btrfs_free_compressed_pages() argument
165 for (unsigned int i = 0; i < cb->nr_pages; i++) in btrfs_free_compressed_pages()
166 put_page(cb->compressed_pages[i]); in btrfs_free_compressed_pages()
167 kfree(cb->compressed_pages); in btrfs_free_compressed_pages()
170 static int btrfs_decompress_bio(struct compressed_bio *cb);
174 struct compressed_bio *cb = to_compressed_bio(bbio); in end_compressed_bio_read() local
178 status = errno_to_blk_status(btrfs_decompress_bio(cb)); in end_compressed_bio_read()
180 btrfs_free_compressed_pages(cb); in end_compressed_bio_read()
181 btrfs_bio_end_io(cb->orig_bbio, status); in end_compressed_bio_read()
189 static noinline void end_compressed_writeback(const struct compressed_bio *cb) in end_compressed_writeback() argument
191 struct inode *inode = &cb->bbio.inode->vfs_inode; in end_compressed_writeback()
193 unsigned long index = cb->start >> PAGE_SHIFT; in end_compressed_writeback()
194 unsigned long end_index = (cb->start + cb->len - 1) >> PAGE_SHIFT; in end_compressed_writeback()
196 const int errno = blk_status_to_errno(cb->bbio.bio.bi_status); in end_compressed_writeback()
215 cb->start, cb->len); in end_compressed_writeback()
224 struct compressed_bio *cb = in btrfs_finish_compressed_write_work() local
227 btrfs_finish_ordered_extent(cb->bbio.ordered, NULL, cb->start, cb->len, in btrfs_finish_compressed_write_work()
228 cb->bbio.bio.bi_status == BLK_STS_OK); in btrfs_finish_compressed_write_work()
230 if (cb->writeback) in btrfs_finish_compressed_write_work()
231 end_compressed_writeback(cb); in btrfs_finish_compressed_write_work()
234 btrfs_free_compressed_pages(cb); in btrfs_finish_compressed_write_work()
235 bio_put(&cb->bbio.bio); in btrfs_finish_compressed_write_work()
247 struct compressed_bio *cb = to_compressed_bio(bbio); in end_compressed_bio_write() local
250 queue_work(fs_info->compressed_write_workers, &cb->write_end_work); in end_compressed_bio_write()
253 static void btrfs_add_compressed_bio_pages(struct compressed_bio *cb) in btrfs_add_compressed_bio_pages() argument
255 struct bio *bio = &cb->bbio.bio; in btrfs_add_compressed_bio_pages()
258 while (offset < cb->compressed_len) { in btrfs_add_compressed_bio_pages()
259 u32 len = min_t(u32, cb->compressed_len - offset, PAGE_SIZE); in btrfs_add_compressed_bio_pages()
262 __bio_add_page(bio, cb->compressed_pages[offset >> PAGE_SHIFT], in btrfs_add_compressed_bio_pages()
285 struct compressed_bio *cb; in btrfs_submit_compressed_write() local
290 cb = alloc_compressed_bio(inode, ordered->file_offset, in btrfs_submit_compressed_write()
293 cb->start = ordered->file_offset; in btrfs_submit_compressed_write()
294 cb->len = ordered->num_bytes; in btrfs_submit_compressed_write()
295 cb->compressed_pages = compressed_pages; in btrfs_submit_compressed_write()
296 cb->compressed_len = ordered->disk_num_bytes; in btrfs_submit_compressed_write()
297 cb->writeback = writeback; in btrfs_submit_compressed_write()
298 INIT_WORK(&cb->write_end_work, btrfs_finish_compressed_write_work); in btrfs_submit_compressed_write()
299 cb->nr_pages = nr_pages; in btrfs_submit_compressed_write()
300 cb->bbio.bio.bi_iter.bi_sector = ordered->disk_bytenr >> SECTOR_SHIFT; in btrfs_submit_compressed_write()
301 cb->bbio.ordered = ordered; in btrfs_submit_compressed_write()
302 btrfs_add_compressed_bio_pages(cb); in btrfs_submit_compressed_write()
304 btrfs_submit_bio(&cb->bbio, 0); in btrfs_submit_compressed_write()
320 struct compressed_bio *cb, in add_ra_bio_pages() argument
325 struct bio *orig_bio = &cb->orig_bbio->bio; in add_ra_bio_pages()
326 u64 cur = cb->orig_bbio->file_offset + orig_bio->bi_iter.bi_size; in add_ra_bio_pages()
472 struct compressed_bio *cb; in btrfs_submit_compressed_read() local
495 cb = alloc_compressed_bio(inode, file_offset, REQ_OP_READ, in btrfs_submit_compressed_read()
498 cb->start = em->orig_start; in btrfs_submit_compressed_read()
502 cb->len = bbio->bio.bi_iter.bi_size; in btrfs_submit_compressed_read()
503 cb->compressed_len = compressed_len; in btrfs_submit_compressed_read()
504 cb->compress_type = em->compress_type; in btrfs_submit_compressed_read()
505 cb->orig_bbio = bbio; in btrfs_submit_compressed_read()
509 cb->nr_pages = DIV_ROUND_UP(compressed_len, PAGE_SIZE); in btrfs_submit_compressed_read()
510 cb->compressed_pages = kcalloc(cb->nr_pages, sizeof(struct page *), GFP_NOFS); in btrfs_submit_compressed_read()
511 if (!cb->compressed_pages) { in btrfs_submit_compressed_read()
516 ret2 = btrfs_alloc_page_array(cb->nr_pages, cb->compressed_pages); in btrfs_submit_compressed_read()
522 add_ra_bio_pages(&inode->vfs_inode, em_start + em_len, cb, &memstall, in btrfs_submit_compressed_read()
526 cb->len = bbio->bio.bi_iter.bi_size; in btrfs_submit_compressed_read()
527 cb->bbio.bio.bi_iter.bi_sector = bbio->bio.bi_iter.bi_sector; in btrfs_submit_compressed_read()
528 btrfs_add_compressed_bio_pages(cb); in btrfs_submit_compressed_read()
533 btrfs_submit_bio(&cb->bbio, 0); in btrfs_submit_compressed_read()
537 kfree(cb->compressed_pages); in btrfs_submit_compressed_read()
539 bio_put(&cb->bbio.bio); in btrfs_submit_compressed_read()
923 static int btrfs_decompress_bio(struct compressed_bio *cb) in btrfs_decompress_bio() argument
927 int type = cb->compress_type; in btrfs_decompress_bio()
930 ret = compression_decompress_bio(workspace, cb); in btrfs_decompress_bio()
934 zero_fill_bio(&cb->orig_bbio->bio); in btrfs_decompress_bio()
1010 struct compressed_bio *cb, u32 decompressed) in btrfs_decompress_buf2page() argument
1012 struct bio *orig_bio = &cb->orig_bbio->bio; in btrfs_decompress_buf2page()
1030 bvec_offset = page_offset(bvec.bv_page) + bvec.bv_offset - cb->start; in btrfs_decompress_buf2page()