LCOV - code coverage report
Current view: top level - spdk/module/bdev/ocf - data.c (source / functions) Hit Total Coverage
Test: Combined Lines: 36 53 67.9 %
Date: 2024-11-18 03:10:06 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 12 163 7.4 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright (C) 2018 Intel Corporation.
       3                 :            :  *   All rights reserved.
       4                 :            :  */
       5                 :            : 
       6                 :            : #include <ocf/ocf.h>
       7                 :            : #include "spdk/bdev.h"
       8                 :            : #include "data.h"
       9                 :            : 
      10                 :            : struct bdev_ocf_data *
      11                 :      74437 : vbdev_ocf_data_alloc(uint32_t iovcnt)
      12                 :            : {
      13                 :          0 :         struct bdev_ocf_data *data;
      14                 :            : 
      15                 :      74437 :         data = env_malloc(sizeof(*data), ENV_MEM_NOIO);
      16         [ -  + ]:      74437 :         if (!data) {
      17                 :          0 :                 return NULL;
      18                 :            :         }
      19                 :            : 
      20   [ #  #  #  # ]:      74437 :         data->seek = 0;
      21                 :            : 
      22         [ +  - ]:      74437 :         if (iovcnt) {
      23   [ #  #  #  # ]:      74437 :                 data->iovs = env_malloc(sizeof(*data->iovs) * iovcnt, ENV_MEM_NOIO);
      24   [ -  +  #  #  :      74437 :                 if (!data->iovs) {
                   #  # ]
      25                 :          0 :                         env_free(data);
      26                 :          0 :                         return NULL;
      27                 :            :                 }
      28                 :          0 :         }
      29                 :            : 
      30   [ #  #  #  # ]:      74437 :         data->iovcnt = 0;
      31   [ #  #  #  # ]:      74437 :         data->iovalloc = iovcnt;
      32                 :            : 
      33                 :      74437 :         return data;
      34                 :          0 : }
      35                 :            : 
      36                 :            : void
      37                 :      74437 : vbdev_ocf_data_free(struct bdev_ocf_data *data)
      38                 :            : {
      39         [ -  + ]:      74437 :         if (!data) {
      40                 :          0 :                 return;
      41                 :            :         }
      42                 :            : 
      43   [ +  -  #  #  :      74437 :         if (data->iovalloc != 0) {
                   #  # ]
      44   [ #  #  #  # ]:      74437 :                 env_free(data->iovs);
      45                 :          0 :         }
      46                 :            : 
      47                 :      74437 :         env_free(data);
      48                 :          0 : }
      49                 :            : 
      50                 :            : void
      51                 :      74437 : vbdev_ocf_iovs_add(struct bdev_ocf_data *data, void *base, size_t len)
      52                 :            : {
      53   [ -  +  #  # ]:      74437 :         assert(NULL != data);
      54   [ -  +  #  #  :      74437 :         assert(data->iovalloc != -1);
             #  #  #  # ]
      55                 :            : 
      56   [ -  +  #  #  :      74437 :         if (data->iovcnt == data->iovalloc) {
          #  #  #  #  #  
                      # ]
      57                 :            :                 /* TODO: Realloc iovs */
      58                 :          0 :                 SPDK_ERRLOG("IOV error\n");
      59                 :          0 :         }
      60                 :            : 
      61   [ #  #  #  #  :      74437 :         data->iovs[data->iovcnt].iov_base = base;
          #  #  #  #  #  
             #  #  #  #  
                      # ]
      62   [ #  #  #  #  :      74437 :         data->iovs[data->iovcnt].iov_len = len;
          #  #  #  #  #  
             #  #  #  #  
                      # ]
      63   [ #  #  #  # ]:      74437 :         data->iovcnt++;
      64                 :      74437 : }
      65                 :            : 
      66                 :            : struct bdev_ocf_data *
      67                 :    1245374 : vbdev_ocf_data_from_spdk_io(struct spdk_bdev_io *bdev_io)
      68                 :            : {
      69                 :          0 :         struct bdev_ocf_data *data;
      70                 :            : 
      71         [ -  + ]:    1245374 :         if (bdev_io == NULL) {
      72                 :          0 :                 return NULL;
      73                 :            :         }
      74                 :            : 
      75   [ +  +  -  #  :    1245374 :         switch (bdev_io->type) {
                #  #  # ]
      76                 :     817694 :         case SPDK_BDEV_IO_TYPE_WRITE:
      77                 :            :         case SPDK_BDEV_IO_TYPE_READ:
      78   [ -  +  #  #  :     817694 :                 assert(bdev_io->u.bdev.iovs);
          #  #  #  #  #  
                #  #  # ]
      79                 :     817694 :                 break;
      80                 :     427680 :         case SPDK_BDEV_IO_TYPE_FLUSH:
      81                 :            :         case SPDK_BDEV_IO_TYPE_UNMAP:
      82                 :     427680 :                 break;
      83                 :          0 :         default:
      84   [ #  #  #  # ]:          0 :                 SPDK_ERRLOG("Unsupported IO type %d\n", bdev_io->type);
      85                 :          0 :                 return NULL;
      86                 :            :         }
      87                 :            : 
      88         [ #  # ]:    1245374 :         data = (struct bdev_ocf_data *)bdev_io->driver_ctx;
      89   [ #  #  #  #  :    1245374 :         data->iovs = bdev_io->u.bdev.iovs;
          #  #  #  #  #  
                #  #  # ]
      90   [ #  #  #  #  :    1245374 :         data->iovcnt = bdev_io->u.bdev.iovcnt;
          #  #  #  #  #  
                #  #  # ]
      91   [ #  #  #  #  :    1245374 :         data->size = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
      92                 :            : 
      93                 :    1245374 :         return data;
      94                 :          0 : }

Generated by: LCOV version 1.14