LCOV - code coverage report
Current view: top level - dm-pcache - segment.c (source / functions) Coverage Total Hit
Test: dm_pcache.info Lines: 97.1 % 35 34
Test Date: 2025-08-08 03:56:04 Functions: 100.0 % 3 3
Legend: Lines: hit not hit

            Line data    Source code
       1              : // SPDX-License-Identifier: GPL-2.0-or-later
       2              : #include <linux/dax.h>
       3              : 
       4              : #include "pcache_internal.h"
       5              : #include "cache_dev.h"
       6              : #include "segment.h"
       7              : 
       8     21877544 : int segment_copy_to_bio(struct pcache_segment *segment,
       9              :                 u32 data_off, u32 data_len, struct bio *bio, u32 bio_off)
      10              : {
      11     21877544 :         struct iov_iter iter;
      12     21877544 :         size_t copied;
      13     21877544 :         void *src;
      14              : 
      15     21820999 :         iov_iter_bvec(&iter, ITER_DEST, &bio->bi_io_vec[bio->bi_iter.bi_idx],
      16     21877544 :                         bio_segments(bio), bio->bi_iter.bi_size);
      17     21826057 :         iter.iov_offset = bio->bi_iter.bi_bvec_done;
      18     21826057 :         if (bio_off)
      19     10442753 :                 iov_iter_advance(&iter, bio_off);
      20              : 
      21     21830121 :         src = segment->data + data_off;
      22     21830121 :         copied = _copy_mc_to_iter(src, data_len, &iter);
      23     21884777 :         if (copied != data_len)
      24            0 :                 return -EIO;
      25              : 
      26              :         return 0;
      27              : }
      28              : 
      29     41653557 : int segment_copy_from_bio(struct pcache_segment *segment,
      30              :                 u32 data_off, u32 data_len, struct bio *bio, u32 bio_off)
      31              : {
      32     41653557 :         struct iov_iter iter;
      33     41653557 :         size_t copied;
      34     41653557 :         void *dst;
      35              : 
      36     41447058 :         iov_iter_bvec(&iter, ITER_SOURCE, &bio->bi_io_vec[bio->bi_iter.bi_idx],
      37     41653557 :                         bio_segments(bio), bio->bi_iter.bi_size);
      38     41442974 :         iter.iov_offset = bio->bi_iter.bi_bvec_done;
      39     41442974 :         if (bio_off)
      40       393319 :                 iov_iter_advance(&iter, bio_off);
      41              : 
      42     41442977 :         dst = segment->data + data_off;
      43     41442977 :         copied = _copy_from_iter_flushcache(dst, data_len, &iter);
      44     41710148 :         if (copied != data_len)
      45              :                 return -EIO;
      46     41710148 :         pmem_wmb();
      47              : 
      48     41710148 :         return 0;
      49              : }
      50              : 
      51       106547 : void pcache_segment_init(struct pcache_cache_dev *cache_dev, struct pcache_segment *segment,
      52              :                       struct pcache_segment_init_options *options)
      53              : {
      54       106547 :         segment->seg_info = options->seg_info;
      55       106547 :         segment_info_set_type(segment->seg_info, options->type);
      56              : 
      57       106547 :         segment->cache_dev = cache_dev;
      58       106547 :         segment->seg_id = options->seg_id;
      59       106547 :         segment->data_size = PCACHE_SEG_SIZE - options->data_off;
      60       106547 :         segment->data = CACHE_DEV_SEGMENT(cache_dev, options->seg_id) + options->data_off;
      61       106547 : }
        

Generated by: LCOV version 2.0-1