Lines Matching refs:ws

741 static void free_heuristic_ws(struct list_head *ws)  in free_heuristic_ws()  argument
745 workspace = list_entry(ws, struct heuristic_ws, list); in free_heuristic_ws()
755 struct heuristic_ws *ws; in alloc_heuristic_ws() local
757 ws = kzalloc(sizeof(*ws), GFP_KERNEL); in alloc_heuristic_ws()
758 if (!ws) in alloc_heuristic_ws()
761 ws->sample = kvmalloc(MAX_SAMPLE_SIZE, GFP_KERNEL); in alloc_heuristic_ws()
762 if (!ws->sample) in alloc_heuristic_ws()
765 ws->bucket = kcalloc(BUCKET_SIZE, sizeof(*ws->bucket), GFP_KERNEL); in alloc_heuristic_ws()
766 if (!ws->bucket) in alloc_heuristic_ws()
769 ws->bucket_b = kcalloc(BUCKET_SIZE, sizeof(*ws->bucket_b), GFP_KERNEL); in alloc_heuristic_ws()
770 if (!ws->bucket_b) in alloc_heuristic_ws()
773 INIT_LIST_HEAD(&ws->list); in alloc_heuristic_ws()
774 return &ws->list; in alloc_heuristic_ws()
776 free_heuristic_ws(&ws->list); in alloc_heuristic_ws()
988 static void free_workspace(int type, struct list_head *ws) in free_workspace() argument
990 return __free_workspace(type, ws, false); in free_workspace()
1246 static u32 shannon_entropy(struct heuristic_ws *ws) in shannon_entropy() argument
1253 sz_base = ilog2_w(ws->sample_size); in shannon_entropy()
1254 for (i = 0; i < BUCKET_SIZE && ws->bucket[i].count > 0; i++) { in shannon_entropy()
1255 p = ws->bucket[i].count; in shannon_entropy()
1260 entropy_sum /= ws->sample_size; in shannon_entropy()
1382 static int byte_core_set_size(struct heuristic_ws *ws) in byte_core_set_size() argument
1386 const u32 core_set_threshold = ws->sample_size * 90 / 100; in byte_core_set_size()
1387 struct bucket_item *bucket = ws->bucket; in byte_core_set_size()
1390 radix_sort(ws->bucket, ws->bucket_b, BUCKET_SIZE); in byte_core_set_size()
1420 static u32 byte_set_size(const struct heuristic_ws *ws) in byte_set_size() argument
1426 if (ws->bucket[i].count > 0) in byte_set_size()
1436 if (ws->bucket[i].count > 0) { in byte_set_size()
1446 static bool sample_repeated_patterns(struct heuristic_ws *ws) in sample_repeated_patterns() argument
1448 const u32 half_of_sample = ws->sample_size / 2; in sample_repeated_patterns()
1449 const u8 *data = ws->sample; in sample_repeated_patterns()
1455 struct heuristic_ws *ws) in heuristic_collect_sample() argument
1491 memcpy(&ws->sample[curr_sample_pos], &in_data[i], in heuristic_collect_sample()
1503 ws->sample_size = curr_sample_pos; in heuristic_collect_sample()
1524 struct heuristic_ws *ws; in btrfs_compress_heuristic() local
1529 ws = list_entry(ws_list, struct heuristic_ws, list); in btrfs_compress_heuristic()
1531 heuristic_collect_sample(inode, start, end, ws); in btrfs_compress_heuristic()
1533 if (sample_repeated_patterns(ws)) { in btrfs_compress_heuristic()
1538 memset(ws->bucket, 0, sizeof(*ws->bucket)*BUCKET_SIZE); in btrfs_compress_heuristic()
1540 for (i = 0; i < ws->sample_size; i++) { in btrfs_compress_heuristic()
1541 byte = ws->sample[i]; in btrfs_compress_heuristic()
1542 ws->bucket[byte].count++; in btrfs_compress_heuristic()
1545 i = byte_set_size(ws); in btrfs_compress_heuristic()
1551 i = byte_core_set_size(ws); in btrfs_compress_heuristic()
1562 i = shannon_entropy(ws); in btrfs_compress_heuristic()