1beacf11bSopenharmony_ci/****************************************************************************
2beacf11bSopenharmony_ci * drivers/bch/bchlib_teardown.c
3beacf11bSopenharmony_ci *
4beacf11bSopenharmony_ci * Licensed to the Apache Software Foundation (ASF) under one or more
5beacf11bSopenharmony_ci * contributor license agreements.  See the NOTICE file distributed with
6beacf11bSopenharmony_ci * this work for additional information regarding copyright ownership.  The
7beacf11bSopenharmony_ci * ASF licenses this file to you under the Apache License, Version 2.0 (the
8beacf11bSopenharmony_ci * "License"); you may not use this file except in compliance with the
9beacf11bSopenharmony_ci * License.  You may obtain a copy of the License at
10beacf11bSopenharmony_ci *
11beacf11bSopenharmony_ci *   http://www.apache.org/licenses/LICENSE-2.0
12beacf11bSopenharmony_ci *
13beacf11bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14beacf11bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15beacf11bSopenharmony_ci * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
16beacf11bSopenharmony_ci * License for the specific language governing permissions and limitations
17beacf11bSopenharmony_ci * under the License.
18beacf11bSopenharmony_ci *
19beacf11bSopenharmony_ci ****************************************************************************/
20beacf11bSopenharmony_ci
21beacf11bSopenharmony_ci/****************************************************************************
22beacf11bSopenharmony_ci * Included Files
23beacf11bSopenharmony_ci ****************************************************************************/
24beacf11bSopenharmony_ci#include <stdlib.h>
25beacf11bSopenharmony_ci#include <errno.h>
26beacf11bSopenharmony_ci#include <assert.h>
27beacf11bSopenharmony_ci#include "bch.h"
28beacf11bSopenharmony_ci
29beacf11bSopenharmony_ci/****************************************************************************
30beacf11bSopenharmony_ci * Public Functions
31beacf11bSopenharmony_ci ****************************************************************************/
32beacf11bSopenharmony_ci
33beacf11bSopenharmony_ci/****************************************************************************
34beacf11bSopenharmony_ci * Name: bchlib_teardown
35beacf11bSopenharmony_ci *
36beacf11bSopenharmony_ci * Description:
37beacf11bSopenharmony_ci *   Setup so that the block driver referenced by 'blkdev' can be accessed
38beacf11bSopenharmony_ci *   similar to a character device.
39beacf11bSopenharmony_ci *
40beacf11bSopenharmony_ci ****************************************************************************/
41beacf11bSopenharmony_ci
42beacf11bSopenharmony_ciint bchlib_teardown(void *handle)
43beacf11bSopenharmony_ci{
44beacf11bSopenharmony_ci  struct bchlib_s *bch = (struct bchlib_s *)handle;
45beacf11bSopenharmony_ci
46beacf11bSopenharmony_ci  DEBUGASSERT(handle);
47beacf11bSopenharmony_ci
48beacf11bSopenharmony_ci  /* Check that there are not outstanding reference counts on the object */
49beacf11bSopenharmony_ci
50beacf11bSopenharmony_ci  if (bch->refs > 0)
51beacf11bSopenharmony_ci    {
52beacf11bSopenharmony_ci      return -EBUSY;
53beacf11bSopenharmony_ci    }
54beacf11bSopenharmony_ci
55beacf11bSopenharmony_ci  /* Flush any pending data to the block driver */
56beacf11bSopenharmony_ci
57beacf11bSopenharmony_ci  (void)bchlib_flushsector(bch);
58beacf11bSopenharmony_ci
59beacf11bSopenharmony_ci  /* Close the block driver */
60beacf11bSopenharmony_ci
61beacf11bSopenharmony_ci  (void)close_blockdriver(bch->vnode);
62beacf11bSopenharmony_ci
63beacf11bSopenharmony_ci  /* Free the BCH state structure */
64beacf11bSopenharmony_ci
65beacf11bSopenharmony_ci  if (bch->buffer)
66beacf11bSopenharmony_ci    {
67beacf11bSopenharmony_ci      free(bch->buffer);
68beacf11bSopenharmony_ci    }
69beacf11bSopenharmony_ci
70beacf11bSopenharmony_ci  (void)sem_destroy(&bch->sem);
71beacf11bSopenharmony_ci  free(bch);
72beacf11bSopenharmony_ci  return OK;
73beacf11bSopenharmony_ci}
74beacf11bSopenharmony_ci
75