LCOV - code coverage report
Current view: top level - spdk/module/bdev/ocf - data.c (source / functions) Hit Total Coverage
Test: Combined Lines: 36 45 80.0 %
Date: 2024-07-13 17:14:17 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 12 23 52.2 %

           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                 :      73987 : vbdev_ocf_data_alloc(uint32_t iovcnt)
      12                 :            : {
      13                 :            :         struct bdev_ocf_data *data;
      14                 :            : 
      15                 :      73987 :         data = env_malloc(sizeof(*data), ENV_MEM_NOIO);
      16         [ -  + ]:      73987 :         if (!data) {
      17                 :          0 :                 return NULL;
      18                 :            :         }
      19                 :            : 
      20                 :      73987 :         data->seek = 0;
      21                 :            : 
      22         [ +  - ]:      73987 :         if (iovcnt) {
      23                 :      73987 :                 data->iovs = env_malloc(sizeof(*data->iovs) * iovcnt, ENV_MEM_NOIO);
      24         [ -  + ]:      73987 :                 if (!data->iovs) {
      25                 :          0 :                         env_free(data);
      26                 :          0 :                         return NULL;
      27                 :            :                 }
      28                 :            :         }
      29                 :            : 
      30                 :      73987 :         data->iovcnt = 0;
      31                 :      73987 :         data->iovalloc = iovcnt;
      32                 :            : 
      33                 :      73987 :         return data;
      34                 :            : }
      35                 :            : 
      36                 :            : void
      37                 :      73987 : vbdev_ocf_data_free(struct bdev_ocf_data *data)
      38                 :            : {
      39         [ -  + ]:      73987 :         if (!data) {
      40                 :          0 :                 return;
      41                 :            :         }
      42                 :            : 
      43         [ +  - ]:      73987 :         if (data->iovalloc != 0) {
      44                 :      73987 :                 env_free(data->iovs);
      45                 :            :         }
      46                 :            : 
      47                 :      73987 :         env_free(data);
      48                 :            : }
      49                 :            : 
      50                 :            : void
      51                 :      73987 : vbdev_ocf_iovs_add(struct bdev_ocf_data *data, void *base, size_t len)
      52                 :            : {
      53         [ -  + ]:      73987 :         assert(NULL != data);
      54         [ -  + ]:      73987 :         assert(data->iovalloc != -1);
      55                 :            : 
      56         [ -  + ]:      73987 :         if (data->iovcnt == data->iovalloc) {
      57                 :            :                 /* TODO: Realloc iovs */
      58                 :          0 :                 SPDK_ERRLOG("IOV error\n");
      59                 :            :         }
      60                 :            : 
      61                 :      73987 :         data->iovs[data->iovcnt].iov_base = base;
      62                 :      73987 :         data->iovs[data->iovcnt].iov_len = len;
      63                 :      73987 :         data->iovcnt++;
      64                 :      73987 : }
      65                 :            : 
      66                 :            : struct bdev_ocf_data *
      67                 :    1204593 : vbdev_ocf_data_from_spdk_io(struct spdk_bdev_io *bdev_io)
      68                 :            : {
      69                 :            :         struct bdev_ocf_data *data;
      70                 :            : 
      71         [ -  + ]:    1204593 :         if (bdev_io == NULL) {
      72                 :          0 :                 return NULL;
      73                 :            :         }
      74                 :            : 
      75      [ +  +  - ]:    1204593 :         switch (bdev_io->type) {
      76                 :     785969 :         case SPDK_BDEV_IO_TYPE_WRITE:
      77                 :            :         case SPDK_BDEV_IO_TYPE_READ:
      78         [ -  + ]:     785969 :                 assert(bdev_io->u.bdev.iovs);
      79                 :     785969 :                 break;
      80                 :     418624 :         case SPDK_BDEV_IO_TYPE_FLUSH:
      81                 :            :         case SPDK_BDEV_IO_TYPE_UNMAP:
      82                 :     418624 :                 break;
      83                 :          0 :         default:
      84                 :          0 :                 SPDK_ERRLOG("Unsupported IO type %d\n", bdev_io->type);
      85                 :          0 :                 return NULL;
      86                 :            :         }
      87                 :            : 
      88                 :    1204593 :         data = (struct bdev_ocf_data *)bdev_io->driver_ctx;
      89                 :    1204593 :         data->iovs = bdev_io->u.bdev.iovs;
      90                 :    1204593 :         data->iovcnt = bdev_io->u.bdev.iovcnt;
      91                 :    1204593 :         data->size = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
      92                 :            : 
      93                 :    1204593 :         return data;
      94                 :            : }

Generated by: LCOV version 1.14