LCOV - code coverage report
Current view: top level - spdk/lib/ftl/mngt - ftl_mngt_shutdown.c (source / functions) Hit Total Coverage
Test: Combined Lines: 4 5 80.0 %
Date: 2024-07-15 17:07:53 Functions: 1 1 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 4 50.0 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright (C) 2022 Intel Corporation.
       3                 :            :  *   All rights reserved.
       4                 :            :  */
       5                 :            : 
       6                 :            : #include "ftl_core.h"
       7                 :            : #include "ftl_mngt.h"
       8                 :            : #include "ftl_mngt_steps.h"
       9                 :            : 
      10                 :            : /*
      11                 :            :  * Steps executed during clean shutdown - includes persisting metadata and rolling
      12                 :            :  * back any setup steps executed during startup (closing bdevs, io channels, etc)
      13                 :            :  */
      14                 :            : static const struct ftl_mngt_process_desc desc_shutdown = {
      15                 :            :         .name = "FTL shutdown",
      16                 :            :         .error_handler = ftl_mngt_rollback_device,
      17                 :            :         .steps = {
      18                 :            :                 {
      19                 :            :                         .name = "Deinit core IO channel",
      20                 :            :                         .action = ftl_mngt_deinit_io_channel
      21                 :            :                 },
      22                 :            :                 {
      23                 :            :                         .name = "Unregister IO device",
      24                 :            :                         .action = ftl_mngt_unregister_io_device
      25                 :            :                 },
      26                 :            :                 {
      27                 :            :                         .name = "Stop core poller",
      28                 :            :                         .action = ftl_mngt_stop_core_poller
      29                 :            :                 },
      30                 :            :                 {
      31                 :            :                         .name = "Persist L2P",
      32                 :            :                         .action = ftl_mngt_persist_l2p
      33                 :            :                 },
      34                 :            :                 {
      35                 :            :                         .name = "Finish L2P trims",
      36                 :            :                         .action = ftl_mngt_trim_l2p,
      37                 :            :                 },
      38                 :            :                 {
      39                 :            :                         .name = "Persist metadata",
      40                 :            :                         .action = ftl_mngt_persist_md
      41                 :            :                 },
      42                 :            :                 {
      43                 :            :                         .name = "Set FTL clean state",
      44                 :            :                         .action = ftl_mngt_set_clean
      45                 :            :                 },
      46                 :            :                 {
      47                 :            :                         .name = "Dump statistics",
      48                 :            :                         .action = ftl_mngt_dump_stats
      49                 :            :                 },
      50                 :            :                 {
      51                 :            :                         .name = "Deinitialize L2P",
      52                 :            :                         .action = ftl_mngt_deinit_l2p
      53                 :            :                 },
      54                 :            :                 {
      55                 :            :                         .name = "Deinitialize P2L checkpointing",
      56                 :            :                         .action = ftl_mngt_p2l_deinit_ckpt
      57                 :            :                 },
      58                 :            :                 {
      59                 :            :                         .name = "Rollback FTL device",
      60                 :            :                         .action = ftl_mngt_rollback_device
      61                 :            :                 },
      62                 :            :                 {}
      63                 :            :         }
      64                 :            : };
      65                 :            : 
      66                 :            : /*
      67                 :            :  * Steps executed during fast clean shutdown (shutting down to shared memory). Utilizes
      68                 :            :  * minimum amount of metadata persistence and rolls back any setup steps executed during
      69                 :            :  * startup (closing bdevs, io channels, etc)
      70                 :            :  */
      71                 :            : static const struct ftl_mngt_process_desc desc_fast_shutdown = {
      72                 :            :         .name = "FTL fast shutdown",
      73                 :            :         .steps = {
      74                 :            :                 {
      75                 :            :                         .name = "Deinit core IO channel",
      76                 :            :                         .action = ftl_mngt_deinit_io_channel
      77                 :            :                 },
      78                 :            :                 {
      79                 :            :                         .name = "Unregister IO device",
      80                 :            :                         .action = ftl_mngt_unregister_io_device
      81                 :            :                 },
      82                 :            :                 {
      83                 :            :                         .name = "Stop core poller",
      84                 :            :                         .action = ftl_mngt_stop_core_poller
      85                 :            :                 },
      86                 :            :                 {
      87                 :            :                         .name = "Fast persist metadata",
      88                 :            :                         .action = ftl_mngt_fast_persist_md
      89                 :            :                 },
      90                 :            :                 {
      91                 :            :                         .name = "Set FTL SHM clean state",
      92                 :            :                         .action = ftl_mngt_set_shm_clean
      93                 :            :                 },
      94                 :            :                 {
      95                 :            :                         .name = "Dump statistics",
      96                 :            :                         .action = ftl_mngt_dump_stats
      97                 :            :                 },
      98                 :            :                 {
      99                 :            :                         .name = "Deinitialize L2P",
     100                 :            :                         .action = ftl_mngt_deinit_l2p
     101                 :            :                 },
     102                 :            :                 {
     103                 :            :                         .name = "Deinitialize P2L checkpointing",
     104                 :            :                         .action = ftl_mngt_p2l_deinit_ckpt
     105                 :            :                 },
     106                 :            :                 {
     107                 :            :                         .name = "Rollback FTL device",
     108                 :            :                         .action = ftl_mngt_rollback_device
     109                 :            :                 },
     110                 :            :                 {}
     111                 :            :         }
     112                 :            : };
     113                 :            : 
     114                 :            : int
     115                 :         22 : ftl_mngt_call_dev_shutdown(struct spdk_ftl_dev *dev, ftl_mngt_completion cb, void *cb_cntx)
     116                 :            : {
     117                 :            :         const struct ftl_mngt_process_desc *pdesc;
     118                 :            : 
     119   [ -  +  -  + ]:         22 :         if (dev->conf.fast_shutdown) {
     120                 :          0 :                 pdesc = &desc_fast_shutdown;
     121                 :            :         } else {
     122                 :         22 :                 pdesc = &desc_shutdown;
     123                 :            :         }
     124                 :         22 :         return ftl_mngt_process_execute(dev, pdesc, cb, cb_cntx);
     125                 :            : }

Generated by: LCOV version 1.14