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

            Line data    Source code
       1              : /* SPDX-License-Identifier: GPL-2.0-or-later */
       2              : #ifndef _PCACHE_SEGMENT_H
       3              : #define _PCACHE_SEGMENT_H
       4              : 
       5              : #include <linux/bio.h>
       6              : #include <linux/bitfield.h>
       7              : 
       8              : #include "pcache_internal.h"
       9              : 
      10              : struct pcache_segment_info {
      11              :         struct pcache_meta_header       header;
      12              :         __u32                   flags;
      13              :         __u32                   next_seg;
      14              : };
      15              : 
      16              : #define PCACHE_SEG_INFO_FLAGS_HAS_NEXT          BIT(0)
      17              : 
      18              : #define PCACHE_SEG_INFO_FLAGS_TYPE_MASK         GENMASK(4, 1)
      19              : #define PCACHE_SEGMENT_TYPE_CACHE_DATA          1
      20              : 
      21        31870 : static inline bool segment_info_has_next(struct pcache_segment_info *seg_info)
      22              : {
      23        31870 :         return (seg_info->flags & PCACHE_SEG_INFO_FLAGS_HAS_NEXT);
      24              : }
      25              : 
      26       106547 : static inline void segment_info_set_type(struct pcache_segment_info *seg_info, u8 type)
      27              : {
      28       106547 :         seg_info->flags &= ~PCACHE_SEG_INFO_FLAGS_TYPE_MASK;
      29       106547 :         seg_info->flags |= FIELD_PREP(PCACHE_SEG_INFO_FLAGS_TYPE_MASK, type);
      30       106547 : }
      31              : 
      32              : static inline u8 segment_info_get_type(struct pcache_segment_info *seg_info)
      33              : {
      34              :         return FIELD_GET(PCACHE_SEG_INFO_FLAGS_TYPE_MASK, seg_info->flags);
      35              : }
      36              : 
      37              : struct pcache_segment_pos {
      38              :         struct pcache_segment   *segment;       /* Segment associated with the position */
      39              :         u32                     off;            /* Offset within the segment */
      40              : };
      41              : 
      42              : struct pcache_segment_init_options {
      43              :         u8                      type;
      44              :         u32                     seg_id;
      45              :         u32                     data_off;
      46              : 
      47              :         struct pcache_segment_info      *seg_info;
      48              : };
      49              : 
      50              : struct pcache_segment {
      51              :         struct pcache_cache_dev *cache_dev;
      52              : 
      53              :         void                    *data;
      54              :         u32                     data_size;
      55              :         u32                     seg_id;
      56              : 
      57              :         struct pcache_segment_info      *seg_info;
      58              : };
      59              : 
      60              : int segment_copy_to_bio(struct pcache_segment *segment,
      61              :                       u32 data_off, u32 data_len, struct bio *bio, u32 bio_off);
      62              : int segment_copy_from_bio(struct pcache_segment *segment,
      63              :                         u32 data_off, u32 data_len, struct bio *bio, u32 bio_off);
      64              : 
      65              : static inline void segment_pos_advance(struct pcache_segment_pos *seg_pos, u32 len)
      66              : {
      67              :         BUG_ON(seg_pos->off + len > seg_pos->segment->data_size);
      68              : 
      69              :         seg_pos->off += len;
      70              : }
      71              : 
      72              : void pcache_segment_init(struct pcache_cache_dev *cache_dev, struct pcache_segment *segment,
      73              :                       struct pcache_segment_init_options *options);
      74              : #endif /* _PCACHE_SEGMENT_H */
        

Generated by: LCOV version 2.0-1