xref: /freebsd-src/sys/geom/geom_slice.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1dd84a43cSPoul-Henning Kamp /*-
2*3728855aSPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
3*3728855aSPedro F. Giffuni  *
4dd84a43cSPoul-Henning Kamp  * Copyright (c) 2002 Poul-Henning Kamp
5dd84a43cSPoul-Henning Kamp  * Copyright (c) 2002 Networks Associates Technology, Inc.
6dd84a43cSPoul-Henning Kamp  * All rights reserved.
7dd84a43cSPoul-Henning Kamp  *
8dd84a43cSPoul-Henning Kamp  * This software was developed for the FreeBSD Project by Poul-Henning Kamp
9dd84a43cSPoul-Henning Kamp  * and NAI Labs, the Security Research Division of Network Associates, Inc.
10dd84a43cSPoul-Henning Kamp  * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
11dd84a43cSPoul-Henning Kamp  * DARPA CHATS research program.
12dd84a43cSPoul-Henning Kamp  *
13dd84a43cSPoul-Henning Kamp  * Redistribution and use in source and binary forms, with or without
14dd84a43cSPoul-Henning Kamp  * modification, are permitted provided that the following conditions
15dd84a43cSPoul-Henning Kamp  * are met:
16dd84a43cSPoul-Henning Kamp  * 1. Redistributions of source code must retain the above copyright
17dd84a43cSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer.
18dd84a43cSPoul-Henning Kamp  * 2. Redistributions in binary form must reproduce the above copyright
19dd84a43cSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer in the
20dd84a43cSPoul-Henning Kamp  *    documentation and/or other materials provided with the distribution.
21dd84a43cSPoul-Henning Kamp  * 3. The names of the authors may not be used to endorse or promote
22dd84a43cSPoul-Henning Kamp  *    products derived from this software without specific prior written
23dd84a43cSPoul-Henning Kamp  *    permission.
24dd84a43cSPoul-Henning Kamp  *
25dd84a43cSPoul-Henning Kamp  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
26dd84a43cSPoul-Henning Kamp  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27dd84a43cSPoul-Henning Kamp  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28dd84a43cSPoul-Henning Kamp  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
29dd84a43cSPoul-Henning Kamp  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30dd84a43cSPoul-Henning Kamp  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31dd84a43cSPoul-Henning Kamp  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32dd84a43cSPoul-Henning Kamp  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33dd84a43cSPoul-Henning Kamp  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34dd84a43cSPoul-Henning Kamp  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35dd84a43cSPoul-Henning Kamp  * SUCH DAMAGE.
36dd84a43cSPoul-Henning Kamp  */
37dd84a43cSPoul-Henning Kamp 
385a6baf54SPoul-Henning Kamp #ifndef _GEOM_GEOM_SLICE_H_
395a6baf54SPoul-Henning Kamp #define _GEOM_GEOM_SLICE_H_
405a6baf54SPoul-Henning Kamp 
41dd84a43cSPoul-Henning Kamp struct g_slice {
42dd84a43cSPoul-Henning Kamp 	off_t	offset;
43dd84a43cSPoul-Henning Kamp 	off_t	length;
4448444d62SPoul-Henning Kamp 	u_int	sectorsize;
45dd84a43cSPoul-Henning Kamp 	struct	g_provider *provider;
46dd84a43cSPoul-Henning Kamp };
47dd84a43cSPoul-Henning Kamp 
48183a45f6SPoul-Henning Kamp struct g_slice_hot {
49183a45f6SPoul-Henning Kamp 	off_t	offset;
50183a45f6SPoul-Henning Kamp 	off_t	length;
517220a9e7SPoul-Henning Kamp 	int	ract;
527220a9e7SPoul-Henning Kamp 	int	dact;
537220a9e7SPoul-Henning Kamp 	int	wact;
54183a45f6SPoul-Henning Kamp };
55183a45f6SPoul-Henning Kamp 
56dd84a43cSPoul-Henning Kamp typedef int g_slice_start_t (struct bio *bp);
57dd84a43cSPoul-Henning Kamp 
58dd84a43cSPoul-Henning Kamp struct g_slicer {
59188321b7SPoul-Henning Kamp 	u_int			nslice;
60188321b7SPoul-Henning Kamp 	u_int			nprovider;
61dd84a43cSPoul-Henning Kamp 	struct g_slice		*slices;
627220a9e7SPoul-Henning Kamp 
63183a45f6SPoul-Henning Kamp 	u_int			nhotspot;
64183a45f6SPoul-Henning Kamp 	struct g_slice_hot	*hotspot;
657220a9e7SPoul-Henning Kamp 
66dd84a43cSPoul-Henning Kamp 	void			*softc;
67dd84a43cSPoul-Henning Kamp 	g_slice_start_t		*start;
688cd1535aSPoul-Henning Kamp 	g_event_t		*hot;
69dd84a43cSPoul-Henning Kamp };
70dd84a43cSPoul-Henning Kamp 
7107d77fc6SPoul-Henning Kamp g_dumpconf_t g_slice_dumpconf;
7202c62349SJaakko Heinonen int g_slice_config(struct g_geom *gp, u_int idx, int how, off_t offset, off_t length, u_int sectorsize, const char *fmt, ...) __printflike(7, 8);
7315649213SPoul-Henning Kamp void g_slice_spoiled(struct g_consumer *cp);
74bdf2e45aSPawel Jakub Dawidek void g_slice_orphan(struct g_consumer *cp);
755a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_CHECK	0
765a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_SET	1
775a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_FORCE	2
78188321b7SPoul-Henning Kamp struct g_geom * g_slice_new(struct g_class *mp, u_int slices, struct g_provider *pp, struct g_consumer **cpp, void *extrap, int extra, g_slice_start_t *start);
79188321b7SPoul-Henning Kamp 
807220a9e7SPoul-Henning Kamp int g_slice_conf_hot(struct g_geom *gp, u_int idx, off_t offset, off_t length, int ract, int dact, int wact);
817220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_ALLOW	1
827220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_DENY	2
837220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_START	4
847220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_CALL	8
857220a9e7SPoul-Henning Kamp 
86ce67c955SPoul-Henning Kamp int g_slice_destroy_geom(struct gctl_req *req, struct g_class *mp, struct g_geom *gp);
87ce67c955SPoul-Henning Kamp 
88188321b7SPoul-Henning Kamp void g_slice_finish_hot(struct bio *bp);
89dd84a43cSPoul-Henning Kamp 
905a6baf54SPoul-Henning Kamp #endif /* _GEOM_GEOM_SLICE_H_ */
91